때는 바야흐로 22년 8월 즈음, 내가 고등학교 1학년이던 시절...
학교 수업으로 자바를 배울 때 처음 붕어빵에 대한 설명을 들었다.
선생님께서는 쉽게 가르쳐주시려고 클래스를 붕어빵틀, 객체를 붕어빵에 비유하며
설명을 해주셨다.
그러던 도중, 시간이 조금 지나 백엔드를 공부하던 내 친구가
자바에 대해 깊게 공부하던 도중 내린 결론은 "객체는 붕어빵이 아니다"라는 것이였다.
하지만 그 때도 난 객체가 붕어빵이 왜 아닌지 잘 이해하지 못하고 있었다.
허나 갑자기 급하게 궁금해져서 개념 정리겸 블로그를 써보자라고 생각했다.
먼저 붕어빵과 붕어빵틀을 자바 코드로 표현해보자!
붕어빵틀 붕어빵 = new 붕어빵틀();
음..이게 뭐농..? 붕어빵틀을 만들었는데 붕어빵이 됐다고오..? 잌읔엨엌...??
절대 말이 되지 않는 예제이다. 이는 잘못된 예시의 대표적인 예라고도 볼 수 있다.
컴퓨터 프로그래밍적으로 클래스의 정의에 대해 검색해보면, 다음과 같이 나온다.
OOP에서 특정 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀.
아마 이런 "틀"이라는 표현 때문에 붕어빵 예시를 제일 처음 든 분이
오해를 하고 이런 실수를 하여 예제를 만드신게 아닐까 싶다!
내 생각엔, 클래스는 같은 속성이나 기능을 가진 그룹을 나타내는 개념이라 생각한다!
다른 문제들에 대해서 더 생각을 해보자!
- 과일과 사과는 각각 클래스일까, 객체일까?
- 자동차와 벤츠는 각각 클래스일까, 객체일까?
- 학생과 대학생은 각각 클래스일까, 객체일까?
다음 문제들을 보며 생각해보자. 어떤 공통점이 있을까?
바로 한 속성이 다른 속성의 상위어라는 특징이 있다!
과일은 사과, 자동차는 벤츠, 학생은 대학생의 상위어이다.
그럼 과연 붕어빵틀은 붕어빵의 상위어일까? 정답은 아니다!
붕어빵이 맞는 예시가 되려면, 붕어빵이 상위어인 객체가 예시가 되어야 한다.
붕어빵 팥붕어빵 = new 붕어빵();
붕어빵 슈크림붕어빵 = new 붕어빵();
이런 식으로 표현한다면 붕어빵 예시는 어쩌면 클래스와 객체를 설명하는 데에
알맞는 예시라고 볼 수 있다.
이렇듯, 난 클래스는 객체들의 같은 속성들을 정의한 분류나 집합이라고 생각한다!
자세하게 공부해보니 왜 클래스가 붕어빵틀이고, 객체가 붕어빵이 아닌지에 대해
완벽히 이해가 되었다!
그럼 우리, 이제 붕어빵 말고 꼭 다른 예시로 객체와 클래스를 비교하자!
안녕하세요~
위의 사과와 과일등의 설명은 상속을 설명한것같습니다.
또한 클래스는 개념이며 인스턴스는 그 개념의 실체죠. 단순히 붕어빵이 객체가 아니라고 하면 오히려 이해가 어려우신분들도 계실것같습니다.
저도 과일, 사과 예시를 처음 봤을 때 클래스-인스턴스
의 관계를 적절히 설명하는 예시는 아니라고 생각했어요. 상속에 대한 적절한 예시 같습니다.
하지만 글의 전체적인 맥락을 보았을 때 무엇을 설명하려 하신 지는 이해 되었습니다. 클래스와 인스턴스의 주요 차이점이라고 한다면 실제 메모리를 점유하는 지 아닌 지. 즉 실체화 되었는 지 아닌 지가 핵심이라고 생각합니다.
다만 단어라는 게 실체화된 대상을 뜻하기도 하고 그 대상의 개념을 뜻하기도 하여 누구나 명쾌하게 이해할 수 있는 추상화된 예시를 찾기가 좀... 쉽지 않은 것 같습니다.
플라톤의 이데아가 좀 더 적절한 비유일까요?