객체는 왜 붕어빵이 아닐까

우빈·2023년 5월 20일
48
post-thumbnail

붕어빵과의 첫 만남

때는 바야흐로 22년 8월 즈음, 내가 고등학교 1학년이던 시절...
학교 수업으로 자바를 배울 때 처음 붕어빵에 대한 설명을 들었다.
선생님께서는 쉽게 가르쳐주시려고 클래스를 붕어빵틀, 객체를 붕어빵에 비유하며
설명을 해주셨다.

붕어빵이 아니라고?

그러던 도중, 시간이 조금 지나 백엔드를 공부하던 내 친구가
자바에 대해 깊게 공부하던 도중 내린 결론은 "객체는 붕어빵이 아니다"라는 것이였다.
하지만 그 때도 난 객체가 붕어빵이 왜 아닌지 잘 이해하지 못하고 있었다.
허나 갑자기 급하게 궁금해져서 개념 정리겸 블로그를 써보자라고 생각했다.

붕어빵과 붕어빵틀

먼저 붕어빵과 붕어빵틀을 자바 코드로 표현해보자!

붕어빵틀 붕어빵 = new 붕어빵틀();

음..이게 뭐농..? 붕어빵틀을 만들었는데 붕어빵이 됐다고오..? 잌읔엨엌...??
절대 말이 되지 않는 예제이다. 이는 잘못된 예시의 대표적인 예라고도 볼 수 있다.

왜 붕어빵이라고 하는거야?

컴퓨터 프로그래밍적으로 클래스의 정의에 대해 검색해보면, 다음과 같이 나온다.

OOP에서 특정 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀.

아마 이런 "틀"이라는 표현 때문에 붕어빵 예시를 제일 처음 든 분이
오해를 하고 이런 실수를 하여 예제를 만드신게 아닐까 싶다!

그럼 클래스랑 객체가 뭔데?

내 생각엔, 클래스는 같은 속성이나 기능을 가진 그룹을 나타내는 개념이라 생각한다!
다른 문제들에 대해서 더 생각을 해보자!

- 과일과 사과는 각각 클래스일까, 객체일까?
- 자동차와 벤츠는 각각 클래스일까, 객체일까?
- 학생과 대학생은 각각 클래스일까, 객체일까?

다음 문제들을 보며 생각해보자. 어떤 공통점이 있을까?
바로 한 속성이 다른 속성의 상위어라는 특징이 있다!
과일은 사과, 자동차는 벤츠, 학생은 대학생의 상위어이다.
그럼 과연 붕어빵틀은 붕어빵의 상위어일까? 정답은 아니다!

붕어빵이 맞는 예시가 되려면?

붕어빵이 맞는 예시가 되려면, 붕어빵이 상위어인 객체가 예시가 되어야 한다.

붕어빵 팥붕어빵 = new 붕어빵();
붕어빵 슈크림붕어빵 = new 붕어빵();

이런 식으로 표현한다면 붕어빵 예시는 어쩌면 클래스와 객체를 설명하는 데에
알맞는 예시라고 볼 수 있다.

그래서 내 결론은..

이렇듯, 난 클래스는 객체들의 같은 속성들을 정의한 분류나 집합이라고 생각한다!
자세하게 공부해보니 왜 클래스가 붕어빵틀이고, 객체가 붕어빵이 아닌지에 대해
완벽히 이해가 되었다!
그럼 우리, 이제 붕어빵 말고 꼭 다른 예시로 객체와 클래스를 비교하자!

profile
프론트엔드 공부중

19개의 댓글

comment-user-thumbnail
2023년 5월 23일

플라톤의 이데아가 좀 더 적절한 비유일까요?

4개의 답글
comment-user-thumbnail
2023년 5월 23일

안녕하세요~
위의 사과와 과일등의 설명은 상속을 설명한것같습니다.
또한 클래스는 개념이며 인스턴스는 그 개념의 실체죠. 단순히 붕어빵이 객체가 아니라고 하면 오히려 이해가 어려우신분들도 계실것같습니다.

2개의 답글
comment-user-thumbnail
2023년 5월 26일

정말 좋은 글이네여. 저도 공부할때 같이 써봐야겟어요 ㅎㅎㅎㅎㅎㅎㅎ

1개의 답글
comment-user-thumbnail
2023년 5월 28일

근제 자바로 짜면 다 객체지향 아닌가요???

1개의 답글
comment-user-thumbnail
2023년 5월 28일

저도 과일, 사과 예시를 처음 봤을 때 클래스-인스턴스의 관계를 적절히 설명하는 예시는 아니라고 생각했어요. 상속에 대한 적절한 예시 같습니다.

하지만 글의 전체적인 맥락을 보았을 때 무엇을 설명하려 하신 지는 이해 되었습니다. 클래스와 인스턴스의 주요 차이점이라고 한다면 실제 메모리를 점유하는 지 아닌 지. 즉 실체화 되었는 지 아닌 지가 핵심이라고 생각합니다.

다만 단어라는 게 실체화된 대상을 뜻하기도 하고 그 대상의 개념을 뜻하기도 하여 누구나 명쾌하게 이해할 수 있는 추상화된 예시를 찾기가 좀... 쉽지 않은 것 같습니다.

1개의 답글
comment-user-thumbnail
2023년 5월 29일

붕어빵 클래스가 붕어빵(인스턴스)을 만들기 위한 틀이라는 거지 붕어빵틀이라는 클래스를 말 하는 게 아니지 않나요??

붕어빵틀 - 붕어빵 비유를 억지로 파훼하려다보니 이상해진 것 같아요...

2개의 답글
comment-user-thumbnail
2023년 5월 30일

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ철학자인줄

답글 달기