분류 전체보기(196)
-
splice 메서드의 오해
splice() 메서드는 배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경한다. splice()와 slice()의 차이점은 기존 배열의 변경 유무에 있다. splice()는 기존 배열을 변경하지만 slice()는 기존 배열을 복사한 새로운 배열을 반환한다. splice() 메서드는 첫번째 매개변수는 배열의 변경을 시작할 인덱스이다. 여기에는 음수가 들어갈 수 있는데 음수인 경우 배열의 끝에서부터 요소를 세어나가게된다. const months = ['Jan', 'March', 'April', 'June']; months.splice(1, 0, 'Feb'); console.log(months); // result: ["Jan", "Feb", "March", "April", "J..
2024.01.06 -
초기화 로직 분리
결제 서비스에서 신규 가입 때, 무료로 포인트를 제공한다. 다음 코드는 그러한 기프트 포인트를 값 객체로 설계한 것이다. 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 -
단위 테스트로 리팩터링 중 실수 방지하기
내 코드가 그렇게 이상한가요? 를 참고하여 쓴 글 입니다. 리팩터링이란 실질적인 동작은 유지하면서, 구조만 정리하는 작업이다. 리팩터링을 하기 위해 코드를 변경할 때 실질적인 동작까지 바뀌어 버린다면, 이는 리팩터링이라 할 수 없다. 그렇기 위해서 단위 테스트를 통해 실질적인 동작이 변하지 않았는지 확인해야한다. 단위 테스트는 리팩토링 중에 동작을 변경하는 실수를 줄일 수 있는 방법이다. 단위 테스트는 작은 기능 단위로 동작을 검증하는 테스트로, 테스트 코드를 활용해서 메서드 단위로 동작을 검증하는 방법이라고 생각해도 괜찮다. 먼저 예시코드를 살펴보자. class DeliveryManager { static getDeliveryCharge(products) { let charge = 0; let tota..
2023.12.03