2010-06-14 2 views
1

가능한 중복 : Purpose of private members in a class게터와 세터의 목적은 무엇입니까?

당신이 당신 변수 공개 및 A.setVariableX(A.getVariableY()) 같은 라인의 번거 로움을 피할 수 있습니다 때 getter 및 setter의 사용은 무엇입니까
Public Data members vs Getters, Setters
?

+0

가능한 복제본 : http://stackoverflow.com/questions/2903385/property-and-encapsulation – Paolo

+0

그냥 알다시피, 내 프로그램에서 게터와 세터를 처음에는 간단하게 구현했습니다. (당시에는 쓸모 없었습니다. 쓸모 없었습니다.) 함수를 사용하여 변수를 변경하거나 검색하지만 예외를 throw 할 때 디버깅하는 동안 생명을 구하는 것으로 나타났습니다. 나는 그들이 공개적으로 디버깅하는 것이 얼마나 쉬운 지 알지 못한다 : – wrongusername

답변

11

구현 세부 정보를 숨기려면. 속성을 공개로 설정하고 나중에 작동 방식을 변경하기로 결정한 경우 관련된 모든 코드를 변경해야합니다.

getter 및 setter를 사용하면 표시되는 API를 변경하지 않고 내부 구현 세부 정보를 변경할 수 있습니다. 따라서 해당 클래스의 API를 사용하는 코드를 변경하지 않아도됩니다.

0

캡슐화 원칙의 일부입니다. setter와 getters를 객체와 상호 작용하는 인터페이스로 사용하여 예를 들어 나중에 클래스를 사용하는 코드를 건드리지 않고도 (입력 데이터의 유효성 검사와 같은) 모든 기능을 추가 할 수 있습니다.

3

getters 및 setters는 유효성 검사를 수행 할 수 있으며 지연 성 인스턴스화는 공용 멤버가 수행 할 수 없습니다.

속성을 구현하는 대부분의 언어가 구현에서 추상화되어 코드의 공개 멤버처럼 보이므로이 언어에 의존하지 않습니다.

+0

이상한 일은 setters/getters의 99 %가 밸리데이션이나 게으른 초기화를위한 것이 아니라는 것이다.이 자바에도 불구하고 그들 모두에 관한 것이다. .. Pojo beans를보세요 ... IDE 도움말을 사용하면 개발자를 전혀 괴롭히지 않지만 여전히 ... Reflection과는 관련이 없습니다. 관련이있는 것은 Proxying으로 설정자/게터 – lisak

3

변수가 무엇인지에 대한 제약이 있으므로 설정을 할 때 확인해야하는 경우가 있습니다.

예를 들어, 나이가 -1이 될 수없는 경우 세터에서 확인하십시오.

if(value >= 0) 
{ 
    _age = value; 
} 
else 
{ 
    throw new InvalidAgeException("Age may not be less than 0"); 
} 
2

Setter 및 getter는 코드에있는 "속성"이 무엇이든 속성에 적용됩니다. 예 : angle 변수는 라디안으로 표시된 각도 값을 저장합니다. 그런 다음이 변수에 대한 setter 및 getter를 정의 할 수 있으며 관련 각도가 어느 각도 단위인지 정의 할 수 있습니다.

관련 문제