그동안 객체를 생성할 때
from
,of
등의 정적 팩토리 메소드를 사용하는 방법을 썼다.
그렇게 한 이유는?캡슐화하면 좋으니까!
이 생각만 갖고 있었던 것 같다.
하지만 이러한 리뷰를 보고나니,캡슐화라는 이유만 있어도 되는 걸까?
싶으면서 무지성(?)으로 사용한 것 같다는 생각이 들어 정리해보려고 한다!
직접적으로 생성자를 통해 객체를 생성하는 것이 아닌 메서드를 통해서 객체를 생성하는 것을 말한다.
Ball ball = Ball.of(position, number);
------------------------------------------------
private Ball(int position, int number) {
this.number = number;
this.position = position;
}
public static Ball of(int position, int number) {
return new Ball(position, number);
}
Ball ball = new Ball(position, number);
------------------------------------------------
public Ball(int position, int number) {
this.number = number;
this.position = position;
}
우선 지금까지 내가 느낀 장점은 아래와 같다!
이펙티브 자바의 첫번째 아이템 - “생성자 대신 정적 팩토리 메서드를 고려하라”
참고한 글 : tecoble - 정적 팩토리 메서드(Static Factory Method)는 왜 사용할까?
정적 팩토리 메서드에 대해서 알아보다 보니 팩토리 메서드는 뭐지? 싶어서 찾아봤다!
우리의 위키백과에 따르면 팩토리 메서드 패턴은,
1. 부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며.
2. 자식 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다.
3. 부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다.
즉, 객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스가 내리도록 하는 패턴이라고 할 수 있다.
단점이라면, 패턴 구현에 의한 코드가 복잡해질 수 있다는 점이 있다.
사실 오히려 그냥 팩토리 메서드가 아직 더 이해가 안간다. 참고할만한 글을 남기고 천천히 이해해보려고 한다.
https://velog.io/@ljo_0920/팩토리-메서드
https://refactoring.guru/ko/design-patterns/factory-method