본문 바로가기

IT 도서 정리/오브젝트

[오브젝트] CHAPTER 1. 객체, 설계

정리의 취지

 

개발 관련 도서는 전공과 관련된 책이니만큼 전공책을 공부한다는 마음으로 읽어볼까 합니다.

 

저자는 실무가 이론보다 앞서며 코드를 통해 그 부분을 독자에게 잘 설명합니다.

책의 메인 내용이 코드 예제인만큼 코드도 넣으면 좋겠지만, 이 부분은 필자의 역량 부족으로 책을 참고해 주시면 감사하겠습니다.


 

핵심 용어

 

  • 의존성, 결합도
  • 캡슐화
  • 자율성, 응집도
  • 구현이 아닌 인터페이스에 의존하라.
  • 의인화

 

본문

 

티켓 판매 애플리케이션이라는 구체적인 예시를 통해 설명을 시작한다.

로버트 마틴은 <<클린 소프트웨어: 애자일 원칙과 패턴, 그리고 실천 방법>>이라는 책에서 모듈에 대해 설명한다.

 

모듈 - 크기와 상관없이 클래스나, 패키지, 라이브러리와 같이 프로그램을 구성하는 임의의 요소를 의미한다.

모듈의 조건

1. 제대로 실행되어야 함.
2. 변경이 용이해야 함.
3. 이해하기 쉬워야 함.

 

 

책의 티켓 판매 애플리케이션은 초기에 절차지향적인 코드로, 1번 조건은 만족하지만, 2,3번은 만족하지 않는다.

2번 조건(변경에 취약한 코드)

1. 의존성(dependency)이 높다.
2. 결합도(coupling)가 높다.
예제의 경우, 하나의 클래스의 코드를 변경할경우 그에 의존하는 클래스들의 코드들도 모두 변경해야 한다!!

 

 

3번 조건(이해가 어려운 코드)

1. 우리의 예상(실생활)에서 벗어나는 코드
2. 여러가지 세부적인 내용을 한꺼번에 기억해야 하는 코드
예제의 경우, 극장이라는 객체가 관람객의 가방을 직접 열어 초대장을 확인하고, 매표소에 직접 접근한다.
이는 우리의 실생활과는 크게 벗어나있다!!

 

어떻게 개선할까?

 

객체들을 캡슐화(encapsulation)를 통해 자율적인 존재로 만들자!

 

캡슐화 - 개념적이나 물리적으로 객체 내부의 세부적인 사항을 감추는 것

 

그리고, 이 과정을 통해 객체를 구현(implementation)이 아닌 인터페이스(interface)에 의존하게 만들어라!

 

인터페이스 - 외부

 

구현 - 내부          

캡슐화를 통해, 객체는 자기 자신의 문제를 스스로 해결한다.
캡슐화 -> 결합도, 응집도 down + 자율성, 응집도(cohesion) up

 

 

이처럼 객체들을 캡슐화하는 과정에서,

일상 속에서 수동적인 객체들도 스스로 문제를 해결하는 능동적이고 자율적인 존재로 변한다.

이를 의인화(anthropomorphism)라고 부른다.

 

좋은 설계란 무엇인가?

 

1. 오늘 완성해야 하는 기능을 구현

2. 내일 쉽게 변경할 수 있는 코드

변경을 수용할 수 있는 설계가 중요한 이유

1. 요구사항이 항상 변경된다.
2. 코드를 변경할 때 버그가 추가될 가능성이 높다.