-
켄트 벡의 구현 패턴 - 상태My-Book(History) 2016. 10. 18. 19:06반응형
직접접근
- 데이터를 가져오거나 저장하는 것을 나타내는 가장 간단한 방법은 직접 변수를 사용하는 것이다.
- 명확성이 높아지나 수정해야하는곳이 많아지게 된다.
- 켄터 벡 이 말하고자하는것은 프로그래머라면 커뮤니케이션하고 ㅂ 얘기하고자 하는것인거 같다.
간접접근
- 접근자 메소드를 사용하면 명확성과 직접성을 희생해서 유연성을 얻을 수 있다.공용상태- 여러 연산에서 같은 데이터 요소를 사용하는 경우가 많다. 이런 경우는 클래스에 필드를 선언해서 사용하는 것이 좋다.ex) class Point {int x;int y;}- 각 객체의 공용 상태는 모두 범위와 생명기간이 같아야 한다.가변상태
- 인스턴스에 따라 각각 다른 데이터 요소를 필요로 할때 데이터를 맵 형식으로 표현한다.
- 공용상태에 비해 훨씬 유연하지만, 코드 커뮤니케이션이 쉽지 않다.
- 접두어를 공유하는 여러 개의 변수가 있는 경우, 도우미 객체(빈즈) 를 쓰면 좋은 경우가 많다.
- 가능하다면 공용상태를 사용하라. 경우에 따라 필요할지 확실치 않은 경우 가변상태를 사용하라
필드
- 켄트 벡 은 코드를 읽을 때는 선언의 위치와 관계없이 선언을 먼저 읽고 로직을 읽는다.
- final 필드는 생성자 수행 이후에 값이 변하지 않는다.
파라미터
- 비전용 변수(필드 혹은 정적 필드)를 사용하면 클래스 간에 강한 의존성이 생겨난다. 이러한 의존성은 시간이 지나며 강화되는 것이 일반적이므로,
정적 변수와 파라미터를 모두 사용할 수 있는 경우라면 언제나 파라미터를 사용하는 편이 낫다
- 반복해서 같은 파라미터를 상용하면 의존성이 강화 되므로 생성자에 넘기는것을 고려해보라
옵션 파라미터
- 텔레스코핑 패턴
가변 인자
- 어떤 메소드에 가변 인자와 옵션 인자를 모두 사용하는 경우, 옵션 인자가 가변 인자 앞에 와야 한다.
파라미터 객체
- 여러 개의 파라미터가 함께 여러 메소드로 전달된다면 이들을 묶어서 하나의 객체로 만드는 것을 고려해보자.
- 파라미터 객체를 사용하면 코드가 짧아지고, 의도를 좀더 명확히 전달할 수 있다.
- 파라미터 객체의 사용을 반대하는 쪽의 주된 논거는 성능인데, 혹 생성 시간이 길어지는게 발견되면 파라미터 객체를 없애는 쪽으로 코드를 수정해라
(가독성 때문에 사용하라는 거지. 무조건 성능이 나쁜데도 사용하라는 의미가 아니다.
상수
- 컴파일할 때 그 값을 알고 있다면, 변수를 static final로 선언하고 프로그램에서 그 변수를 참조하게 하라.
- (이 글을 작성할때가 2008년?이니깐 상수를 인터페이스에서 메시지의 종류를 나타내기 위해 사용했다는데. 현재 기준으로는 ENUM이 있으니 굳이 상수 인터페이스를 사용하지말고 ENUM 을 사용하자 . )
초기화
- 변수가 사용되기 전에 알고 있는 상태로 만드는 작업이다.
- 가급적 선언과 함께 하는 것이 좋다. 초기화와 선언을 함께 하면, 한 곳에서 변수에 대한 여러 정보를 얻을 수 있다.
- 초기화에 드는 비용이 비싼 변수의 경우, 생성과 초기화를 분리하는 것이 나을 수 있다.
(열성적 초기화 , 게으른 초기화 참조)
열성적 초기화
- 변수가 선언되거나 생성되자마자 초기화 하는것을 의미한다.
- 열성적 초기화를 사용하면 모든 변수가 초기화 이후에 사용되는 것을 보장할 수 있다.
- 선언문에서 필드를 초기화할 수 없다면 생성자에서 초기화하라.
게으른 초기화
- 초기화 비용이 상당하고 비용 부담을 가급적 늦추고 싶을때 사용하면 된다.
- 취득 메소드를 만들고 처음으로 해당 메소드가 호출될 때 객체를 초기화하면 된다.
ex)
Libraray.Collection<Person> getMembers() {
if(members == null) {
members = new ArrayList<Person>();
return members;
}
}
- 게으른 초기화를 사용하면 열성적 초기화를 사용할 때보다 코드를 읽기 어려워진다.
- 게으른 초기화를 사용하면 다른 사용자들에게 "이 부분에서는 성능이 중요하다" 라고 이야기하는것과 같다라는것을 알아두자
반응형'My-Book(History)' 카테고리의 다른 글
켄트 벡의 구현 패턴 - 메소드 (0) 2016.10.29 켄트 벡의 구현 패턴 - 행위 (0) 2016.10.29 켄트 벡의 구현 패턴 - 클래스 (0) 2016.10.14 켄트 벡의 구현 패턴 - 프로그래밍 이론 (0) 2016.10.14 자바 프로그래밍 면접 이렇게 준비한다. (0) 2016.08.27