9. 설계의 건전성을 해치는 여러 악마

내용


데드 코드

  • 절대로 실행되지 않는 조건 내부에 있는 코드

  • unreachable code

  • 가독성 저하의 요인이므로 발견 즉시 제거하는게 좋다.

YAGNI 원칙

  • You aren't gonna need it

  • 지금 필요 없는 기능을 만들지 말라

매직 넘버

  • 설명 없는 숫자

  • 맥락이 없으면 이해하기 힘들다.

문자열 자료형에 대한 집착

String title = "타이틀,255,250,240,64"
  • 의미를 알기 어렵다.

  • 각각 다른 변수에 저장하자

전역 변수

  • 모든 곳에서 접근할 수 있는 변수

  • 만약에 여러 로직에서 전역 변수를 참조하고 값을 변경하면, 어디에서 어떤 시점에 값을 변경했는지 파악하기 대단히 어렵다.

  • 그러므로 영향 범위가 가능한 최소화 되도록 설계

null 문제

  • null이란?

    • 초기화하지 않은 메모리 영역에서 값을 읽으면 문제가 생김

    • 이를 피하기 위해 발명된 것이 null

    • null 자체가 잘못된 처리를 의미

  • 그런데 null을 무언가를 갖고 있지 않은 상태, 무언가 설정되지 않은 상태로 이용하곤 함.

  • null을 리턴, 전달하지 말도록 해야함.

    • 즉 '무언가를 갖고 있지 않는 상태' or '무언가가 설정되지 않은 상태' 라는 객체를 만들어서 전달하도록 해야함

예외를 catch 하고서 무시하는 코드

  • catch 한 후에 반드시 로그를 남기거나 다시 에러를 던져야함

설계 질서를 파괴하는 메타 프로그래밍

  • 메타 프로그래밍?

    • 프로그램 구조 자체를 제어하는 프로그래밍

    • 예를 들면 자바에서 Reflection API 을 사용하는 경우

  • 흑마법이다.

    • 가능한 사용하지 말자.

기술 중심 패키징

  • 비즈니스 개념 별로 패키징을 하는게 좋다.

  • 왜?

    • 결제 관련된 것은 결제 폴더 내부만 보며 되니까, 관련 파일을 이리저리 찾아다니지 않아도 된다.

- 제고
  - 재고_유스케이스.java
  - 발주_엔티티.java
  - 입고_엔티티.java
  - 출고_엔티티.java
  - 안전_재고량.java
  - 재고_회전_기간.java
  - 발주_금액.java
- 주문
  - 주문_유스케이스.java
  - 장바구니_엔티티.java
  - 주문_엔티티.java
  - 주문서.java
- 결제
  - 지불_유스케이스.java
  - 청구_엔티티.java
  - 청구_금액.java
  - 할인_포인트.java
  - 신용카드_번호.java

정리


  • 은탄환은 없다.

    • 각자 문제를 면밀하게 파악하고 어떻게 하면 개선하는게 효과적인지, 적절한 기술을 선택할 수 있어야한다.

참고


  • https://product.kyobobook.co.kr/detail/S000202521361

Last updated

Was this helpful?