•
거대한 표현을 더 소화하기 쉬운 여러 조각으로 나눈다.
•
이 장에서는 코드를 수정해서 삼키기 쉬운 작은 조각으로 나누는 방법을 알아볼 것이다.
설명 변수
•
커다란 표현을 쪼개는 가장 쉬운 방법은 작은 하위표현을 담을 추가 변수를 만드는 것이다.
◦
이는 하위 표현의 의미를 설명하므로 설명 변수라고 한다.
•
다음은 간단한 예다.
if (line.split(':')[0].strip() == "root")
->
username = line.split(':')[0].strip();
if (username == "root")
Java
복사
요약 변수
•
커다란 코드의 덩어리를 짧은 이름으로 대체하여 더 쉽게 관리하고 파악하는 목적을 가진 변수를 요약 변수라고 한다.
•
일반적으로 구체적인 구현보다 추상적인 메소드명으로 정보를 추상화하는 것이 가독성이 더 좋다.
드모르간의 법칙 사용하기
•
동일한 불리언 표현은 다음과 같이 두 가지 방법으로 작성할 수 있다.
not (a or b or c) => !a and !b and !c
not (a and b and c) => !a or !b or !c
Java
복사
•
이를 코드로 작성해보면 다음과 같다.
if (!(fileExists && !isProtected)) -> if (fileExists || isProtected)
Java
복사
쇼트 서킷 오용하지 않기
•
대부분의 프로그래밍 언어에서 불리언 연산은 쇼트 서킷 평가를 수행한다. 이는 코드의 수를 줄일 수 있게 해주는데, 삼항 연산자와 비슷하다.
•
간결성을 챙기려다 가독성을 저하시킬 수 있다. 적절히 생각해서 쓰자.
•
영리하게 성능이 좋게 작성된 코드들을 유의하라 나중에 다른 사람이 읽었을 때, 이해하기 힘들 수 있다.
예: 복잡한 논리와 씨름하기
•
다음과 같은 Range 클래스를 구현한다고 해보자.
class Range {
int begin;
int end;
boolean overlapsWith(Range other) {
return (begin >= other.begin && begin < other.end) || (end > other.begin && end <= other.end) || (begin <= other.begin && end >= other.end);
}
}
Java
복사
◦
overlapsWith 메소드는 매우 복잡한 구현을 가지고 있다. 이는 어떻게 쪼갤 수 있을까?
•
더 우아한 접근방법 발견하기
◦
이 로직은 겹치는지를 검사하는 로직이다. 이는 이진 선택이 가능하다. 따라서 역으로 생각해보는 것도 좋은 접근방법이 될 수 있다.
거대한 구문 나누기
•
동일한 부분을 요약 변수로 추출한다면 거대한 구문도 쉽게 나눌 수 있다.
요약
•
이 장에서는 거대한 표현을 잘게 쪼개서 코드를 읽는 사람이 더 쉽게 소화하는 방법을 몇 가지 알아봤다.
•
커다란 하위표현을 대체하는 설명 변수를 도입한다.
◦
거대한 표현을 작은 조각으로 나눠준다.
◦
하위표현을 간결한 이름으로 대체하여 코드를 문서화한다.
◦
코드를 읽는 사람이 코드의 핵심 개념을 파악하는 것을 돕는다.
•
드모르간의 법칙을 이용하는 것이다.
◦
불리언 표현을 더 명확한 방식으로 재작성하게 도와준다.