객체지향(2)
-
초기화 로직 분리
결제 서비스에서 신규 가입 때, 무료로 포인트를 제공한다. 다음 코드는 그러한 기프트 포인트를 값 객체로 설계한 것이다. const MIN_POINT = 0; class GiftPoint { #value; constructor(point) { if (point < MIN_POINT) { throw new Error('유효하지 않은 값입니다.'); } this.#value = point; } getPoint() { return this.#value; } add(otherGiftPoint) { return new GiftPoint(this.#value + otherGiftPoint.getPoint()); } #isEnough(consumptionPoint) { return consumptionPoint.ge..
2023.12.04 -
성숙한 클래스로 성장시키는 설계 기법
class Money { #amount; #currency; } 다음과 같은 전형적인 데이터 클래스가 존재한다고 생각하자. 생성자로 확실하게 정상적인 값 설정하기 다른 클래스에서 해당 데이터의 초기화를 하지 않도록 하기 위해서는 constructor에 파라미터로 값을 전달하면 된다. class Money { #amount; #currency; constructor(amount, currency) { this.#amount = amount; this.#currency = currency; } } 가드 활용하기 하지만 잘못된 값이 전달될 수 있다. 이럴 때는 가드를 활용해서 잘못된 요소를 메서드 앞부분에 제외할 수 있으므로 이어지는 로직이 간단해진다. 가드를 활용하면 잘못된 값을 가진 인스턴스가 존재할 수 ..
2023.12.03