내 코드가 그렇게 이상한가요 4

[내 코드가 그렇게 이상한가요?] 10장 이름 설계:구조를 파악할 수 있는 이름

1. 악마를 불러들이는 이름 class 상품 { public void 상품 예약(){ //예약과 관련된 로직 ... } public void 상품 주문(){ //주문과 관련된 로직 ... } public void 상품 출고(){ //출고과 관련된 로직 ... } public void 상품 발송(){ //발송과 관련된 로직 ... }}   [문제점] 거대해진 상품 클래스에 사양 변경이 발생하면 변경된 부분의 영향을 받아 동작에 버그가 생기지는 않는지, 상품 클래스와 관련된 클래스를 모두 확인해야 합니다.    [개선점] 1) 관심사 분리하기관심사 분리는 '관심사(유..

[내 코드가 그렇게 이상한가요?] 9장 설계의 건전성는 여러 악마

1. 데드 코드 - 실제로 실행되는 코드가 아니면 제거하자.    2. YAGNI 원칙 - 'You Aren't Gonna Need It.' 의 약자로 '지금 필요 없는 기능을 만들지 말라!' - 소프트웨어에 대한 요구는 매일매일 변한다.미리 예측하고 구현해도, 이러한 예측은 대부분 맞지 않다.예측에 들어맞이 않는 로직은 데드 코드가 된다.    3. 매직 넘버class ComicManager{ //생략 boolean isOk(){ return 60    - 설명이 없는 숫자는 개발자를 혼란스럽게 만든다.  class ComicManager{ /** 체험 구독 소비 포인트 */ private static final int TRIAL_READING_POINT = 60; ..

[내 코드가 그렇게 이상한가요?] 8장 강한 결합: 복잡하게 얽혀서 풀 수 없는 구조

1. 단일 책임 원칙- '클래스가 담당하는 책임은 하나로 제한해야 한다'는 설계 원칙  [문제 코드]DiscountManager 클래스가 Product클래스 대신 값을 확인하는 행위->  DiscountManager는 다른 클래스에게 책임을 지우지 않고 무엇이든 대신 해주는, 즉 과보호하는 부모 class DiscountManager{ List discountProducts; int totalPrice; //상품 추가 메서드 boolean add(Product product, ProductDiscount productDiscount){ ... } //할인 가격 확인 메서드 static int getDiscountPrice(int pr..

[내 코드가 그렇게 이상한가요?] 7장-컬렉션:중첩을 제거하는 구조화 테크닉

1. 이미 존재하는 기능을 다시 구현하지 말기  개선 전) 중첩 코드 존재(for문 안에 if절)boolean hasPrisonKey = false;//items는 List 자료형for(Item each : items){ if(each.name.equals("감옥 열쇠")){ hasPrisonKey = true; break; }}  개선 후) 컬렉션 사용(anyMatch)boolean hasPrisonKey = items.stream().anyMatch( item -> item.name.equals("감옥 열쇠"));   이처럼 anyMatch 메서드를 알고 있으면, 복잡한 로직을 직접 구현하지 않아도 됩니다. 반대로 모르면 로직을 직접 구현해야 하므로, 코드가 쓸데없이 복잡해집..