Uknow's Lab.
article thumbnail

클래스는 객체를 만들어내는 공장 혹은 틀이야!

 

저는 자바를 처음 배우면서 객체지향 프로그래밍을 처음 접하게 되었습니다.

1학년 때는 C를 주로 하던 탓에, 자바의 객체지향 프로그래밍은 다소 생소했고,

 

교수님께서 학생을 쉽게 이해시키기 위해

객체지향 프로그래밍의 가장 유명한 예시이자,

객체지향 프로그래밍을 공부할 때 한 번쯤은 들어봤을 예시

 

 

클래스와 객체는 붕어빵틀과 붕어빵의 관계와 비슷하다.
클래스는 붕어빵(객체)을 찍어내는 틀, 기계 혹은 공장이다.

 

 

당시에는 무슨 말인지 잘 몰랐다가, 점차 자바에 익숙해지고,

어느덧 당연하게도 클래스는 곧 공장이며, 객체는 공장에서 찍어낸 사물로 이해하게 되었습니다.

 

 

 

사실 클래스는 공장이 아니야. 붕어빵 틀과 붕어빵도 틀렸어.

 

https://www.yes24.com/Product/Goods/17350624

 

스프링 입문을 위한 자바 객체 지향의 원리와 이해 - YES24

자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량 애플리케이션 프레임워크인 스프링은 자바와 객체 지향이라는 기반 위에 굳건히 세워져 있다. 따라서 스프링을 제대로 이해하고 활용

www.yes24.com

 

자바와 스프링을 공부하면서, 동시에 스프링이 추구한 객체지향을 더 공부해보고 싶어서

위 책을 도서관에서 빌려 읽고 있었습니다.

 

그러던 중, 충격적인 문장을 보게 됩니다.

클래스 : 객체 = 붕어빵틀 : 붕어빵 예시는 틀렸다!

아니, 이게 도대체 무슨 소리야?

자바를 처음 공부했던 그 순간부터, 지금까지의 객체지향 프로그래밍 지식이 완전히 부정당하는 것 같았습니다.

어처구니 없는 마음에 책을 덮어버릴까 고민도 했었지만 좀 더 읽기로 하였고, 아래와 같은 의사코드를 보게 됩니다.

 

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

 

어?

어...???

어... 그렇네.

그렇습니다. 클래스는 개념이고, 객체는 이 개념의 실체화 된 것 입니다.

 

클래스는 비슷한 사물 혹은 개념 혹은 분류 중에서 비슷한 특성 혹은 속성을 모아논 것입니다.

즉, 클래스(개념)이 실체화된 것이 객체라고 볼 수 있지요.

 

클래스는 공장이나 틀 같은게 아니였습니다.

분류에 가깝습니다.

 

사람 : 홍길동

사람 : 전우치

 

펭귄 : 펭수

펭귄 : 뽀로로

 

분류로부터 무언가 실체화된 것이죠.

펭수는 펭귄입니다. 뽀로로도 펭귄이지요. 그럼, 붕어빵은 붕어빵틀일까요?

 

 

그럼, 붕어빵틀 예시를 조금 고쳐보겠습니다.

붕어빵 김치붕어빵 = new 붕어빵();
붕어빵 민초붕어빵 = new 붕어빵();
붕어빵 파인애플붕어방 = new 붕어빵();

 

붕어빵 - 김치붕어방,

붕어빵 - 민초붕어빵,

붕어빵 - 파인애플붕어빵.

개념으로부터 객체가 실체화 되었습니다.

이는 맞는 예시일까요?

붕어빵틀 - 붕어빵에 비하면 맞긴 하지만, 반만 맞는 것 같습니다.

 

객체란 곧 세상에 단 하나밖에 없는 사물입니다.

김치붕어빵, 파인애플 붕어빵은 하나가 아니죠.

근데 민초붕어빵은 하나도 없을지도 모르겠네요.

 

위 붕어빵 예시를 사람으로 한 번 나타내보겠습니다.

사람 파란옷을입은사람 = new 사람();
사람 한국인 = new 사람();
사람 안경을낀사람 = new 사람();
사람 남자 = new 사람();

 

그렇습니다.

붕어빵 - 생크림붕어빵, 붕어빵 - 팥붕어빵과 같은 예시는,

사람 - 한국인, 사람 - 안경쓴사람, 사람 - 남자 등과 같은 것이라 볼 수 있습니다.

 

객체는 하나밖에 없어야 합니다.

사람 홍길동 = new 사람();

사람 아이유 = new 사람();

이와 같이 세상에 단 하나밖에 없는 특정 '사람'을 가르키는 것이며,

객체는 곧 단 하나밖에 없는 사물을 가르킵니다.

 

붕어빵을 만들면서 일련번호를 부여해 1번 붕어빵, 2번 붕어빵 ... 으로 칭하여

각각의 객체를 모두 하나밖에 없는 '특별한' 객체로 취급하면?

이제서야, 붕어빵은 이제 세상에 단 하나밖에 없는 객체가 되었네요.

 

 

 

후기

이제 읽은지 하루밖에 안되긴 했지만,

객체지향 프로그래밍을 처음 접하고 지금까지 몇년동안 쌓아왔던 오해를 풀었던 첫 단추였네요.

물론, 클래스를 공장, 붕어빵틀 이라고 하신 교수님이 딱히 틀렸다는 생각은 들지 않습니다.

객체지향 개념을 완벽히 현실에 비유하기는 어렵고,

무엇보다도 객체지향을 처음 접하는 학생들에게는 더할나위 없이 좋은 예시였던 것 같습니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.