Home [자바 객체 지향의 원리와 이해] 3장 : 클래스 vs 객체
Post
Cancel

[자바 객체 지향의 원리와 이해] 3장 : 클래스 vs 객체

클래스 vs 객체 = 붕어빵틀 vs 붕어빵

나는 클래스와 객체를 붕어빵틀과 붕어빵으로 배웠다. 하지만 나의 생각은 이 책을 읽고난 후 달라졌다. 클래스란 무엇인가? 직역하자면 분류이다. 객체 지향을 이해하기 위해서는 먼저, 큰 그림을 생각해봐야 한다.

  • 세상에 존재하는 모든 것은 사물, 즉 객체(Object)이다.
  • 각각의 사물(객체)은 고유하다.
  • 사물(객체)은 속성을 갖는다.
  • 사물(객체)은 행위를 한다.

그렇다면 이것을 하나하나 이해하기보다는 분류하여 이해하는 것이 편하다.

  • 직립보행을 하며 말을 하는 존재를 사람이라고 분류한다.
  • 연미복, 짧은 다리, 날지 못하는 새를 펭귄이라고 분류한다.

그렇다면 클래스와 객체를 어떻게 분류할 것인가? 클래스와 객체를 구분하는 간단한 방법은 나이를 물어보는 것이다.

  • 사람의 나이는 몇 살인가? (클래스)
  • 김연아의 나이는 몇 살인가? (객체)
  • 뽀로로의 나이는 몇 살인가? (객체)
  • 펭귄의 나이는 몇 살인가? (클래스)

위의 질문이 어색하다면 클래스, 어색하지 않다면 객체인 것이다. 클래스는 분류에 대한 개념이지 실체가 아니며, 객체가 실체이다. 이제 붕어빵틀과 붕어빵에 대해서 알아보겠다. 붕어빵틀과 붕어빵이 왜 객체가 아닌가? 붕어빵틀 붕어방 = new 붕어방틀() 이것을 보아도 솔직히 잘 이해가 가지않았다. 다른 사람들 보면 모두가 이해가 간건지 책의 내용을 그대로 써놓았는데 나만 이해를 못한건가 싶었다. 구글링을 하다 보니 이해가 갔다. 방금 말했듯이, 클래스는 개념(분류)이고, 객체는 이 개념의 실체화인 것이다. 좀 더 쉽게 예를 들어보면,

사람 : 홍길동
사람 : 전우치
펭귄 : 뽀로로 펭귄 : 펭수

클래스(분류)로부터 무언가 실체화된 것들이다. 홍길동은 사람이다. 뽀로로는 펭귄이다. 그럼 붕어빵은 붕어빵틀인가? 이것을 보고 붕어빵틀과 붕어빵은 클래스(분류)와 객체 관계가 아니라는 것을 알게되었다.

붕어빵틀의 예시를 좀 더 고쳐보자.

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

은 맞는 예시일까? 붕어빵틀-붕어빵에 비하면 반만 맞는 것이다. 객체란 세상에서 단 하나밖에 없는 사물이다. 슈크림붕어빵, 팥붕어빵은 하나가 아니다.

위의 붕어빵 예시를 사람으로 한번 나타내보자.

사람 잠옷입은사람 = new 사람();
사람 남자 = new 사람();
사람 여자 = new 사람();

붕어빵 예시와 같이, 잠옷입은사람, 남자, 여자는 같은 것이다. 객체는 유일한 존재이며, 단 하나밖에 없어야한다.

사람 홍길동 = new 사람();
사람 아이유 = new 아이유();

이와 같이 세상에 단 하나밖에 없는 사물을 가르킨다. 만약 붕어빵 예시의 팥붕어빵, 슈크림붕어빵에 일련번호가 붙는다면, 그때서야 붕어빵은 세상에서 단 하나밖에 없는 객체가 되는 것이다.

정리하자면, 클래스는 분류 - 사람, 객체는 단 하나의 고유 사물-아이유, 홍길동, 이순신이다.

참고

최단경로:다익스트라

최단경로:플로이드-와샬