항해99 4주차 TIL

김근호·2023년 2월 3일
1

Java

목록 보기
5/10

클래스와 타입의 차이

객체의 클래스

  • 그 객체가 어떻게 구현되느냐를 정의
  • 객체의 내부 상태와 그 객체의 연산에 대한 구현 방법을 정의

객체의 타입

  • 그 객체의 인터페이스
  • 그 객체가 응답할 수 있는 요청(메시지)의 집합을 정의

타입 간의 관계

포함관계 or 합성관계

  • 한 객체가 다른 객체에 포함 되어 지는 관계
    ex) 메뉴들은 메뉴판에 포함된다

연관관계

  • 어느 한쪽이 포함되어 지는게 아닌, 한 객체가 다른 객체와 연결되어 있음을 나타낼 때
    ex) 손님과 바리스타

객체들의 협력

  • 객체지향의 세계는 협력하는 자율적인 객체들의 공동체
  • 적절한 객체에게 적절한 책임을 할당하는 것

설계과정 순서

  1. 협력 설계 시 객체보다 메시지를 먼저 선택
  2. 메시지를 수신하기에 적절한 객체를 선택
  3. 스스로 할 수 없는 일은 메시지를 전송해 다른 객체에게 도움을 요청
    => 객체지향 세계에서는 무생물도 생물처럼 의인화 해서 능동적이고 자율적인 존재로 생각하자!!
    ex) 메뉴판이 메시지를 수신하고 스스로 메뉴항목을 찾아서 제공
  4. 도움에 대한 답변을 받았으면 다음 요청을 위한 새로운 메시지를 보낸다
    ex) 손님이 메뉴판에게 메뉴와 가격에 대한 답변을 받았으면 바리스타에게 다음 메시지를 보낸다
  5. 설계가 끝나면 각 객체의 메시지들이 곧 인터페이스이며, 인터페이스들을 구현 가능할 정도로 메시지들을 상세하게 정제한다

즉, 메시지가 객체를 선택하게 하고, 그 후 메시지를 수신할 객체는 메시지를 처리할 책임을 맡게 되고 객체가 수신하는 메시지는 객체가 외부에 제공하는 공용 인터페이스에 포함됩니다.

인터페이스 정리하기

  • 각 객체를 수신 가능한 메시지만 추려내면 객체의 인터페이스가 된다
  • 구현은 객체들을 포괄하는 타입을 정의한 후 식별된 오퍼레이션을 타입의 인터페이스에 추가
  • 객체의 타입을 구현하는 일반적인 방법은 클래스
  • 협력을 통해 식별된 타입의 오퍼레이션은 외부에서 접근 가능한 공용 인터페이스의 일부라는 사실, 따라서 인터페이스에 포함된 오퍼레이션 역시 외부에서 접근 가능하도록 공용(public)으로 선언
  • 객체의 속성은 캡슐화 되어야 한다
    => 인터페이스를 정하는 단계에서 가급적 객체 내부의 구현에 대한 어떤 가정도 하지 말아야 한다
    객체의 구현을 할때 책임의 수행에 필요한 속성들을 정해주자
    그래야 인터페이스와 객체의 구현을 깔끔하게 분리할 수 있다

정리

1. 메시지가 객체를 결정한다는 말의 의미

=> 어떤 요청(메시지)을 처리하기에 적절한 객체를 선택

2. 책임을 따라 설계가 이뤄지는 과정

=> 메시지를 정한 후에 그 메시지를 수신하고 처리할 책임이 있는 객체를 선택

3. 인터페이스와 구현의 분리

=> 인터페이스는 인터페이스 대로 정의하고나서 그 후에 구현

profile
앞만 보고 나아가자!

0개의 댓글