태그 보관물: patterns-and-practices

patterns-and-practices

게터와 세터를 정의하는 순서는 무엇입니까? [닫은] 되면 도움말 센터 를 방문하여 안내를 받으십시오

게터와 세터를 정의하는 순서에 대한 모범 사례가 있습니까? 두 가지 관행이있는 것 같습니다.

  • 게터 / 세터 쌍
  • 첫 번째 게터, 세터 (또는 다른 방법)

차이점을 밝히기 위해 getter / setter 쌍의 Java 예제가 있습니다.

public class Foo {
    private int var1,
    var2,
    var3;

    public int getVar1() {
    return var1;
    }

    public void setVar1(int var1) {
    this.var1 = var1;
    }

    public int getVar2() {
    return var2;
    }

    public void setVar2(int var2) {
    this.var2 = var2;
    }

    public int getVar3() {
    return var3;
    }

    public void setVar3(int var3) {
    this.var3 = var3;
    }
}

다음은 첫 번째 getter와 setter의 Java 예제입니다.

public class Foo {
    private int var1,
    var2,
    var3;

    public int getVar1() {
    return var1;
    }

    public int getVar2() {
    return var2;
    }

    public int getVar3() {
    return var3;
    }

    public void setVar1(int var1) {
    this.var1 = var1;
    }

    public void setVar2(int var2) {
    this.var2 = var2;
    }

    public void setVar3(int var3) {
    this.var3 = var3;
    }
}

코드와 클래스 다이어그램에서 후자의 유형이 더 명확하다고 생각하지만 다른 유형의 순서를 배제하기에 충분한 지 모르겠습니다.



답변

첫 번째 방법. 가능하면 항상 같은 그룹에서 작동하는 관련 기능으로 그룹화하거나 가까이 유지하십시오.

이러한 방식으로 코드를 정렬하면 한 클래스가 너무 많은 다른 클래스에서 인수 분해 될 수있는 경우 인수 분해 가능한 부분은 일반적으로 특정 멤버 변수를 중심으로 진행되므로 리팩토링하는 것이 더 쉽고 명확 해집니다.

일반적으로 동일한 페이지에서 객체 / 변수의 전체 수명주기를 모두 볼 수있을 때 코드를 디버그, 이해 및 조작하는 것이 더 쉽습니다. 스코프 및 알파벳 순서와 같은 피상적 특성을 기반으로 한 코드 레이아웃은 실제로 볼 수 없기 때문에 리팩토링 할 기회를 놓친다는 것을 의미합니다.


답변

당신이 팀에 있다면, 평소에하는 일을하십시오. 그렇지 않으면 더 좋아하는 것을 선택하십시오. 중요한 디자인 선택의 규모에서 이것은 아마도 “스페이스 바를 치기 위해 어떤 엄지 손가락을 사용해야합니까?”


답변

언어에 따라 달라질 수도 있습니다. Java에서는 어느 쪽이든 순서에 따른 이점이 없지만 C #에서는 “속성”이라는 개념이 있는데,이 속성은 게터와 세터를 함께 그룹화하므로 해당 순서를 강제합니다. getter와 setter (예 : private setter, public getter)에 대해 다른 가시성을 원할 수있는 C ++과 같은 언어에서는 가시성 수정자가 각각 개별적으로가 아니라 여러 방법에 대해 한 번만 제공되므로 반대의 경우가 있습니다 .


답변

내가 아는 한, 단일 규칙은 없습니다. 파일 구성Oracle Java Code Conventions 섹션 에는 게터 및 세터의 배치가 명시 적으로 언급되어 있지 않지만 다음과 같이 명시되어 있습니다.

이러한 방법은 범위 나 접근성보다는 기능별로 그룹화해야합니다.

이것은 어떤 지침도 제공하지 않습니다. 어느 게재 위치가이 기준을 충족한다고 주장 할 수 있습니다.

고려해야 할 사항은 최신 IDE를 사용하면 텍스트 코드 구성 요소보다 파일 구조에 대한 더 추상적 인 뷰를 가질 수 있다는 것입니다. 강력한 검색 도구와 함께 사용하면 파일을 쉽게 탐색하고 큰 파일 내에서 적절한 방법을 찾을 수 있습니다.

예를 들어, Eclipse는 메소드 및 필드를 다른 방식으로 정렬 및 필터링하고 파일의 위치로 바로 이동할 수있는 개요보기를 제공합니다. NetBeans는 비슷한 기능을 가지고 있었고 다른 IDE도 마찬가지라고 생각합니다.

IDE 외부에서 코드를 읽는 경우에만 문제가 될 수 있습니다. 예를 들어 외부 코드 검토 도구를 사용하거나 버전 제어 시스템에서 델타를 볼 수 있습니다.

가장 좋은 솔루션은 프로젝트의 파일간에 일관성을 유지하는 것입니다. 표준을 찾아 문서화 한 다음이를 준수하십시오.


답변

단일 필드에 대한 게터와 세터를 쌍으로 그룹화하십시오.

모든 게터와 모든 세터를 함께 그룹화하면 어떤 필드에 게터 또는 세터가 있는지 알기가 어렵습니다.

코드를 읽거나 특정 기능을 찾을 때 클래스마다 필드가 있고 각 필드에는 게터와 세터가 있습니다. 클래스에 getters 그룹과 setters 그룹이 있고 각 필드에 필드가있는 것은 이해가되지 않습니다.


답변

이제까지 Java IDE는 getter 및 setter를 생성 할 수 있습니다. 해당 기능을 사용하고 IDE에서 생성 한 것과 같은 메소드의 순서를 그대로 두십시오. 이것은 생성 된 코드이므로 불필요하게 만지지 마십시오.


답변