본문
클래스(Class)와 객체(Object)
# 클래스(Class)와 객체(Object)
- 객체 : 객체는 유일무이(unique)한 사물이다.
- 클래스 : 클래스는 같은 특성을 지닌 여러 객체를 총칭하는 집합의 개념이다.
클래스 : 객체
펭귄 : 뽀로로
사람 : 김연아
쥐 : 미키마우스
클래스 객체명 : new 클래스();
Mouse mickey = new Mouse();
Mouse mickey // Mouse 객체에 대한 참조 변수 mickey를 만든다.
New Mouse() // Mouse 클래스의 인스턴스를 하나 만들어 힙에 배치한다.
대입문 // (=), Mouse 객체에 대한 주소(포인터)를 참조 변수 mickey에 할당한다.
그런데 클래스를 이용해 object를 만들었다는 것을 강조할 때는 object라는 표현보다는 클래스의 인스턴스(instance)라는 표현을 쓴다.
객체(object) = Class의 인스턴스
[잘못된 인식]
붕어빵틀 : 붕어빵
클래스 객체명 : new 클래스();
붕어빵틀 붕어빵 : new 붕어빵틀();
바로 위의 코드가 논리에 맞다고 생각된다면 객체 지향 프로그래머가 되는 것보다 입산 수도하거나 철학관을 개업하는 것을 추천하고 싶다. 아직 잘 이해가 안간다면 붕어빵틀과 붕어빵을 클래스와 객체관계라는 논리로 조금 더 풀어 보자. 붕어빵틀을 생산하는 금형 기계가 있다고 하자. 그럼 붕어빵틀이 붕어빵을 찍어내서 클래스라고 한다면 같은 논리로 금형 기계는 붕어빵틀을 찍어내는 클래스가 된다.
이를 코드로 나타내면 다음과 같다.
금형기계 붕어빵틀 = new 금형기계();
위 코드를 인간적인 말로 번역해 보면 다음과 같다.
새로운 금형기계를 하나 만들었더니 붕어빵틀이 되었다?
이해가 안되는 예제이다. 절대 금형기계와 붕어빵틀이 클래스와 객체 관게가 아니듯 붕어빵틀과 붕어빵도 클래스와 객체 관계가 아니다. 그럼 붕어빵에게 붕어빵틀은 무엇일까? 붕어빵틀은 붕어빵을 만드는 팩터리였던 것이다. 팩터리에 대해 모른다고 해도 걱정하지는 말자. 나중에 기회가 닿으면 디자인 패턴 서적 한권을 깊이 공부하면 된다.
붕어빵틀과 붕어빵도 클래스와 객체의 이런 일명만 설명하는 메타포인데, 그걸 클래스와 객체 관계의 전부를 표현하는 메타포로 착각하면서 지금까지도 그 폐해가 계속되고 있다.
아직도 객체와 클래스의 분류가 어렵다면 아래와 같이 속성값을 부여해서 질문해보면 답이 나올것이다.
객체 or 클래스 "~이 나이는?"
사람 사람의 나이는? - 클래스
펭귄 펭귄의 나이는? - 클래스
조류 조류의 나이는? - 클래스
동물 동물의 나이는? - 클래스
김연아 김연아의 나이는? - 객체
뽀로로 뽀로로의 나이는? - 객체
- 출처 및 참고자료 : 스프링 입문을 위한 자바객체지향의 원리와 이해(김종민 저)
댓글