2013-05-17 6 views
1

이유는 (미안 해요, 내가 어떤 것들을 기억하지, 내가 틀릴 수도 있지만, 내가이 곳을보고 알)을 Swing Tutorials의 예제 클래스의 일부를 수행이Java - 생성자의 개인 초기화 또는 초기화?

public MyClass{ 
    public MyClass(){ 
     . 
     . 
     . 
     initializeComponents(); 
     . 
     . 
     . 
    } 
    private void initializeComponents(){ 
     //initializing 
    } 
} 

을? : 같은 개인 방법을 사용 그게 적절한 컨벤션입니까, 아니면 이것입니까? :

public MyClass{ 
    public MyClass(){ 
     . 
     . 
     . 
     //initializing components 
      //component initialization 
     . 
     . 
     . 
    } 
} 

어떤 초기화 스타일이 더 좋습니까?

개인용 메서드를 사용하여 초기화 할 구성 요소가 많은 예제 클래스 만 보았 기 때문에 가독성을위한 것 같습니다. 내가 맞습니까? 그렇다면 주석을 사용하지 않아도 비슷한 수준의 가독성을 제공합니까?

+0

오 남자 ... 네 개의 대답, 거의 동일한 내용이지만 모두 고유합니다. 어느 대답이 받아 들여지는 것입니까? – Justin

답변

2

그래서 가독성을위한 것 같습니다. 내가 맞습니까?

그렇습니다. 모든 구성 요소를 초기화하는 것이 더 좋으며, .NET Framework의 WinForm에서도 이와 유사한 방법을 사용합니다. 주석 만 사용되는 경우 생성자가 구성 요소 초기화를 위해 200 줄의 코드로 이동한다고 가정합니다.

그렇다면 논평을 사용하지 않아도 비슷한 수준의 가독성을 제공합니까?

구성 요소 초기화는 보통 다음 생성자는 수백 것, 의견과 공백을 사용하는 경우 이제 상상 높이, 폭, 위치 등과 같은 다른 속성을 설정 포함, 구성 요소 클래스에 단지 생성자 호출되지 않습니다 컴포넌트 라인 초기화 때문입니다.

+0

생성자가 "수백 줄의 코드"가되는 것이 좋지 않습니까? – Justin

+0

@ gangqinlaohu, 가능한 한 적은 수의 줄을 갖는 모든 방법에 대해 항상 좋습니다. 유지 보수에 좋습니다. 생성자는 또한 메소드의 한 유형이기 때문에 코드의 수백 라인을 갖는 예는 나쁘다. 당신이 어떤 위치에 있지 않으면 내가 지금 이미지조차 할 수 없다. 초기화 부분을 별도의 메서드로 추출 할 수 있으므로 IMO를보다 유지 관리 할 수 ​​있으며 가독성이 향상됩니다. – Habib

+0

그래, 아직 그 위치에 오르지 않았다. – Justin

1

가독성을 위해 그렇게 생각합니다. GUI 구성 요소의 초기화를 생성자와 분리하면 생성자 코드가 명확하고 간결 해집니다 (그렇지 않으면 거대한 생성자 메서드가 있음). 결과적으로 GUI와 관련이 있으며 클래스의 내부 기능과 관련된 코드 블록을 정확히 알 수 있습니다.

+0

왜 주석과 공백을 사용할 수 없습니까? – Justin

1

물론 첫 번째 것이 좋습니다. 그것의 전부는 더 나은 가독성과 maintanaibility에 관한 것입니다.

두 번째 접근 방식은 좋지 않습니다. 대부분의 경우 댓글이 실제로 나쁘고 신뢰할 수 없기 때문입니다. 일부 논리가 변경되면 일반적으로 주석이 갱신되지 않습니다. 반면 코드 자체가 좋은 설명 이름을 가진 메서드를 포함하여 좋은, 그것은 항상 좋습니다. 하나의 책임과 논리적으로 관련된 일부 코드의 추출은 추상적 인 단계로 사용됩니다 (이해하기 위해 세부 사항을 설명 할 필요가 없습니다).

+0

댓글과 공백에 나쁜 점이 있습니까? – Justin

+0

그건 의미가 있습니다. – Justin

1

많은 필드를 초기화해야하고 다른 유형도 필요하면. 그런 다음에만 더 나은 함수에 넣고 같은 constrctor에서 호출하는 -

public MyClass{ 
    public MyClass(){ 
     initializeComponentType1(); 
     initializeComponentType2(); 
     ... 
    } 
    /** 
    * initializing type 1 component 
    */ 
    private void initializeComponentType1(){ 
     //initializing 
    } 
    /** 
    * initializing type 2 component 
    */ 
    private void initializeComponentType2(){ 
     //initializing 
    } 
} 

그것은 가독성과 코드의 유지 보수성을 향상시킵니다. 항상 간단하고 읽기 쉽고 유지 보수가 쉬운 코드를 작성하는 것이 좋습니다.

그러나 initilization 집합이있는 경우 함수를 만들 필요가 없습니다.