2013-06-26 10 views
3

거기에 대해 설득력있는 정보를 찾지 못한 채 디자인 문제가 발생합니다.클래스 인스턴스 변수를 매개 변수로 전달

클래스에 인스턴스 변수가 있다고 가정하면 이제는 해당 값을 사용하여 클래스의 일부 개인 기능을 작성하려고합니다. 그것은 그런 일을 작성하는 문제가 아니에요 : processAttribute() 내부적으로 attribute1 값을 사용

public class Example{ 

    private String attribute1; 

    public void setAttribute1(String att){ 
     this.attribute1 = att; 
    } 

    private void processAttribute(){ 
     //do something with attribute1 
    } 

    public void executeExample(){ 
     processAttribute(); 
    } 

} 

. 그러나 많은 의사는 전역 변수 사용을 제한해야한다고 말합니다. 이렇게 재사용 할 수 있고 잘 설계된 방법일까요?

public class Example{ 

    private String attribute1; 

    public void setAttribute1(String att){ 
     this.attribute1 = att; 
    } 

    private void processAttribute(String att){ 
     //do something with attribute1 
    } 

    public void executeExample(){ 
     processAttribute(this.attribute1); 
    } 

} 

아이디어를 풀어 라.

+0

이것은 전역 변수의 경우는 아니며 첫 번째 스타일이 올바른 스타일입니다. 전역 변수가되기 위해서는 변수'public static' 또는 이와 비슷한 변수를 만들어야합니다. –

답변

2

도 여기에 적용

  • 는 속성이 이외의 다른 장소에서 사용하는 경우 프로그램의 정확성에 대해 추론하기 위하여 더 어렵다 processAttribute 메서드
  • 전역 상태를 사용하는 코드를 병렬화하는 것이 더 어렵습니다. 속성이 처리되는 동안 수정되면 어떻게해야합니까?
  • 더 : 한편 http://c2.com/cgi/wiki?GlobalVariablesAreBad

, 그것은 개인 방법 그리고 당신은 그것을 구현하는 무료입니다하지만 당신만큼 당신이 클래스에 대한 계약을 이행으로있다.

+0

그것이 제가 도달하고자하는 요점입니다. 그래서, 당신의 의견으로는 여기에 매개 변수를 사용해야합니까? –

+0

개인적으로 모든 것을 가능한 한 로컬로 유지하려고하지만 가끔 인스턴스 또는 정적 속성을 사용하는 것이 더 합리적입니다. – Joni

1

우선 attribute1은 전역 속성이 아니며 클래스 변수 일뿐입니다. 클래스 변수는이 작업을 사용하여 모든 클래스 메서드에서 사용할 수 있으므로 메서드 매개 변수로 전달할 필요가 없습니다.

여기서 메소드 매개 변수를 전달할 필요가 없으므로이를 구현하는 것이 논리적으로 보이지 않습니다. Btw 이것은 내 개인 의견이며 다른 아이디어는 다를 수 있습니다.

+0

어떻게 클래스 변수입니까 ?? !!! – stinepike

+1

그는 그것을 전달할 필요가 없다는 것은 명백합니다. 문제는 최고의 디자인이 무엇인지에 있습니다. – Goatcat

+0

Example 클래스의 속성입니다. public static과 같은 것으로 선언되면 전역 변수로 간주 할 수 있습니다. –

0

그러나 많은 의사는 글로벌 변수의 사용을 제한해야한다고 말합니다.

나는 당신이 그 개념을 잘못 이해했다고 생각합니다. 일반적으로 전역 변수는 응용 프로그램의 다른 부분에서 직접 액세스 할 수 있도록 public static으로 선언 된 변수입니다.

두 가지 예에서 변수 attribute1은 전역 변수가 아닙니다. 클래스의 멤버 변수입니다.

따라서 두 개의 다른 코드 사이에는 많은 차이가 없습니다.

디자인이 고정 된 경우 첫 번째 문자를 더 읽기 쉽게 만드는 것이 더 좋습니다. 그리고 미래에 멤버 변수가 아닌 매개 변수로 다른 변수를 보낼 다른 기회가 있다면 두 번째 구현을 사용할 수 있습니다. (내 생각하지만 그것은 완전히 코더의 개인의 선택에 따라 다름) 글로벌 상태에 대한 인수의 많은

+0

나는 코더의 개인적인 선택이며 두 가지 사이에 별다른 차이가 없다는 것에 동의합니다. 이제는 다른 스레드가 동시에 실행될 수있는보다 복잡한 클래스를 상상해보십시오. –

+0

두 가지 구현간에 성능 차이가 보이지 않습니다. – stinepike

+0

성능 문제가 아니며 유지 관리 및 디자인입니다. –