아름답고(객체 지향적이고) 편리한(강력한) 코드
단순히 올바르게 기능만 하는 코드를 넘어 보기 좋고 사용하기 편리한 코드를 작성하는 법
=> 메서드 분리
void log(String message, boolean classified) throws IOExcpetion {
if (calssified) {
writeMessage(message, CAPTAIN_LOG);
} else {
writeMessage(message, CREW_LOG);
}
}
일반적으로 메서드는 하나의 작업에만 특화되어야 한다. 그러나 위 코드는 하나의 메서드가 두 가지 작업을 수행한다. 불 메서드 매개변수는 메서드가 적어도 두 가지 작업을 수행함을 뜻한다.
이럴 경우 호출하는 쪽에서는 불 매개변수가 실제로 어떤 역할을 하는지 알기 어려워 일반적으로 코드를 이해하기 어려워진다.
또한 서로 다른 기능이 하나의 메서드에서 처리되다 보니(기장, 승무원) 한 기능을 수정할 경우 다른 기능에도 영향을 미칠 위험이 있다.
void writeToCaptainLog(String message) throws IOExcpetion {
writeMessage(message, CAPTAIN_LOG);
}
void writeToCrewLog(String message) throws IOExcpetion {
writeMessage(message, CREW_LOG);
}
입력 매개변수에 불이 쓰인 메서드라면 메서드를 여러 개로 분리함으로써 코드를 향상할 수 있다.
1. boolean인 메서드 매개변수 제거
2. 매개변수로 구분하던 각 제어 흐름 경로마다 새 메서드를 추가
3. 새 메서드에 표현적이면서도 의미 있는 이름 짓기
메서드명을 보면 메시지가 어떤 로그에 속하는지 분명히 알 수 있고 호출하는 코드만 보아도 메서드가 무엇을 하는지 알 수 있다.