BackEnd/Java

[Java] 스프링 개구리 책 - 붕어빵틀과 붕어빵에 대한 오해

kangminhyuk1111 2024. 5. 27. 20:51

흔히들 자바의 클래스를 설명할때 붕어빵과 붕어빵 틀에 대해 얘기한다.

내가 요즘 읽고있는 책에서는 이러한 설명방식이 잘못된 설명방식 이라고 이야기 한다.

평소에 붕어빵틀 - 붕어빵으로 클래스를 이해해 왔기에 글을 읽고 생각하는 시간을 가져보았다.

클래스 vs 객체 - 붕어빵틀과 붕어빵??..

클래스 객체명 = new 클래스();

여기 까지는 이해하기 어렵지 않다.

그렇다면 아래 코드는?

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

바로 위의 코드가 논리에 맞다고 생각한다면, 다시 한 번 생각해보는 것이 좋을 것 같다..

위의 코드를 이해하기 쉽도록 문장으로 풀어본다면,
새로운 붕어빵틀을 만들었더니 붕어빵이 되었다 <- 이것은 올바른 객체지향적 사고가 아니라고 생각한다.

이것이 붕어빵틀 to 붕어빵으로 이해하여 오류가 생긴 부분이라고 생각한다.

객체지향적인 개발을 할때는 반드시 클래스와 객체의 구분이 정확하고 명확해야한다.

예를들어 사람, 김연아, 유재석 세개의 키워드로 클래스와 객체의 구분을 명확히 해야한다면 다음과 같은 코드를 작성 가능 할 것이다.

클래스와 객체를 제대로 이해해보자.

사람 김연아 = new 김연아();
사람 유재석 = new 유재석();

김연아 사람 = new 유재석(); ???????

이것이 논리적으로 맞지 않을까?

1,2 - 사람이라는 클래스의 구현체가 김연아 혹은 유재석으로 구현되는 것이 올바른 구현 방식이라고 생각한다.

3 - 김연아라는 클래스로 유재석을 구현하는 것은 불가능하다.

그렇다면 위에서 구현한 붕어빵틀과 붕어빵의 오류를 제대로 잡아본다면 어떻게 될까?

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

이러한 코드가 클래스와 객체의 관계를 올바르게 해석한 코드라고 생각된다.

만약 붕어빵틀을 구현해야된다? 그렇다면 붕어빵틀은 붕어빵틀 클래스로 만들어진 구현체일것이고,
붕어빵틀 구현체 내부에 메서드 ex) createBread() 이런식으로 내부 메서드를 통해 새로운 붕어빵을 만들도록 할 것 같다.

클래스는 분류에 대한 개념이지 그를 구현한 실체가 될 수 없다.

물론 붕어빵틀과 붕어빵으로 클래스와 객체의 개념을 쉽게 이해할 수 있지만, 완전히 맞다고 생각하면 안되고,
이 방식에 대한 오류가 어떤부분인지 짚고 넘어가면 좋겠다.

스프링 입문을 위한 자바 객체 지향의 원리와 이해 <- 이 책 추천합니다.

반응형