2013-08-05 4 views
2

예를 들어 DFS를 계산하는 것과 같이 함수가 하나 뿐인 클래스가 있다고 가정 해 보겠습니다. 다음 중 선호 접근 방법과 그 이유는 무엇입니까?생성자 모범 사례

Approach 1: 

public class DFS { 

    public DFS(Graph g) { 
     dfs(g); // <--- computation invoked from constructor. 
    } 

    private void DFS(Graph g) { 
     // do dfs traversal 
    } 
} 

Client: 
DFS dfs = new DFS(graph); 


Approach 2: 
public class DFS { 
    Graph g; 
    public DFS(Graph g) { 
     this.g = g 
    } 

    private void doDFS() { 
     // do dfs traversal 
    } 
} 

Client: 
DFS dfs = new DFS(graph); 
dfs.doDFS(); 
+1

결과가 호출자에게 전달되는 방법은 무엇입니까? 순회가 부작용이 있습니까? – Thilo

답변

3

후자. 컨벤션은 생성자가 즉시 작업을 시작하는 객체가 아닌 작업을 수행 할 준비가 된 빈 객체를 생성한다는 개념입니다.

둘 다 작동하지만 전자는 분명하지 않습니다.

7

생성자는 개체의 데이터 필드를 초기화하기위한 것입니다. 선택 사항이 주어지면 두 번째 접근 방식이 더 정확 해 보입니다.

더 나은 방법은 doDFS 메서드를 그래프 개체에 포함시키는 것입니다. 하나의 간단한 함수에 대해 전체 클래스를 만드는 것은 대개 나쁜 습관입니다. doDFS 메서드는 작동하는 그래프에 따라 다르므로 자연스러운 그래프 클래스에 포함 시키십시오.

+0

IOC과 종속성 삽입을 나중에 사용하는 것처럼 두 번째 선택도 마찬가지입니다. 두 번째 것과 같습니다. –