9.1 💀 데드 코드
- 악마 설명
- 악마 사유
- 퇴치법
- 발견 즉시 제거 요망
- IDE의 정적 분석 도구가 데드코드 보면 기함을 토함
- 그거보고 고치면 됨.
9.2 🦾 YAGNI 원칙
- 천사 설명
- 천사 사유
- 예측에 들어맞지 않는 로직 → 데드 코드
- 예측해서 코드를 미리 작성해도 시간 낭비 → 어차피 사양 바뀜
- 응원법
- 지금 필요한 기능을 최대한 간단한 형태로 만드는 것이 좋음
9.3 4️⃣ 매직 넘버
- 악마 설명
- 로직 내부에 직접 작성되어 있어, 의미를 알기 힘든 숫자
- 악마 사유
- 퇴치법
boolean isOk() {
return value > 60;
}
private static final int REQUIRED_POINT = 60
boolean isOk() {
return value > REQUIRED_POINT;
}
9.4 ⌨️ 문자열 자료형에 대한 집착
- 악마 사유
- CSV 파일처럼 의미가 다른 여러 값을 한 String 변수에 담으면 의미 알기 어려움
- split 같은 전처리로 로직 복잡
- 퇴치법
9.5 🌐 전역 변수
- 악마 설명
- 악마 사유
- 고얀놈
- 자바 언어에는 원래 없음 → 왜 없겠나
- public static → 이렇게 굳이 써야 함
- 어디, 언제 값 변경했는지 파악 어려움
- 버그 영향 검토 리소스 증가
- 동기화 성능 이슈
- 데드락 상태 가능성
- 동기화 하고 싶지 않은 다른 인스턴스 변수도 Lock 걸림
- 퇴치법
9.6 ❌ null 문제
- 악마 설명
- 메모리 접근과 관련된 문제 방지 위한 최소한의 도구
잘못된 처리
의미
- 악마 사유
- ‘무언가 갖고 있지 않은 상태’, ‘무언가 미설정 상태’ 조차 아님!
- 퇴치법
- null 리턴하지 않는 설계
- null 전달하지 않는 설계
- 메소드에서 변수에 null을 할당하지 않지 않는 것
- 인스턴스 변수 EMPTY 처럼 무의미하지만, 인스턴스가 존재하는 값으로 할당하는 방법 존재
-
null 체크 자체를 안 해도 됨
static final Equipment EMPTY = new Equipment("장비 없음", 0, 0, 0);
void takeOffAllEquipments() {
head = Equipment.EMPTY();
body = Equipment.EMPTY();
arm = Equipment.EMPTY();
}
- null 안전
- 언어 자체에서 제공하는 null 안전 자료형을 이용해서 코딩하는 방법
9.7 ⁉️ 예외를 catch하고서 무시하는 코드
- 악마 설명
- 악마 사유
- 퇴치법
- 예외 발견 즉시 통지, 기록
- catch 구문에선 최소 로그만이라도 기록해야 함
- 생성자 가드
9.8 Ⓜ️ 설계 질서를 파괴하는 메타 프로그래밍
- 악마 설명
- 프로그램 실행 중에 해당 프로그램 구조 자체를 제어하는 프로그래밍
- 흑마법
- 악마 사유
- 리플랙션을 사용해서 final 값 변경 가능하기 때문
- 메타 정보 이용해서 인스턴스 생성 가능하기 때문
-
정적 분석 도구의 도움을 받지 못함
-
클래스 이름 변경하면 → 컴파일에는 문제 없지만, 런타임 시 해당 클래스 미존재로 오류 발생
static Object generateInstance(String packageName, String className) throws Exception {
String fillName = packageName + "." + className;
Class klass = Class.forName(fillName);
Contructor constructor = klass.getDeclaredConstructor();
return constructor.newInstance();
}
Employer user = (Employer) generateInstance("customer", "User");
- 퇴치법
- 시스템 분석 용도에서만 활용
- 아주 작은 범위에서만 활용
9.9 🗂️ 기술 중심 패키징
- 악마 설명
- 구조에 따라 폴더와 패키지 나누는 것
- 스프링에서는 MVC 에 따라 패키지 나누는 것
- 악마 사유
- 디자인 패턴에 따라 구분했기 때문에 비즈니스 지식(개념) 이 어디와 관련있는지 구분하기 어려움
- 퇴치법
- 비즈니스 개념 기준으로 폴더 구분
- 관련 있는 내용만 참조 가능
- 관련 있는 내용끼리만 사용 가능토록 package private 으로 사용
- 응집도 높아지므로 유지보수 용이
9.10 🧾 샘플 코드 복사해서 붙여넣기
- 악마 설명
- 악마 사유
- 얘네는 유지보수성, 변경 용이성 고려 안 함
- 고얀놈들
9.11 🗡️ 은 탄환
- 새로 알게 된 내용이라고 신나서 적용하면 큰 코 다침
- 팩토리 패턴 처음에 적용했다가 바로 제거했던 것처럼 상황에 따라 적합한 걸 쓰고, 과감히 버려야 함
- 설계에 best는 없음, better만 있을뿐
잘 읽었습니다. 좋은 정보 감사드립니다.