행위

주요 흐름

주요 제어 흐름을 명확하게 표현한다.
프로그램의 주요 흐름에는 예외도 발생할 수 있지만, 연산에는 큰 흐름이 있다.
프로그래밍 언어를 통해 주요 흐름을 명확히 표현하자.

메세지

메세지를 보내서 제어흐름을 표헌한다.

1
2
3
4
5
compute() {
input();
process();
output();
}

“이 연산을 이해하기 위해 세 단계를 알면 되고 당장 자세한 내용은 알 필요 없다” 라는 뜻을 가지고 있다.

선택 메세지

여러 선택 사항을 나타내기 위해 메세지 구현자를 다양화한다.
여러 방법 중 하나로 그래픽을 표시해야할 때, 런타임에 선택이 일어남을 나타내기 위해 다형적 메세지를 사용할 수 있다.

1
2
3
public void displayShape(Shape subject, Brush brush) {
brush.display(subject)
}

더블 디스패치

Read more

상태

직접 접근

객체 내의 상태를 직접 접근한다.
직접 접근의 장점은 표현의 명확성이다.

1
x = 10;

간접 접근

좀더 나은 유연성을 위해 메서드를 통해 상태에 접근한다.

1
2
3
4
Rectangle void setWitdh(int width) {
this.width = width;
area = width * height;
}

공용 상태

클래스의 모든 인스턴스에 적용되는 상태는 필드에 저장한다.

1
2
3
4
class Point {
int x;
int y;
}

가변 상태

Read more

클래스

클래스

“이 데이터들을 함께 사용하는데, 관려된 로직이 이것이다” 라고 이야기하고 싶을 때 클래스를 사용하자.

단순한 상위 클래스 이름

클래스 계층의 최상위 클래스 이름은 단순하게 이름 짓자.

한정적 하위 클래스 이름

상위 클래스와의 유사점과 차이점을 분명히 드러내도록 이름 짓자.

추상 인터페이스

인터페이스와 구현을 분리하자.
여기서 인터페이스란, “구현이 빠진 여러 연산의 집합” 이다.
자바에서는, 자바 인터페이스나 상위클래스를 이용할 수 있다.

소프트웨어는 유연해야 하지만, 유연성에는 비용이 들고 언제 어디에 유연성이 필요한지 예측하기 쉽지 않다.
그러므로, 실제 필요해지는 경우에만 시스템에 유연성을 부여하자.

인터페이스

Read more

패턴, 가치, 원칙

“패턴, 가치, 원칙” 세 가지를 사용하면 균형있는 개발을 할 수 있다.

  • 패턴은 지금 당장 무엇을 해야할지 알려준다.
  • 가치는 패턴을 사용해야하는 동기를 알려준다.
  • 원칙은 동기를 어떻게 행동으로 바꿔줄지 알려준다.

가치

훌륭한 프로그래밍에서 공통적인 가치는, “커뮤니케이션, 단순성, 유연성” 이다.

커뮤니케이션

코드를 쉽게 이해하고 수정하고 사용할 수 있으면, 그 코드는 개발자와 커뮤니케이션을 한다.

프로그램을 작성할 때 타인을 고려하면, 코드는 이해하기 쉽고 명확해진다.
또한 경제적으로도 효과가 높아진다.
기존 코드를 읽고 수정하는데 걸리는 시간이 새로 짜는데 걸리는 시간을 압도한다.
따라서 이 개발 비용을 줄이기 위해 이해하기 쉬운 코드를 작성해야한다.

단순성

복잡도를 낮추면, 프로그램을 읽고 수정하는 사람들이 프로그램을 쉽게 이해할 수 있다.

프로그램을 최대한 단순화하자.
의미 없는 코드는 제거하고, 설계 시 과도한 요소는 제거하자.
요구 사항을 분석해서 꼭 필요한 사항만 추출하자.

Read more