아이템 39
태그 클래스보다는 클래스 계층을 사용하라
Tagged Class
: 상수 모드(Tag)를 포함한 클래스
tag에 따라 처리하는 클래스 같음
코틀린은 아래의 단점으로 인해 sealed 클래스
를 많이 사용한다.
- 한 클래스에 여러 모드를 처리하기 위한 보일러플레이트가 추가된다
- 여러 목적으로 사용해야 하므로 프로퍼티가 일관적이지 않게 사용될 수 있으며 더 많은 프로퍼티가 필요하다.
- 해당 요소가 여러 방법으로 설정할 수 있는 경우에 상태의 일관성/정확성을 지키기 어렵다
- 팩토리 메서드를 사용해야하는 경우가 많다. 그렇지 않으면 객체가 제대로 생성되었는지 확인하기에 어렵다
sealed 한정자
외부 파일에서 서브클래스를 만드는 행위 자체를 제한하므로 타입이 추가되지 않을 것이 보장된다. 따라서 when을 사용할 때 else 브랜치가 필요없게 된다.
태그 클래스와 state pattern 차이
- state pattern: 객체의 내부 상태가 변화될 때 객체의 동작이 변화하는 디자인 패턴
- 상태는 더 많은 책임을 가진 큰 클래스
- 상태는 변경 가능
정리
태그 클래스보단 타입 계층을 사용할 것, 타입 계층을 만들 땐 sealed 클래스 사용할 것
Reference
https://kotlinworld.com/165