켄트백의 구현패턴-행위

행위

행위를 표현하는 패턴

  • 제어흐름 - 연산의 여러 단계로 나타낸다.
  • 주요흐름 - 주요제어 흐름을 명확하게 표현
  • 메시지 - 메시지를 보내서 제어 흐름을 표현
  • 선택 메시지 - 여러 선택 사항을 나타내기 위해 메시지 구현자를 다양화
  • 더블 디스패치 - 두가지 축으로 메시지 구현자를 다양화해서 중첩된 선택을 표현
  • 분리 메시지 - 복잡한 연산은 밀접한 단위의 연산으로 나눔
  • 되돌림 메시지 - 메시지를 같은 수신자에게 보내어 제어 흐름에 대칭성을 부여
  • 초청 메시지 - 다른 방시으로 구현될 수 있는 메시지를 보내서 미래에 일어날 변형을 대비
  • 설명 메시지 - 로직을 설명하기 위해 메시지를 보낸다
  • 예외 흐름 - 주요 흐름에 대한 표현을 방해하지 않으면서 가급적 명확하게 예외적 제어 흐름을 표현
  • 보호 구분 - 지역적 예외 흐름은 이른 반환을 통해 표현한다.
  • 예외 - 비지역적 예외 흐름은 예외로 표현
  • 예외 전달 - 예외를 전달할 때에는 예외 처리자에게 적합한 정보를 전달할수 있도록 필요에 따라 예외의 형태를 변화한다.

제어 흐름

모두 연산 표현을 풍부하게 해주는 매개체가 되어준다

주요흐름

주요 흐름을 명확히 표현하라. 흔치 않은 상황이나 에러 상황은 예외와 조건절을 사용해서 표현하면 된다.

메시지

메시지를 이용해서 로직을 표현단다. 절차적 언어는 프로시저 호출을 사용해서 정보를 숨긴다.

메시지를 제어 흐름의 메커니즘으로 사용하면 프로그램에서는 상태 변화가 중요해진다.

선택 메시지

선택메시지를 사용하면 조건문 사용을 크게 줄일수 있으며 추후 확장이 쉽다.

더블 디스패치

더블 디스패치를 사용하면 유연성을 조금 잃게 되며 코드 중복이 발생한다.

분리(순차) 메시지

분리 메시지에는 이름을 잘지어야 한다.

되돌림 메시지

대칭성을 이용하면 코드의 가독성을 높일수 있다.

초청 메시지

로직에 대한 기본구현이 있다면 그 구현을 메시지의 구현으로 삼으라. 드렇지 않다면 추상 메소드로 선언해서 초청 메시지임을 분명히 하라.

설명 메시지

개발자의 의도와 구현을 구분하는 것은 언제나 중요
독자는 이를 통해 먼저 연산의 핵심을 파악할 수 있고 필요한 경우에만 세부 구현에 관심을 기울이면 된다.

연산을 구현하는 메소드가 아닐수도 있다. 프로그래머의 의도를 전달하기 위한 메소드일수도 있다.

예외 흐름

프로그래머는 주요 흐름뿐 아니라 한개 이상의 예외 흐름에 대해 생각해야 하는 경우가 많다.

주요흐름을 최대한 명료하게 표현하라 다른 경로는 예외를 사용해서 표현하면 된다.

보호절

주요흐름이 있지만 때로는 주요 흐름에서 벗어나야 할때가 있다.
보호절을 사용하면 간단한 지역적 예외 상황을 지역적인 예외 상황을 지역적인 변화만 수반하며 표현 할수 있다.

과거 프로그래밍을 할 때는 지켜야 하는 중요한 계명이 있었다. 각 루틴은 단일 시작지점과 단일 종료 지점만을 갖고 있어야 했다.

보호절은 여러 개의 조건이 있을 경우 특히 유용하다. 보호절을 사용하면 복잡한 제어구조를 사용하지 않고도 같은 코드를 표현할수도 있다.

보호절의 포인트는 보통 경우와 예외 경우 처리의 차이점을 부각시키는 것

예외

예외는 여러 함수 호출을 걸쳐서 제어 흐름을 바꾸는 경우를 표현할 때 유용하게 사용됨

예외에는 비용이 들어간다. 예외는 일종의 설계상 누수이다.

가능하면 순차적 구문, 메시지, 루프, 제어문을 사용해서 제어 흐름을 표현하라.

체크 예외

예외의 위험성 중 하나는 예외를 던졌을때 아무도 그예외를 받지 않을 수 있다는것이다.

이런 상황을 피하기 위해 자바에는 체크 예외가 있다. 체크 예외에는 비용이 따른다.

예외 전달

하위 수준의 예외는 문제를 진단하는데 유용한 정보를 제공해주는 경우가 많다. 하위 수준 예외를 상위 수준 예외로 포장하라.

참조