2013-02-02 6 views
-1

exampleVariable과 같은 변수를 가지고 있는데 getExampleVariable()setExampleVariable(Object value)을 사용해야하고 ExampleClass.exampleVariableExampleClass.exampleVariable = exampleObject; 대신 exampleVariable을 비공개로 설정해야하나요?getter 및 setter를 언제 사용합니까?

나는 getter와 setter가 변수를 설정하는 것 이상을하지 않더라도 항상 getter와 setter를 사용합니다.

+0

예. 캡슐화는이 원칙을 지시합니다. – Dan

+7

[Pick] (http://stackoverflow.com/questions/565095/are-getters-and-setters-evil?rq = 1) [and] (http://stackoverflow.com/questions/875033/getters-setters-in-java?rq=1) [선택] (http://stackoverflow.com/questions/875033/getters- setters-in-java? rq = 1) [a] (http://stackoverflow.com/questions/10407877/what-is-the-point-of-getters-and-setters?lq=1) [duplicate] (http://stackoverflow.com/questions/1461598/what-is-the-point-of-setters-and-getters-in-java?lq=1) [질문] (http://stackoverflow.com/questions/) 11883454/필요성 - getter-methods? lq = 1)! – eboix

+0

@ Dan 비록 일부는이 원칙을 "정보 은닉"이라고 부릅니다. – Scooter

답변

0

1) 필요한 경우에만 getter 및 setter를 사용하십시오. 예를 들어, 변수가 외부 세계에 의해 읽고 쓰여질 필요가 없다면, getter와 setters를 생성/생성 할 필요가 없습니다. 외부 세계가 변수를 읽어야 만한다면 getter는 setter가 아닌 정의되어야합니다.

2) "getter 및 setter가 변수 설정 이외의 작업을 수행하지 않더라도": getters 및 setter에는 비즈니스 로직이 없어야합니다. 존재의 주된 이유는 변수를 설정하거나 변수를 얻는 것입니다.

0

예, 추상화에 도움이되고 코드를 유지 관리하기가 쉽기 때문입니다. 예를 들어, 뭔가 다른 방법으로 exampleObject를 가져 와서 필드로 유지하고 반환하려는 경우, getters와 setters를 사용하면 모든 것을 변경하는 것이 어려울 것입니다.

1

나는 불꽃 전쟁을 시작할 생각이 없습니다. 많은 사람들은 클래스 사용에 관계없이 항상 setter와 getter를 사용해야한다고 주장합니다. 게터와 세터는 API를 변경하지 않고도 클래스에 추가 논리를 추가 할 수 있습니다. 측면 등

는 개인적으로 나는 더 실용적인 접근 방식을 선호 추가 할 수 있습니다 : 당신이 그들에 추가 논리가 필요하지 않은 경우 당신이 getter 및 setter를 작성하지 않는 라이브러리를 작성하지 않는. 정상적인 멤버를 일단 getter 및 setter 코드로 리팩터링하는 것은 정말 간단합니다.

1

나는 조금 다른 생각을한다. 내 클래스의 객체는 외부 gettable 속성이 있어야합니까? 그렇다면 getSomething 방법이 있습니다. 덜 자주, 해당 속성을 외부에서 수정할 수 있어야합니다, setSomething 메서드가 필요합니다.

아주 자주는 아니지만 항상 속성을 나타내는 가장 단순하고 최선의 방법은 개인 변수 something입니다.

0

Getter 및 Setter는 항상 명확하지는 않지만 특히 라이브러리 API를 작성할 때 특히 그렇습니다. 변수가 공개적으로 액세스되는 API로 시작하는 상황을 생각해 봅시다. 나중에 변수를 설정하기 전에 몇 가지 작업을 수행하려면 getter 또는 setter 패턴으로 변경해야합니다. 이것은 귀하의 API를 사용하는 모든 사람을 망칠 것입니다. getter 및 setter로 시작하면 API가 변경되지 않습니다. 당신은 당신의 변화에 ​​대해 글을 쓸 수 있습니다.

다음은 새로운 클래스를 작성할 때 활용하는 일반적인 규칙입니다.

다른 사람이이 인스턴스 변수에 액세스하려고한다고 생각합니까? 그렇다면 getter를 만듭니다. 누군가가 그 물건을 바꾸는 것을 원하지 않으면, 방어적인 사본을 만드십시오. 1 (항상 방어적인 복사본을 만드는 것이 기본값입니다).

사람들이 평생 동안 인스턴스를 변경해야합니까? 그렇다면 설정 도구를 만듭니다. 또한이 클래스는 스레드로부터 안전하지 않으며 시간이 지나면 변경 될 수 있음을 문서화하십시오. 객체가 변경되어서는 안되는 경우, 인스턴스 변수를 final로 만들고 변경 불가능하도록하십시오.

관련 문제