책 소개

본 포스트는 스프링 입문을 위한 자바 객체지향의 원리와 이해open in new window라는 책에 대한 소개입니다.

책을 구매하게 된 계기

최근에 Spring과 OOP 공부를 하면서 2년전에 참고했던 여름나라 겨울이야기open in new window 라는 블로그의 글이 생각나서 다시 정독했다.

그 당시에는 두루뭉실하게 와닿았던 개념들이었는데, 이제 읽어보니 굉장히 이해하기 쉽게 작성된 포스트였다. 그리고 그 블로그의 저자가 출간한 책이 있다는 것을 알았고, 바로 구매했다. 책의 내용과 구성은 기대를 저버리지 않았다. OOP의 개념을 더욱 확고하게 정립할 수 있었고 Spring을 사용하는 목적과 Spring이 지향하는 방향에 대해 이해할 수 있었다.

저자 소개

저자에 대한 정보는 아래의 페이지들에서 자세하게 알 수 있다.

책을 읽으면서 인상 깊었던 점

이해하기 쉽도록 전달

기존에 알려진 지식을 그대로 전달하는 것이 아닌 저자 나름대로의 해석을 통해 독자가 이해하기 쉽도록 전달하는 게 좋았다. 예를 들면 다음과 같다.

Define of Spring Framework

Spring Framework를 설명하는 공식적인 정의는 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 어플리케이션 프레임워크 이다.

그런데 저자는 다음과 같이 정의한다.

"객체지향 프로그래밍을 위한 프레임워크" "OOP Framework"

Define of DIP(의존 역전 원칙)

로버트 C.마틴이 말하는 DIP(Dependency Inversion Principle)는 다음과 같다.

  • "고차원 모듈은 저차원 모듈에 의존하면 안 된다. 이 두 모듈 모두 다른 추상화 된 것에 의존해야 한다."
  • "추상화된 것은 구체적인 것에 의존하면 안 된다. 구체적인 것이 추상화 된 것에 의존해야 한다."
  • "자주 변경되는 구체(Concrete) 클래스에 의존하지 마라."

그리고 저자가 이를 직관적으로 해석한 내용은 다음과 같다.

  • "자신보다 변하기 쉬운 것에 의존하지 마라."

잘못된 개념 바로잡기

그리고 잘못된 개념을 바로 잡는 것들도 인상적이었다.

객체지향에서는 상속(inherit)이라는 단어를 많이 사용한다. 그런데 사실 이 단어는 잘못 된 것이고 확장(extend)가 맞다.

또한 클래스 상속 코드를 작성할 때도 inherit이 아니라 extend를 사용한다.

class Human extends Animal { }

상속은 일종 가계도라고 생각하면 된다.

uml diagram

그리고 여기서 만들어지는 코드는 이렇다.

할아버지 father = new 아버지();

위의 코드가 어색하다면 객체지향을 잘 이해하고 있는 것이다.

객체지향은 다형성(Polymorphism)이 지켜져야 하고, 다형성에는 대체가능성 이라는 개념이 있다.

대체가능성

확장(extends)된 객체는 원본으로 대체 가능하다.

일단 "아버지는 할아버지인가?" 에 대해서도 "그렇다" 라고 할 수 없으며,
더불어 "아버지가 할아버지를 대체할 수 있는가?" 에 대해 "그렇다" 라고 답할 수도 없다.

그렇기 때문에 "상속" 이라는 단어와 개념은 잘못 된 것이다.

그럼 다음의 경우에는 어떨까?

uml diagram
동물 뽀로로 = new 펭귄();

뽀로로는 펭귄이면서 동물이다. 그러므로 대체가능성이 성립한다.

Define of Class(클래스)

클래스는 사전적인 의미로 집합 종류 속하다 분류하다 등이 있다. 그렇기 때문에 "클래스를 상속하다"는 것은 잘못된 표현이다.

  • 클래스를 상속하다
  • 클래스를 확장하다

이렇듯 저자는 객체지향에서 통용되고 있는 잘못된 지식을 이해하기 쉽게 바로 잡도록 도와준다.

인간지향적인 객체지향

흔히들 객체지향은 인간 세상을 코드에 반영한 것이라고 한다.

그리고 저자는 이를 예제에 적절하게 반영하여 어째서 객체지향이 인간 중심적인지를 보여준다.

결론

이 책은 자바와 스프링을 전문적으로 다루는 책이 아니다. 말 그대로 나처럼 객체 지향의 개념을 이해하고자 하는 사람들에게 필요한 책이다. 저자는 다음 조건에 충족하는 사람들이 이 책을 접했을 때 좋다고 말한다.

  • 객체 지향의 특성과 설계 원리를 이해하고자 하는 개발자
  • 스프링 프레임워크에 입문하는 데 기초 지식이 부족하다고 느끼는 개발자

그리고 나 또한 그렇게 생각한다. 여태 까지 내가 읽어본 책 중에서 제일 명료하고 이해하기 쉬운 책이다.

Last Updated: