작성
·
126
0
안녕하세요 선생님!
프로젝트 코드를 작성하던 중 클라우드와 직접적인 상관이 있는 부분은 아니지만 현직자의 시각에서 정적 팩토리 메서드에 대한 의견을 묻고 싶어서 질문 드립니다..!
혹 선생님께서는 정적 팩토리 메소드의 역할이 어디까지라고 생각하실까요?
저는 팩토리 메소드이기 때문에 1. 단순히 파라미터를 받아 생성자를 통해 인스턴스를 생성하는 것 뿐만 아니라,
인스턴스를 생성하기 위해 2. 파라미터 valiation을 확인하고, 인스턴스 생성을 위한 데이터들을 가공하는 과정 또한 포함해도 괜찮은 것이 아닌가 하였는데,
저와 다른 의견 중에서는 팩토리 메소드는 가공이 전부 완료된 값을 단순히 받아서 인스턴스를 new 하기만 해야 한다는 의견이 있더라구요. 가공은 서비스 클래스에서 수행하구요!
예를 들면 아래와 같은 메소드가
validation과 데이터 가공을 처리하는 팩토리 메소드의 예시입니다 :
public static SearchRequest from( AnotherRequest request) {
55
//AnotherRequest 클래스로부터 SearchRequest 클래스를 생성함.
if(request.get고객리스트().size() > 9) {
56
//validation? 혹은 비즈니스 로직?
throw new Exception();
57
}
58
//아래부터 데이터 가공
List<Passenger> 새로운 고객리스트 = request.get고객리스트().stream()
59
.map(p -> new Passenger(p.get생일(), p.get성별()) )
60
.collect(Collectors.toList());
61
62
//인스턴스 생성 후 return
return new SearchRequest(새로운 고객리스트);
63
}
코드 스타일에 따라 정답은 없겠지만, OOP의 입장에서 의견을 여쭙고자 합니다! 답변 해주시면 정말 감사하겠습니다!
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
qpal1zm23님, 정적 팩토리 메서드에 대한 질문 감사합니다.
정적 팩토리 메서드는 객체를 생성하는 역할을 하며, 생성자와 비교할 때 다양한 장점을 제공합니다. 몇 가지로는 명확한 이름을 통해 생성 로직의 의도를 표현할 수 있고, 호출될 때마다 새로운 객체를 생성하지 않아도 되며, 반환 타입의 하위 타입 객체를 반환할 수 있는 유연성을 포함합니다.
팩토리 메서드가 단순히 인스턴스만 생성할 수 있는 것은 아닙니다. 입력 파라미터의 검증, 입력값에 대한 가공, 조건에 따른 다양한 타입의 인스턴스 생성 등 복잡한 로직을 포함할 수 있습니다. 이는 객체 생성의 의도와 요구사항을 더 명확히 하고, 코드의 재사용성과 유지보수성을 높일 수 있습니다.
예시로 들어주신 코드는 파라미터의 유효성 검증, 데이터 가공 후 SearchRequest
인스턴스를 생성하여 반환하는 과정을 포함하고 있습니다. 이는 정적 팩토리 메서드의 좋은 예로 볼 수 있으며, 이렇게 설계함으로써 클라이언트 코드가 객체 생성 과정에서 필요한 유효성 검증이나 데이터 가공 과정을 몰라도 되는 이점을 제공합니다.
따라서 정적 팩토리 메서드의 역할을 인스턴스 생성에만 한정짓지 않고, 필요에 따라 데이터 검증이나 가공까지 포함할 수 있다고 보는 것이 객체지향 설계 원칙에도 부합합니다. 하지만 이렇게 설계할 때는 메서드가 너무 많은 책임을 지지 않도록 주의해야 하며, 객체 생성 외의 로직이 과도하게 포함되지 않도록 유의하는 것이 좋습니다.
객체 생성의 유연성과 명확성을 도모하기 위해 사용하는 정적 팩토리 메서드를 코드 내에서 어떻게 활용할지는 프로젝트의 구체적인 요구사항과 설계 원칙에 따라 달라질 수 있습니다.