[오브젝트] 13일차

da__ell·2023년 8월 15일
0

독서 - 오브젝트

목록 보기
13/25
post-thumbnail

p. 156 ~ p. 171

다형성을 통해 분리하기

역할을 사용하면 객체의 구체적인 타입을 추상화할 수 있다. 자바에서는 일반적으로 역할을 구현하기 위해 추상 클래스나 인터페이스를 사용한다.
역할을 대체할 클래스 사이에서 구현을 공유할 필요가 없다면 추상클래스를 사용한다.
구현을 공유할 필요 없이 역할을 대체하는 객체들의 책임만 정의하고 싶다면 인터페이스를 사용하면 된다.

객체의 타입에 따라 변하는 행동이 있다면 타입을 분리하고 변화하는 행동을 각 타입의 책임으로 할당한다. GRASP에서는 이를 POLYMORPHISM(다형성)이라 한다.

변경으로부터 보호하기

PROTECTED VARIATION(변경 보호) 패턴 : 변화가 예상되는 불안정한 지점들을 식별하고 그 주위에 안정된 인터페이스를 형성하도록 책임을 할당한다. → 설계에서 변하는 것이 무엇인지 고려하고 변하는 개념을 캡슐화하라.

변경 역시 도메인 모델의 일부이다. 도메인 모델에는 도메인 안에서 변하는 개념과 이들 사이의 관계가 투영돼 있어야 한다.

변경과 유연성

설계를 주도하는 것은 변경이다. 개발자로서 변경에 대비하는 방법은 다음과 같다.

  1. 코드를 이해하고 수정하기 쉽도록 최대한 단순하게 설계한다.
  2. 코드를 수정하지 않고도 변경을 수용할 수 있도록 코드를 더 유연하게 만드는 것

책임 주도 설계의 대안

코드를 수정한 후에 겉으로 드러나는 동작이 바뀌어서는 안된다. 캡슐화를 향상시키고, 응집도를 높이고, 결합도를 낮춰야 하지만 동작은 그대로 유지해야 한다. 겉으로 보이는 동작은 바꾸지 않은 채 내부 구조를 변경하는 것을 리팩터링이라고 부른다.

메서드 응집도

긴 메서드는 응집도가 낮기 때문에 이해하기도 어렵고 재사용하기도 어려우며 변경하기도 어렵다. - 몬스터 메서드

응집도가 높은 메서드는 변경되는 이유가 단 하나여야 한다.

작고 명확하고 한가지 일에 집중하는 응집도 높은 메서드는 변경 가능한 설계를 이끌어가는 기반이다.

profile
daelkdev@gmail.com

0개의 댓글