ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클래스, 객체, 인스턴스
    JAVA 2020. 9. 21. 18:01
    반응형

    얼마 전 친구와 기술면접 관련 대화를 하다 클래스와 객체, 인스턴스의 차이는 무엇이냐고 질문을 받았습니다.

    분명 알고 있는 개념이였고 클래스는 이거, 객체는 저거, 인스턴스는 그거지 라고 생각은 했으나 제대로 대답을 하지 못했습니다.

    그 뜻은 그냥 모른다는 것과 똑같다는 뜻이고 너무 많이 부족하다는 것을 다시 한번 깨달았습니다.

    그래서 이번엔 가장 기본적이지만 그만큼 가장 중요한 클래스와 객체, 인스턴스에 대해 알아보겠습니다.

     


     

    클래스

     

    클래스는 객체를 구현하기 위한 설계도, 즉 틀을 뜻합니다.

    연관되어 있는 변수와 메서드의 집합으로 자바에서는 class 클래스명 { ... } 의 형식으로 만들 수 있습니다.

     

     

     

    객체

     

    객체는 소프트웨어 세계에서 구현할 대상입니다.

    '객체지향의 사실과 오해' 라는 책에서는 이러한 객체에 대해 현실세계를 모방해서 만드는 것이 아닌 현실세계를 바탕으로 새로운 세계를 창조하는 것이 객체지향의 목표라고 하는데 이 책 및 객체지향에 대해서도 나중에 포스팅 해보겠습니다. 

    또한 객체는 클래스에 선언된 모양 그대로 생성된 실체입니다.

     

     

     

    인스턴스

     

    위에 말한 클래스, 즉 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체를 인스턴스라고 합니다.

    즉, 객체를 소프트웨어에 실체화 하면 그것을 '인스턴스' 라고 부릅니다.

    이를 자바에서 설명하면 클래스를 new 연산자를 통해 Heap 영역에 생성하여 메모리를 할당하면

    그게 곧 인스턴스라고 말할 수 있습니다.

    그래서 인스턴스는 객체에 포함된다고 볼 수 있는데 엄격하게 말하면 객체와 인스턴스를 나누기는 어렵다고 합니다.

     

     

     

     

    즉, 정리해보면 클래스는 객체를 구현하기 위한 코드로 이루어진 설계도라고 할 수 있고,

    이러한 클래스를 이용해서 구현할 대상이 객체, 클래스를 토대로 메모리 상에 할당한 것이 인스턴스라고 정의할 수 있습니다.

     

     

     

    예시

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class Car {
        //클래스
        //... (변수와 메소드가 존재)    
    }
     
    public class Test {
        public static void main(String[] args) {
            //객체
           Car myCar;
            
            //인스턴스화
            //myCar 변수는 Car 클래스의 인스턴스라고 할 수 있다 (객체를 Heap 영역 메모리에 할당)
           myCar = new Car();
        }
    }
    cs

     

     

     

    References

    - https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html

    - https://jeong-pro.tistory.com/95

    728x90

    'JAVA' 카테고리의 다른 글

    [Study] 자바 1주차 과제  (0) 2020.11.17
    [JAVA] 제네릭(Generic) 이란?  (0) 2020.11.15
    [JAVA] StringTokenizer  (0) 2020.10.28
    자바의 메모리 구조  (0) 2020.09.18
    자바 설치 및 환경변수 설정  (0) 2020.09.01

    댓글

Designed by Tistory.