켄트백의 구현패턴-상태(2)

상태

지역 변수

지역 변수는 사용되기 직전에 가급적 최소 범위내에서 선언하라.

지역변수의 역할

  • 컬렉터 - 이후 사용을 위한 정보를 모은다.
  • 카운터 - 특정 객체의 수를 저장하는 특수 컬렉터
  • 설명 - 복잡한 표현을 해야 하는 경우, 표현 내용을 지역 변수에 저장하면 독자가 좀더 쉽게 이해
  • 재사용 - 값이 바뀌지만 기존 값을 다시 사용해야 하는 경우 그 값을 지역변수에 저장
  • 원소 - 지역 변수는 현재 사용하는 컬렉션의 원소를 저장하기 위해 사용될 때도 많다.

필드

필드의 범위와 생명기간은 필드를 갖고 있는 객체와 같다. 필드는 객체 전반에 걸처 사용되므로 모든 필드는 클래스 가장 앞이나 뒤에 한꺼번에 선언하는것이 좋다.

필드를 앞에 선언할경우 독자에게 코드에서 어떤 필드들이 사용될지 문맥을 제공해줄수 있다.

필드 변수의 역활

  • 도우미 - 도우미 필드는 객체의 여러 메소드에서 사용하는 객체를 저장
  • 플래그 - 불린 플래그는 객체가 두 가지 다른 방식으로 동작함
  • 전략 - 객체의 연산을 하는 다른 방법이 있음을 나타내는 경우, 그 부분을 수정하는 객체를 필드에 저장하라
  • 상태 - 객체의 행위 양식을 결정한다는 점에서 상태 필드는 전략 필드와 비슷하다. 하지만 상태 필드는 스스로 다음 상태를 설정한다.
  • 부속 - 부속필드는 해당 객체가 소유하는 객체나 데이터를 저장한다.

파라미터

버전용 변수를 사용하지 않고 상태를 다른객체에 전달하려면 파라미터를 사용해야 한다. 비전용 변수를 사용하면 클래스 간에
강한 의존성이 생겨난다.

단일 파라미터는 약한 의존성을 생성한다.

수집 파라미터

여러 메소드 호출을 통한 결과를 모으려면 결과를 통합하는 과정이 필요하다.
한가지 방법은 메소드의 결과값을 반환하는것이다. 단순할때는 적합하지만 복잡하면 파라미터를 전달해서 수집하는 편이 더 직관적이다.

파라미터 객체

여러 개의 파라미터가 함께 여러 메소드로 전달된다면 이들을 묶어서 하나의 객체로 만드는 것을 고려할 수 있다.

파라미터 객체를 사용하면 코드가 짧아지고 의도를 좀더 명확히 전달할 수 있으며 직사각형을 확대 축소하는 알고리즘을 쉽게 표현할수 있다.

사용하는 주된 이유는 가독성을 높이기 위함이지만 파라미터 객체는 로직에 있어서 중요한 역할을 하는데 밀접한 연관성을 나타낸다.

상수

때로는 변화하지 않는 데이터를 프로그램의 여러부분에서 사용해야 하는 경우가 있다. 상수를 사용하는 이유는 실수를 줄일수 있기 때문이다.

역활 제시형 작명

변수의 역할을 알수 있는 가급적 짧고 명료한 이름을 선호

변수이름을 통해 변수의 역할을 전달한다.

선언형 타입

일반적인 선언 타입을 사용하면 이후 수정에서 실제 클래스 구현을 변경할수 있다. 커뮤니케이션에 초점을 두는 것은 유연성을 유지하기 위한 전략

초기화

초기화는 가급적 선언과 함꼐하는 것이 좋다.

다른문제는 성능문제다 초기화 비용이 큰변수는 생성과 초기화를 분리하는것이 좋다.

열성적 초기화

변수가 선언되거나 생성하자 마자 초기화한다.

게으른 초기화

초기화 비용이 큰경우면 해당 값이 처음으로 호출 될때 초기화 한다.

참조