ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 켄트 벡의 구현 패턴 - 상태
    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;

    }

    }

     

    - 게으른 초기화를 사용하면 열성적 초기화를 사용할 때보다 코드를 읽기 어려워진다.

    - 게으른 초기화를 사용하면 다른 사용자들에게 "이 부분에서는 성능이 중요하다" 라고 이야기하는것과 같다라는것을 알아두자

     


Designed by Tistory.