BOOK

Head First Object-Oriented Analysis & Design

UCANON 2020. 7. 4. 14:01

Head First Object-Oriented Analysis & Design

이 책의 한글 부제목은 "세상을 설계하는 객체지향 방법론" 입니다.

 

객체지향은 우리가 살고 있는 세상을 인간의 입장에서 시스템적으로 디자인하기에 좋은 개념이다.

 

가끔씩 성경이나 책, 그리고 내가 보고, 느끼는 세상들을 객체지향적으로 바라보고 사고해 보곤 한다.

 

우리가 한국어와 문법 구조가 다른 외국어를 배울때 힘든 것은 언어에 대한 사고 방식의 차이 때문일 것이다.

우리말 어순에서 단어만 바꾸면 되는게 아니라 어순 자체가 완전히 다르기 때문이다.

 

프로그래밍 언어 세계의 "객체지향"이라는 개념도 마찬가지인 것 같다.

"객체지향" 이전의 언어들과는 완전히 사고 방식이 바뀌어야 하는 것이다.

코딩에서 사용하는 키워드와 API들만 바꾸면 되는게 아니라 완전히 소프트웨어를 설계하는 기준 자체가 달라야 한다.

 

우리가 외국어를 배울때 실제로 사용할 수 있어야 그게 내 것이 되듯이

"객체지향"에서 이야기하는 원리들을 하나하나 실전에 사용해 보야

그 원리들이 완전히 체득되게 된다.

 

그런 면에서 "Head First Object-Oriented Analysis & Design"의 책 내용이 맘에 든다.

그냥 이론 설명하고 예제 하나 들어주는게 아니라

개념을 간단히 잡아주고 그 개념을 실제적으로 어떻게 써먹는지를 가르치고 트레이닝 시켜주고 있다.

 

이 책 내용중에서 가장 기억에 남는게

"강아지문"을 만들어 주기 위해서 요구사항을 분석는 과정이었던 것 같다.

 

처음에는 리모콘으로 이용해서 주인이 버튼을 눌러 주면 강아지 문이 자동으로 열리도록 만들었는데,

시간이 지나다 보니 주인이 매번 버튼을 눌러주기가 귀찮아져서 강아지가 짖기만 하면 자동으로 문이 열려 지도록 업그레이드를 요청한다.

그런데 얼마후 문제가 발생한다. 다른 집 강아지가 짖어도 문이 열리는 게 아닌가.

이 문제점을 해결하기 위해서는 강아지의 소리을 문자열로 저장해서 소리 데이터를 비교하는 방식으로 업그레이드 하기로 결정한다.

 

이런 식의 상황들을 통해서 실제 객체지향의 원리들을 적용해서 프로젝트를 수행하듯이 가르쳐 주고 있다.

아래는 "Head First Object-Oriented Analysis & Design"에서 나온 내용중에서 객체 지향의 원리 부분을 발췌 했다.

 

객체 지향의 원리

  1. 변하는 것을 캡슐화하라.

  2. 구현에 의존하기보다는 인터페이스에 의존하도록 코딩하라.

  3. 각 클래스는 변경 요인이 오직 하나이어야 한다.

  4. 클래스는 행동과 기능에 관한 것입니다.

  5. 클래스는 확장에는 열려 있고, 수정에는 닫혀 있어야 한다. (OCP).-

  6. 공통되는 부분을 추출하여 추상화하고 한 곳에 두어 중복 코드를 피하라. (DRY)

  7. 시스템의 모든 객체는 하나의 책임만을 가지며, 객체가 제공하는 모든 서비스는 그 하나의 책임을 수행하는 데 집중되어 있어야 한다. (SRP)

  8. 서브 클래스들은 부모 클래스들이 사용되는 곳에 대체될 수 있어야 한다. (LSP)