포도가게의 개발일지

Object[5] 본문

Tech

Object[5]

grape.store 2022. 4. 20. 01:11
반응형

책임 할당하기

  • 객체에 책임을 할당하는 기본적인 원리
  • 데이터보다 행동을 먼저 결정해라(인터페이스를 먼저 작성하라고 생각됨: 뒤에서 잘못됬다고 느낌 인터페이스를 쓰라는게 아니라 메세지를 먼저 작성해라라고 본다) -> 객체에게 중요한것은 데이터가 아니라 외부에 제공하는 행동이다. 클라이언트 관점에서 객체가 수행하는 행동이란 곧 객체의 책임을 의미한다.
  • 협력이라는 문맥 안에서 책임을 결정해라
  • 메시지를 전송하는 클라이언트 의도에 적합한 책임을 할당해야 한다.(메서드 써놓고 이건 누가 가져가야하지? 즉 문맥을 먼저 작성하고 각책임을 할당해줘라라고 이해된다.)
  • 메세지가 객체를 선택하게 해야 한다.("메세지를 전송해야 하는데 누구에게 전송하지?")
  • 데이터 중심으로 작성하게 되면 캡슐화를 신경쓰면서 해야됨 누굴 인터페이스로 누굴 구현으로 나누어 주어야하니까 근데 메시지기반으로 하게되면 자연스럽게 캡슐화가 이루어진다고 보여짐

 

GRASP 패턴

  • general reponsibility assignment software pattern
  • 도메인 개념을 정리하는 데 너무 많은 시간을 들이지 말고 빠르게 설계와 구현을 진행하라.
  • 영화를 예매해 메시지의 책임을 수행해라
  • 클라이언트(메시지를 전송할 객체는)무엇을 원하는가?
  • 서버?(메시지를 수신할 객체는 누구인가?)
  • 첫번째 원칙 : 책임을 수행할 정보를 알고 있는 객체에게 책임을 할당하는 것이다.(information expert 정보전문가)패턴
  • 책임을 수행하는 객체가 정보를 알고있다고해서 그 정보를 저장할 필요는 없다 그 정보를 알고있는 다른객체나 계산해서 제공할수도있다.
  • low coupling pattern, high cohesion pattern 순서
  • screening이 MOVIE에 어떤 정보도 모른체 메시지를 생성할수있다.
  • 응집도가 높은 인스턴스는 인스턴스가 생성될때 모든 속성을 함께 초기화한다.
  • 변경의 이유가 하나 이상인 클래스를 찾아보자
  • 다형성 패턴(프로그램을 if else, switch등의 조건 논리를 사용해서 설계한다면 새로운 변화가 일어난 경우 조건 논리를 수정해야 한다. 이것은 프로그램을 수정하기 어렵고 변경에 취약하게 만든다.)
  • 구현을 공유해야 할 필요가 있다면 추상 클래스, 구현을 공유할 필요 없이 역할을 대체하는 객체들의 책임(메시지?)만 정의하고 싶다면 인터페이스를 사용하면 된다.
  • 변경이 될 가능성이 높은가? 그럼 캡슐화하라 .... ㅠ

'Tech' 카테고리의 다른 글

Track g4dn inference server OOM  (0) 2023.01.08
Monorepo vs Multirepo  (1) 2022.10.05
Object[4]  (0) 2022.04.16
[Tech] TDD?  (0) 2022.04.12
Object[3]  (0) 2022.04.09
Comments