////
Search
Duplicate
🥌

8. 거대한 표현을 잘게 쪼개기

거대한 표현을 더 소화하기 쉬운 여러 조각으로 나눈다.
이 장에서는 코드를 수정해서 삼키기 쉬운 작은 조각으로 나누는 방법을 알아볼 것이다.

설명 변수

커다란 표현을 쪼개는 가장 쉬운 방법은 작은 하위표현을 담을 추가 변수를 만드는 것이다.
이는 하위 표현의 의미를 설명하므로 설명 변수라고 한다.
다음은 간단한 예다.
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 메소드는 매우 복잡한 구현을 가지고 있다. 이는 어떻게 쪼갤 수 있을까?
더 우아한 접근방법 발견하기
이 로직은 겹치는지를 검사하는 로직이다. 이는 이진 선택이 가능하다. 따라서 역으로 생각해보는 것도 좋은 접근방법이 될 수 있다.

거대한 구문 나누기

동일한 부분을 요약 변수로 추출한다면 거대한 구문도 쉽게 나눌 수 있다.

요약

이 장에서는 거대한 표현을 잘게 쪼개서 코드를 읽는 사람이 더 쉽게 소화하는 방법을 몇 가지 알아봤다.
커다란 하위표현을 대체하는 설명 변수를 도입한다.
거대한 표현을 작은 조각으로 나눠준다.
하위표현을 간결한 이름으로 대체하여 코드를 문서화한다.
코드를 읽는 사람이 코드의 핵심 개념을 파악하는 것을 돕는다.
드모르간의 법칙을 이용하는 것이다.
불리언 표현을 더 명확한 방식으로 재작성하게 도와준다.