2016-06-21 4 views
5

최근에 동일한 클래스의 메서드에서 private 인스턴스 변수에 액세스하기 위해 getter 메서드를 사용하는 코드 검토 주석이 있습니다. 정말 좋은 방법입니까? 코드에서 불필요한 복잡성이 추가되고 있다고 생각합니다. 권장되는 방법은 무엇입니까?개인 인스턴스 변수에 액세스하기 위해 getter를 사용하는 것이 좋습니다.

public class SomeClass { 
    String abc; 

    public boolean compare(SomeClass otherClass) { 
     otherClass.getAbc().equals(abc); 
    } 
} 

public class SomeClass { 
    String abc; 

    public boolean compare(SomeClass otherClass) { 
     otherClass.getAbc().equals(getAbc()); 
    } 
} 
+3

일반적으로 신경 쓰지 않아도됩니다. 나는 수업에 참여하고 있으며 데이터는 수업에 속해 있습니다. – azurefrog

+1

해당 클래스 자체에 getter 및 setter를 사용할 이유가 없습니다. 그들은 통제 된 방식으로 개인 변수를 노출하기 위해 존재합니다. –

답변

5

첫 번째 방법은 매우 구체적인 문제가 있습니다. 일치하지 않는 getter를 사용하고 있습니다.

public boolean compare(SomeClass otherClass) { 
    otherClass.getAbc().equals(abc); 
    //.getAbc() for one, but direct access for the other!! 
} 

당신은이 방법을 동일에 대한 사과에 사과를 비교해야하고, 당신의 변수 중 하나는 (내가 공개하고 대체 할 수 있습니다 가정) 게터를 사용하여 비교 검색 및 경우 다른에서 직접 검색됩니다 재정의 (override) 할 수없는 전용 변수를 사용하면 코드가 필요 이상으로 깨지기 쉽습니다. 만약 누군가 당신의 수업을 확장하고 게터 방법을 바꾸면 어떨까요? 코드가 닫힙니다. 따라서 양쪽 모두에 게터를 사용하거나 사용하지 마십시오. 행동이 더 안정적이기 때문에 염두에두고

,이 중 하나는, 원래보다 낫다 : 일반적인 목적

public boolean compare(SomeClass otherClass) { 
    otherClass.abc.equals(abc); 
} 


public boolean compare(SomeClass otherClass) { 
    otherClass.getAbc().equals(getAbc()); 
} 

, 그것은 당신이 데이터를 사용하는 방법에 따라 달라집니다. 데이비드의 대답은 게터의 일반적인 사용을위한 리소스를 나열합니다.

평론가가 일반적인 사례에 대해서만 이야기하고 있었을 가능성은 충분히 있지만, 문제가 제대로 전달되지 않았을 수도 있습니다.

+0

나는 진언과 같은 리뷰 평론을 들었다. 나는 일반적인 게터와 세터가있는 많은 코드로 작업한다. 항상 낭비처럼 보였다. 링크 된 기사를 읽은 후 더 나은 캡슐화 된 디자인에 대해 좀 더 배워야한다고 생각합니다. 나는 많은 리뷰어들이 캡슐화를 잘 이해하지 못한다고 생각한다. –

3

이론적으로 클래스 내에서 getter와 setter를 사용하면 코드 재사용이 가능합니다. 예를 들어 setter가 클래스 내에서 유용하게 사용할 수있는 일종의 범위 검사를 수행하는 경우입니다. 실제로 나는 이것이 정말로 유익한 경우를 본 적이 없다.

이상적으로 클래스에는 setter 및 getter가 없어야합니다.

왜 세터가 없습니까? 왜냐하면 그들은 여러 가지 문제를 일으키는 가변적 인 상태를 제공하기 때문입니다. 클래스 변수는 이상적으로 생성자에 할당되어야하며 나중에 변경되지 않아야합니다.

왜 게터가 필요하지 않습니까? 클래스는 하나의 단위로 작동해야하기 때문입니다. 클래스를 만드는 요점은 다른 변수에 대한 임시 컨테이너를 제공하여 나중에 하나씩 추출하는 것만이 아닙니다. 그것은 캡슐화가 아닙니다.

관련 문제