클래스와 객체는 붕어빵틀과 붕어빵의 관계라고?

디퐁·2023년 2월 3일
0

'붕어빵틀과 붕어빵' 비유는 클래스와 객체가 어떻게 관계되어 있는지에 대한 개념의 30%만 표현한다.

100% 알아보자.

객체란 '유일무이한 것'이다

백종원이라는 사람은 세상에서 유일무이하다.
백종원씨와 이름이 같거나, 요리를 한다는 점이 같은 사람은 여러 명 있을 수 있지만
백종원씨와 출생년월일, 키, 몸무게, 몸 안의 세포의 수, 머리카락의 수, 살아온 과거까지 전부 동일한 사람은 없다.

이렇게 세상에서 유일무이한 것을 '객체'라고 한다.
백종원씨는 객체다.
이 글을 쓰고 있는 나도 객체고
이 글을 보고 있는 여러분도 객체다.

클래스는 '객체의 분류'다.

백종원씨, 나, 여러분 사이의 공통점이 있다.
우리는 '사람'이다.
우리는 사람으로 분류된다.

필자의 옆집 강아지 뽀삐는 사람일까? 아니다.
무슨 기준으로 사람인가 아닌가를 가르는걸까?

언어를 사용할 수 있으면 사람이다.
큰 뇌를 가지고 있으면 사람이다.
등등 다양한 기준을 내세울 수 있겠지만

객체지향 프로그래밍의 세계에서는
'같은 속성을 가지고 같은 행동을 하는가?'가 기준이다.

예를 들자면
키, 몸무게 등등의 속성을 가지고
말한다, 두 발로 걷는다, 먹는다, 잔다 등의 행위를 하면
'사람'으로 분류하는 식이다.

예시

이제 클래스와 객체의 예시를 여러 개 들어보자.

일단 붕어빵틀과 붕어빵 예시를 보자.
붕어빵틀 붕어빵 = new 붕어빵틀()
뭔가 이상하다.
new 붕어빵틀()은 유일무이한 '붕어빵틀' 객체 하나를 생성할 것이다.
현실 세계로 치자면
꼬리에 주름이 5개 있고 크기가 30cm * 50cm되는 등등의 속성을 가진 어떤 유일무이한 붕어빵틀을 만든 것이다.

이 붕어빵틀을 '붕어빵'이라고 부르는게 상식적으로 맞을까?
맞지 않다. 이상하다.

앞서 붕어빵틀과 붕어빵 비유는 클래스와 객체 사이의 관계를 30%만 설명한다고 했는데
그 설명하는 30%가 뭐냐면 '클래스는 객체의 설계도'라는 점이다.

실제 자바 코드를 보자.

class Person {
    String name;

    public Person(String name) {
        this.name = name
    }
}

new Person("홍길동")

모든 객체는
자바에서 정의한 class의 설계(필드, 메서드)대로 만들어진다.

이 '설계도'라는 개념만은 비유가 충분히 설명해주지만
클래스는 '객체의 분류'라는 개념은 설명해주지 못하기 때문에
붕어빵틀 붕어빵 = new 붕어빵틀()
붕어빵틀과 붕어빵이라는 비유만으로는 위 코드를 제대로 설명하지 못하는 것이다.

올바른 예시로써
백종원씨 예시를 보자.
사람 백종원 = new 사람()
new 사람()은 유일무이한 '사람' 객체를 하나 생성할 것이다.
이 안에 아마 많은 속성과 객체가 들어가야할 것이다. 살아온 과거, 머리카락의 수, 몸 속 세포의 수 등등..
그 유일무이한 어떤 '사람'을 '백종원'이라고 부르는 건 상식선에서 이해될만하다.

결론

객체는 '유일무이한 것'이고
클래스는 객체의 분류다.

profile
Backend 취준생

0개의 댓글