문제

나는 "액세서"라는 단어의 사용에 대해 논쟁을 벌였다 (컨텍스트는 Java 프로그래밍이다). 나는 접근자가 암시 적으로 "속성 접근자"라고 생각하는 경향이 있습니다. 즉,이 용어는 객체의 내부 상태에 직접 액세스 할 수있는 것이 다소 존재한다는 것을 의미합니다. 상대방은 어떤 식 으로든 물체의 상태에 닿는 모든 방법이 액세서라고 주장합니다.

나는 너희들이 나에게 논쟁을 이길 수 없다는 것을 알고 있지만, 당신이 용어를 어떻게 정의 할 것인지 궁금합니다. :)

도움이 되었습니까?

해결책

접근자들에 의해, 나는 getters와 setter를 생각하는 경향이 있습니다.

객체의 내부 상태를 터치하는 모든 방법은 액세서리라고 주장함으로써 실제로 객체의 상태를 사용하는 인스턴스 방법은 액세서가 될 것이며, 옳지 않은 것처럼 보입니다. 어떤 종류의 인스턴스 메소드가 객체의 상태를 사용하지 않습니까? 다시 말해, 객체의 상태를 사용하지 않는 인스턴스 메소드는 어떤 식 으로든 인스턴스 메소드가되어서는 안됩니다. 클래스 방법이어야합니다..

예를 들어,해야합니다 BigDecimal.add 방법은 액세서로 간주됩니까? 인스턴스의 값을 읽는 방법입니다. add 방법이 호출 된 다음 다른 값을 추가 한 후 결과를 반환했습니다. BigInteger. 그것은 상당히 직접적으로 보인다 add 인스턴스 메소드는 getter 나 세터가 아닙니다.

다른 팁

액세서 방법은 주석에서 말하는 것을 정확하게 수행합니다. 부작용이없는 유형의 일부 상태에 액세스합니다 (게으른 인스턴스화를 제외하고는 발신자가 일반적으로 알고있는 것이 아닙니다).

private int _age;

public int getAge()
{
    return _age;
}

상태를 수정하는 방법은 돌연변이 체로 더 유용하게 고려됩니다 (내 의견으로는).

인터넷 검색과 위키 백과 외에도 자바 언어 사양 액세서 방법의 예로 이것을 보여줍니다.

private static int N;
public static int getN() { return N; }

그렇습니다. 필드의 가치를 얻는다고 말하고 싶습니다. 컴파일러는 이것을 인화하여 간단한 읽기로 변환 할 수 있으므로 그 이상은 액세서가 아닐 것입니다.

액세서 방법 : getred, getgreen 및 getblue

이러한 방법은 일반적으로 값에 액세스합니다.

뮤지토 방법 : setred, setgreen, setBlue

돌연변이가 값을 돌려 줄 것입니다

나는 항상 첫 번째 정의에 갔다. 따라서 일반적으로 getters and setter에만 적용됩니다. 우리가 두 번째 방법으로 가면 거의 모든 방법을 다루기 때문에 훨씬 덜 유용한 차이입니다.

액세서 방법은 물체의 필드에 액세스하는 데 사용됩니다. 따라서 Getters와 Setters는 모두 액세서 방법입니다. 관찰자 방법 외부 관찰 가능한 부작용을 일으키지 않고 물체에 대한보다 일반적인 관찰을하는 방법에 대한 올바른 용어입니다. 부작용을 유발하는 주요 목적이있는 방법은 돌연변이 방법. 따라서 세터는 an입니다 예시 돌연변이 방법의. 우수한 엔지니어링 실습을 위해, 공개 세터는 클래스가 데이터에 대한 불변을 시행 할 수 없기 때문에 피해야합니다. 클래스가 일반적으로 시행 해야하는 추상화 장벽을 위반합니다.

기술 대화에서 Getters와 Setter를 구별 할 수있는 것이 좋습니다. Accessor 방법은 파트너입니다 modifier 행동 양식. Accessors 객체의 상태를 읽습니다 (getA()), 동안 modifiers State를 작성합니다 (setA(Object)).

액세스를 제공하는 메소드 ( '액세스 읽기'될 수 있습니다. 또는 객체의 내부에 대한 'ac

여기서 저자는 분명히 이런 식으로 사용합니다.

  1. http://www.javaworld.com/article/2073723/core-java/why-getter-and-methods-are-evil.html

  2. http://c2.com/cgi/wiki?accessorsareevil

이 용어는 Accessor 슬롯의 값을 수정하는 데 사용되는 Common LISP (모든 것이 아님)에서 유래 할 수 있다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top