2013-12-03 3 views
0

값을 변경/확인하는 가장 좋은 방법이 무엇인지 궁금합니다. 예를 들어, 다음 코드가있는 경우 :값을 변경/확인하는 더 좋은 방법은 무엇입니까?

public class Test{ 
    private int test1; 

    public void checkValue(){ 
     setTest1(10); 
     if(getTest1() <= 20){ 
      setTest1(30); 
     } 
    } 
    public void setTest1(int test1){ 
    this.test1 = test1; 
    } 
    public int getTest1(){ 
    return test1; 
    } 
} 

getter 및 setter를 사용할 때 더 좋습니다. 또는이게 더 낫다 :

public class Test(){ 
    private int test1 = 10; 
    public void checkValue(){ 
    if(test1 <= 20){ 
    test1 = 10; 
    } 
} 

여기서 원시 값을 사용합니까?

+2

'public class Test()'구문이 잘못되었습니다. 편집하십시오. – Nishant

+3

귀하의 질문에 GETTER/SETTER 또는 FIELD를 직접 사용해야합니다. 그것은 달려있다. 어떤 종류의 유효성 검사 (Setters) 또는 변환 (Setter/Getters에서)을 수행하는 경우 Getter/setter를 사용해야합니다. 값 집합/값 반환을 제외하고 아무것도 수행하지 않으면 다른 인스턴스 메서드에서 직접 필드를 사용할 수 있습니다. 귀하의 경우 두 번째 방법을 사용할 수 있습니다. – Loc

+2

나는 항상 객체가 코드의 다양한 위치에서 사용될 것이라면 필드는 항상 보호되거나 비공개이어야하며 getters/setter를 통해서만 액세스되어야한다고 항상 생각하고 있습니다. 실수로 인한 설정을 방지하고 액세스를 사냥하는 대신 나중에 클래스에서 리팩토링을 완전히 수행 할 수 있습니다. – ddukki

답변

0

클래스에 불변성이없는 간단한 경우 코드가 깨끗해지면서 메서드에서 직접 비공개 필드를 처리하는 것이 좋습니다.

하지만 불규칙성이있는 경우, 즉 일부 필드의 값이 다른 필드의 값을 제한하는 경우 setter를 사용하여 불변량이 유지되도록하는 것이 가장 좋습니다.

값이 소수 인 경우 부울 프라임 사실이다

간단한 예 :

class Test { 
    private boolean isPrime; 
    private int value; 

    public void setValue(int value) { 
     this.isPrime = isNumberPrime(value); 
     this.value = value; 
    } 

    public void addOneWithSetter() { 
     setValue(getValue()+1); //doing it this way means we don't forget to calculate 
           //isPrime, so invariance is maintained 
    } 

    public void addOneWithoutSetter() { 
     value = value+1; //oops! forgot to set isPrime, so now invariance is broken 
    } 

    //getters... 
} 

어느 쪽이든, 나는 위의 코드에서, 그래서 TEST1가 있어야 필드는 공개하지 않는 것을 추천

private int test1; 
1

같은 클래스에서 getter와 setter를 사용하는 것이 좋지 않다고 생각합니다. getter 및 setter의 주요 목적은 확장 성 및 안정적인 인터페이스를 제공하는 것입니다. 그러나 클래스 자체 내부에서 일부 내부 필드를 변경하기 위해 외부 인터페이스에 의존 할 필요가 없습니다.

그래서 나는 (중복 인 경우, 필드가 개인이어야한다)이 투표 :

public class Test{ 
    private int test1; 

    public void changeValue(){ 
     test1 = 30; 
    } 
    public void setTest1(int test1){ 
     this.test1 = test1; 
    } 
    public int getTest1(){ 
     return test1; 
    } 
} 
0

선생님은 내 값 (I이 필드를 의미) 개인이 아닌 경우 그가 나를 죽일 내게 말했다. 정말 필요한 경우에만 setter를 사용하십시오. 다른 클래스의 값에 액세스하려면 getter를 사용하십시오. 그리고 귀하의 생성자가 잘못 "클래스"를 제거합니다.

+0

내 생성자? – user3047395

+0

public class Test() {...}가 생성자가 아닙니다? – Fr0z3n7

관련 문제