17장 냄새와 휴리스틱 (388~395)

일반

<aside> 💡

관례보다 구조를 사용하라

</aside>

  1. 명명관례도 좋지만 구조 자체로 강제하면 좋다
  2. 예를 들어, enum 변수가 switch/case 문보다 추상 메서드가 있는 기초 클래스가 더 좋다

<aside> 💡 조건을 캡슐화하라

</aside>

  1. 부올 논리는 이해하기 어렵다

→ 조건 의도를 분명히 밝히는 함수로 표현하라

//좋은 예
if (shouldBeDeleted(timer))

//좋지 않은 예
if (tiemrhasExpired() && !timer.isRecurrent())
  1. 부정 조건은 피하라

<aside> 💡

경계 조건을 캡슐화하라

</aside>

  1. 경계 조건은 놓치기 쉽다
  2. 경계 조건은 한 곳에서 별도로 처리하라
if (level + 1 < tags.legnth)
{
	parts = new Parse(body, tags, level + 1, offset + endTag);
	body = null;
}

→ level + 1이 두 번 나온다. 이런 경계 조건은 변수로 캡슐화하는 편이 좋다

int nextLevel = level + 1;
if (nextLevel < tags.length)
{
	parts = new Parse(body, tags, nextLevel, offset + endTag);
	body = null;
}