정적 팩토리 메서드 패턴을 활용할 때 나는 일반적으로 도메인 클래스 안에 다가 넣어두었다.
그렇게 하면 코드를 읽을 때 훨씬 심플하기 때문이였다.
1 | Response.from(Something something) {} |
Something 으로 부터의 Response 객체 라고 확 읽혀진다.
근데 문제점이 있었으니.
기본적으로 static으로 선언해야 하기 때문에 제네릭 문법을 적용하기가 어렵다.
동적타입 추론을 하는 시점은 인스턴스가 생성되고 나서일 텐데 static은 애초에 그 영역에 있지 않음으로 타입 추론이 불가능하다.
그래서 mapper 클래스를 하나 만들고 이를 싱글톤으로 구현한다.
그러면 한개의 인스턴스만 생성되며 method 영역에 저장되는 게아니고 인스턴스로써 heap 메모리에 저장되기 때문에 타입 추론이 가능해진다.
물론 한개의 인스턴스에 하나의 타입만 생성이 가능한건 어쩔수 없겠지.
여하튼 으렇게하면 정적 팩토리 메서드 패턴에 동적 타입을 적용할 수 있다.
이렇게 작성하게 되면 MapStruct 라이브러리랑 동일한 형태가 되는 거 같다.