한윤석 개발 블로그

배운 것을 적는 블로그입니다.

루비로 배우는 객체지향 디자인 서평

등록일: 2021-02-04
수정일: 2021-02-04

객체지향 디자인이란 무엇일까?

객체지향이란 자율적인 객체들이 메시지로 협력하여 프로그램을 만드는 것을 말한다.
디자인이란 변경하기 쉽도록 코드를 배치하는 일이다.

즉 객체지향 디자인이란 자율적인 객체들을 어떻게 배치할 것인가에 대한 것이다.

객체지향 디자인을 왜 해야 할까?

우리는 수정하기 쉬운 코드를 작성해야 한다. 왜냐하면 소프트웨어는 변화하기 때문이다.

객체지향 디자인은 어떻게 할 수 있을까?

  • 객체는 하나의 책임만 가져야 한다. 객체의 모든 것들이 하나의 핵심 목표와 연관되어 있어야 한다. 이걸 강하게 응집되어 있다고 얘기한다. 클래스가 구현하고 있는 메서드를 질문 형태로 바꾸어서 말이 되는지 확인해본다. 예를 들어 메뉴에게 메뉴에는 어떤 메뉴들이 있나요? 라고 물어볼 수도 있다. 만약 메뉴에게 각 파스타는 어떻게 만드나요? 같은 질문을 하고 있다면 무언가가 이상한 것이다.
  • 의존성을 관리해야 한다. 객체가 자신이 해야 하는 일을 하기 위한 최소한의 지식만 알고 그 외에는 아무것도 몰라야 한다. 예를 들어서 파스타 만드는 방법이 바뀌었다고 해서 메뉴를 바꿔서는 안 된다.
    • 다른 클래스의 이름이 있나요?
    • 다른 객체에게 보낼 메시지의 이름이 포함되어 있는가?
    • 포함되어 있는 인자들을 알고 있는가?
    • 인자들을 전달하는 순서를 알고 있나요?
  • 유연한 인터페이스를 가져야 한다. 퍼블릭 인터페이스와 프라이빗 인터페이스를 구분하여, 다른 객체들이 변화가 별로 없는 퍼블릭 인터페이스에 의존하게 해야 한다.
  • 적합한 도구를 사용해야 한다.
    • 상속은 is-a 관계일 때 적합하다. 예를 들어 아메리카노는 커피다. 더치커피는 커피다.
    • 덕 타입은 behaves-like-a 관계일 때 적합하다. 예를 들어 커피는 끊일 수 있다. 페퍼민트 티도 끓일 수 있다.
    • 조합은 has-a 관계일 때 적합하다. 예를 들어 커피는 시럽을 가지고 있다.

Sources


자바스크립트로 직접 만들면서 배우는 - 자료구조와 알고리즘 강의 바로 가기
기계인간 이종립, 소프트웨어 개발의 지혜 - Git 강의 바로 가기

코드숨에서 매주 스터디를 진행하고 있습니다. 메일을 등록하시면 새로운 스터디가 시작될 때 알려드릴게요!