2016-06-17 1 views
0

좋은 코딩 측면에서 어느 것이 더 좋다고 생각합니까?객체 지향 프로그래밍 : 객체를 만드는 다른 방법이 있습니까

개체를 만들 때 new 키워드를 사용하여 해당 클래스의 인스턴스를 만듭니다.

var objA = new A() 

나는 클래스의 정적 메서드 이름 CreateA을 생성하여 객체를 생성하고 CreateNewA 또는 그 대신 새로운 (A)의 때 CreateInstance()를 호출하여의 객체를 생성합니다.

var objA = A.CreateNewA() instead of var objA = new A(). 

A.CreateNewA()는 코드를보다 쉽게 ​​읽을 수 있도록합니다. 이 문제를 해결하려면 CreateNewA라는 정적 메서드를 만들어야합니다.

+0

설명하는 것은 공장 방법입니다. 하지만 솔직하게 말해서, 이것이 코드를 더 읽기 쉽게 만들 것이라고 생각하는 이유는 무엇입니까? 앞에서 설명한 것처럼 더 많은 코드를 작성해야하므로 더 많은 코드를 읽어야합니다. 다음 것은 모든 객체가 당신의 인수에 관한 정적 메소드를 가져야한다는 것입니다 ... – lokusking

+0

클래스에서 작성한 정적 메소드가 코드를 읽기 쉽도록 만들지 않을 것이라고 생각합니다. 따라서 첫 번째 옵션이 더 좋으며 코드를 적게 작성할 수 있습니다. . –

+0

True ... Oh coz 나는 다른 코드의 일부 데이터 객체와 매핑 된 Thrift 구조체를 가지고 있으므로 매핑을 수행하기 위해 CreateA라는 이름을 지정한 경우 객체 A의 새 복사본을 만들지는 않는다는 것을 알 것이다. 내부적으로 객체를 만들고 있습니다. A. CreateNewA라는 이름을 붙인 다음, 읽을 때, 명시 적으로 새로운 A 객체를 생성하는 것을 말합니다. – LittleFunny

답변

0

A.CreateNewA()가 필요 없다고 생각합니다.

"새"키워드를 사용하여 새 인스턴스를 만드는 것이 더 읽기 쉽고 이해하기 쉽습니다.

사용 "새로운"키워드는

당신에 표시 무엇을 다른 사람이 이미 댓글에서 언급 한 것처럼
const studentA = new Student('firstname', 'lastname') 
+0

또한 정적 메소드에 인수를 전달한 다음 생성자에 전달합니다. –

+0

@FrankPuffer, 정적 메서드가 필요하지 않습니다. "new Class (params ..)"는 이미 모든 개발자에게 의미가 있습니다. –

0

가, 두 번째 코드 샘플은 잘, 우리는 너무 예를 생성자 클래스에 초기 값을 전달할 수 있도록 "공장 방법"이라는 알려진 디자인 패턴.

구체적인 예에서는 new으로 생성자를 직접 호출하는 것보다 큰 이점이 없습니다. 여전히 생성자가 필요합니다. 정적 메소드 내부에서 호출하면 생성자를 비공개로 만들 수 있습니다.

컴파일 타임에 생성 될 객체의 클래스를 모르는 경우 팩토리 메소드가 의미가 있습니다. 생성자와 달리 팩토리 메서드는 A 클래스의 개체뿐만 아니라 A에서 파생 된 모든 클래스의 개체도 반환 할 수 있습니다.

팩토리 메서드를 사용하는 주된 이유는 개체 작성을 나머지 프로그램 논리와 분리하여 우려를 분리하는 데 유용합니다. 물론 추가 코드를 작성하고 읽어야하는 비용이 든다.