2010-04-15 2 views
7

세터와 게터 란 무엇입니까? 왜 내가 그들을 필요로합니까? 효과적인 방법으로 사용되는 좋은 예는 무엇입니까? 세터와 게터의 요점은 무엇입니까?세터와 게터 란 무엇인지 설명해주십시오.

업데이트 : 몇 가지 코딩 예를 들어 주시겠습니까?

+0

위키에서 Mutator를 검색하는 것이 좋습니다. http://en.wikipedia.org/wiki/Mutator_method – Armstrongest

답변

11

getter는 속성 값을 가져 오는 메서드입니다. setter는 속성의 값을 설정하는 메서드입니다. 이 효능에 대한 몇 가지 논쟁이 있지만, 포인트는 일반적으로 다음과 같습니다

  • 캡슐의 완전성에 대한

  • 내부 세부 사항

더 유용 변경할 경우 일관성있는 인터페이스를 유지하기 위해 값을 확인하기 전에 값을 쓰거나 쓰기 전에 논리를 추가하거나 설정해야하는 경우가 있습니다.

7

getter/setter는 공개 필드에서 비공개 필드를 숨기는 데 사용됩니다 (필드에 대한 직접 액세스를 피할 수 있음).

게터를 사용하면 제공된 값을 내부 필드에서 사용하기 전에 확인할 수 있습니다. 설정 도구를 사용하면 다른 형식을 적용하거나 쓰기 액세스 (예 : 파생 클래스)를 제한 할 수 있습니다.

getter의 유용한 응용 프로그램은 일종의 지연로드 일 수 있습니다. 보조 필드 (getter에 의해 숨겨진 개인 필드)는 null로 초기화됩니다. Getter에게 값을 반환하도록 요청하면 null을 확인하고 더 많은 시간이 소요되는 메서드로 값을로드합니다. 이것은 첫 번째 호출에서만 발생합니다. 나중에 getter는 이미로드 된 값을 항상 제공합니다.

4

게터 & 세터는 구현 (데이터가 실제로 저장되는 방법)에서 별도의 인터페이스 (getter/setter 기능)를 사용합니다.

2

게터 및 설정자를 사용하면 개체의 데이터 멤버를 액세스하거나 변경할 수있는 방법을 제어 할 수 있습니다.

대조적으로 데이터 멤버를 개체 사용자에게 직접 노출하면 사용자가 마음대로 변경할 수 있으며 개체는 변경되었음을 알지 못합니다.

사람들이 데이터 회원을 읽는 것을 원하지 않습니까? 데이터 멤버를 비공개로 만들고 값을 돌려주는 getter를 작성하지 않습니다. 사람들이 데이터 회원을 수정하지 못하도록하고 싶습니까? 데이터 멤버를 비공개로 만들고 이에 대한 세터를 작성하지 않습니다. 허용되는 값의 범위를 제어하고 싶습니까? 그것을 세터에 넣으십시오.

1

공용 접근 (getter 및 setter)은 때로는 의미가 있습니다. 그것은 일반적으로 제이슨 S.

에 의해 언급 된 경우를 제외하고 캡슐화 도움이되지 않습니다 (나는 또한 멤버 클래스의 변수 만이 주로 의미 접근 방법을 문서화 할뿐만 아니라 가지고 짜증입니다.)

데이터베이스에서로드하지만, 일부 문자에 대한 자바의 예는 부울 값으로 성능이 저하 될 수 있습니다 대신 직접 필드에 액세스하는 방법을 사용하는 경우이 튀어 수

char boolFromDb; 

public boolean getBoolFromDb() { 
    return boolFromDb == 'T'; 
} 

public void setBoolFromDb(boolean newValue) { 
    boolFromDb = newValue ? 'T' : 'F'; 
} 
2

한 질문을 표현한다 . 대답은 실제로 코드를 최적화하는 컴파일러가 아니므로 메소드가 return field; 일 경우에만 field은 setter/getter로 숨기는 클래스의 필드이며 실제 필드에 직접 액세스합니다. 따라서 대부분의 경우 동일한 성능을 얻지 만 동시에 나중에 메소드를 설정/가져 오는 옵션을 유지하는 옵션을 유지합니다.

효과적인 Java Programming of Joshua Block은 좋은 코드를 작성하는 방법에 대한 정보가 담긴 훌륭한 책이며 그 이유를 설명합니다. setter/getter를 사용하는 것이 힌트 중 하나 인 이유는 무엇입니까?

참고 : 직접 액세스 할 수있는 대신 setter/getter를 표시하는 일부 서적/문서 필드는 필드 대신 '속성'이라고 불리는 것을 볼 수 있습니다. 예 : C#에서는 필드가 속성이고 더 이상 set/get을 정의 할 필요가 없다고 지정할 수 있습니다 (멋진 기능이라고 생각합니다).