티스토리 뷰
붕어빵틀과 붕어빵? |
컴퓨터 공학과 4학년인 지금.. 그동안 책을 보거나 학교에서 강의를 들을때 클래스와 객체의 관계를 붕어빵틀과 붕어빵에 비유 한것을 많이 보았다. 그때 당시에는 이 비유를 듣고 클래스가 뭐고 객체가 무엇인지 한번에 알 수 있어서 굉장히 좋은 비유라고 생각했다. 하지만, 사실은 이것은 오히려 객체지향을 제대로 이해하는데 방해가 되는 비유이다.
즉, 붕어빵틀(클래스)이 붕어빵(객체)를 만들어 낸다고 배웠었다.
우리가 A라는 클래스에서 a라는 객체를 생성할때 다음과 같이 생성한다.(동적 할당)
A a = new A();
같은 논리로 붕어빵틀 붕어빵 = new 붕어빵틀(); -> 붕어빵틀을 만들었더니 붕어빵이 나왔다 (????) 뭔가 좀 이상하다.
붕어빵틀은 붕어빵을 만들어내는 팩토리이지, 클래스와 객체의 관계로 비유하기에는 잘못된 비유이다. 제대로 된 비유를 얘기하자면 다음과 같다.
김연아(실체)는 사람(개념)이다. 뽀로로(실체)는 펭귄(개념)이다. 즉 클래스와 객체의 관계는 어떤 현실 세계의 개념에 대한 실체이지, 팩토리에서 무언가를 만들어 내는것이 아니다. 클래스와 객체 관계는 동등한 관계이다. 부모-자식 관계의 느낌이 아니다.
내식대로 해석을 해보자면, 붕어빵틀로부터 붕어빵을 만들어 내는것은 부모,자식 관계의 느낌이 강하다. 하지만 김연아는 사람이다는 김연아=사람 과 같이 이해 될 수 있는 동등한 개념이다. 즉, 김연아는 사람이라는 분류에 속한다. 하지만 붕어빵은 붕어빵틀이라는 분류에 속하지 않는다. 비슷한 성격의 실체,객체들을 하나로 분류한것이 클래스-객체 관계이다.
이제부터는 붕어빵틀과 붕어빵의 비유를 클래스와 객체의 관계로 오해하는것은 없어야 할 것이다.
즉 클래스는 어떤 개념적인 실체가 존재하지않는 껍데기만 존재하는 것이고,(사람)
객체라는것은 그 개념이 실체화된 어떤것을 의미한다.(김연아) 사람에 대해서는 나이를 물을 수 없지만(실체가 없기 떄문에) 김연아에 대해서는 나이가 몇살인지 물어볼수있다.(실체가 있기 때문에)
좀 더 쉽게 말하자면, 실체가 없는것에 실체를 불어넣는것이다.
어떤 단어가 주어졌을때 그 단어가 클래스인지, 객체인지 구분하는 방법은 다음과 같다.
그 단어의 어떤 속성에 대한 값을 말할수 있으면 객체이고 말할수 없으면 클래스이다.
예를들어, 쥐의 나이는? 이라고 물어보면 대답 할 수 없기 때문에 쥐라는 단어는 클래스이고, 미키마우스의 나이는? 이라고 물어봤을때 대답할수 있으므로 미키마우스는 객체에 좀 더 적합한 단어이다.
출처 : 스프링 입문을 위한 자바 객체 지향의 원리와 이해
'컴퓨터 공학과 졸업 > 객체지향' 카테고리의 다른 글
자바1 (0) | 2018.09.08 |
---|---|
객체 지향의 4대 특징 (1) | 2018.07.27 |
다형성이란 (0) | 2018.01.22 |
추상 클래스와 인터페이스 (0) | 2018.01.22 |
c++ 업캐스팅과 다운캐스팅 (2) | 2018.01.16 |
- Total
- Today
- Yesterday
- Polyfill
- server side rendering
- reactdom
- rendering scope
- reducer
- mobx
- await
- atomic design
- type alias
- computed
- useEffect
- Babel
- async
- design system
- hydrate
- react hooks
- state
- webpack
- es6
- props
- useRef
- storybook
- Next.js
- javascript
- Action
- promise
- return type
- react
- typescript
- reflow
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |