2013-07-15 2 views
6

지금 당장 자신의 구성을 유지할 클래스로드가 생성됩니다. 내가하는 일은 설정 파일의 값을 저장하는 것뿐입니다.최종 변수에 대한 게터

코드의 절반 이상이 게터이며 연습이 여전히 게터를 갖거나 직접 변수에 액세스하는지 궁금합니다.

그래서이 :

public myClass 
{ 
    public myClass(String name) 
    { 
     this.name = name; 
    } 

    final String name; 

    public final String getName() 
    { 
     return name; 
    } 
} 

또는 :

public myClass 
{ 
    public myClass(String name) 
    { 
     this.name = name; 
    } 

    public final String name; 
} 

그것은 그들이 실제로 아무것도하지 않을 때이 모든 게터을 가지고 있지만 변수를 반환 정말 바보 같다. 하지만 어쨌든 거기에 getter를 사용하는 것이 일반적인 자바 관행이라고 들었습니다. 게터와 데이터를 캡슐화

+1

컴파일러는 어쨌든 인라인합니다. 당신이하고있는 일에'java.util.Properties'를 활용할지라도. – jlordo

+2

최종 변수의 경우 어리석은 것처럼 보일 수 있지만 최종 변수가 아닌 변수가 있고 하위 클래스에 동일한 변수 이름이 정의되어 있고이 변수에 액세스하려고하면 get/set을하지 않으면 얼마나 혼란 스러울 지 알 수 있습니다. 올바른 캡슐화는 항상 최선의 방법입니다. – kosa

+0

@jlordo 아주 단순한 예제였습니다. 'Properties'는 내가하고있는 일에 적합하지 않다. – Cheetah

답변

11

는 다음과 같은 몇 가지 장점을 제공 할 수 있습니다

  • 당신은 호출자에 영향을주지 않고, 다른 표현으로 필드를 변경할 수 있습니다.
  • 게터에 코드를 추가 할 수 있습니다.
  • getter를 제공하는 인터페이스를 구현할 수 있습니다.
  • final이 아니더라도 필드에 대한 읽기 전용 액세스 권한을 제공 할 수 있습니다.
+1

가장 중요한 이유는 답을 설명 할 때 [커플 링] (http://en.wikipedia.org/wiki/Coupling_%28computer_programming%29) 때문입니다. –

+0

@LuiggiMendoza getters/setter와 관련하여 커플 링에 대해 더 설명해 주시겠습니까? –

+2

클래스 표현에 대해 더 많은 코드 커플을 사용하면 해당 표현을 변경하는 작업이 늘어납니다. 캡슐화는 표현의 변화에 ​​따라 일정하게 유지 될 수있는 인터페이스 뒤에 내부 표현을 숨 깁니다. –

0

내가 아는 방법은 당신이 예를 들어 System.out처럼 불변 유형의 공공 정적 최종 필드를 사용할 수 있다는 것입니다. 그러나 인스턴스 필드에 게터를 추가합니다.

나는 String의 노출을 거의 해칠 수 없다는 것에 동의합니다. 그러나 가변 유형을 조심하십시오. 또한 IDE에 인라인 및 코드 생성 기능이 있으므로 getters의 비용은 코드 작성과 런타임에 모두 부담스러운 경향이 있습니다.

관련 문제