안녕하세요 이번글은 TS에서 정적펙토리 메서드를 어떤식으로 사용하는지 스스로 추측해본 글입니다.
자세한 정적펙토리 메서드와 빌더패턴에 대한 자세한 내용은 빠졌습니다. 단지 사용하는 Best Practice에 대해서 이야기 합니다.
들어가며
일단 자바진영에서는 이펙티브 자바책에서도 정적펙토리 메서드를 권장합니다.
정적 펙토리 메서드란 무엇인가? 왜 사용하는가?
정적 펙터리 장점
1. 의미있는 이름을 부여할 수 있습니다 : 생성자 같은경우는 이름 그대로 가지기 때문입니다. 반면 정적 펙토리 메서드는 의미있는 이름을 가질 수 있습니다.
2. 생성자 로직을 깔끔하게 유지할 수 있습니다 : 만약 모든 객체가 생성되는 시간을 기록한다면 이 로직을 생성자에 넣으면 단일 책임 원칙을 위반하게 된다는 것입니다
등등 다양한 장점이 존재합니다. 그 중에서 저는 제일 공감하는게 1번인것 같습니다.
빌더 패턴 장점
- 필요한 데이터만 설정할 수 있음
- 유연성을 확보할 수 있음
- 가독성을 높일 수 있음
- 불변성을 확보할 수 있음
타입스크립트
타입스크립트에서는 클래스당 하나의 생성자를만 허용합니다. Java에서는 오버로딩으로 생성자를 여러개 지원해주지만 그렇지않았습니다. 그래서 저는 매우 불편하다고 생각했습니다. 그래서 생성자를 다르게 하는경우는 어떻게 해야할가 이게 가장컸습니다. 추가적으로 자바에서정적펙터리 메서드에 빌더패턴을 응용해서 필요한 속성만 넣게 만들게 하는 것도 있습니다.
이를 해결하기 위한 방안을 찾다가 포기하다가 오늘 알게 되었습니다.
자바 코드를 먼저 보겠습니다
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class PersonResponse {
private String name;
private int age;
private int height;
private int leg;
private int arm
public static PersonResponse from(Person person){
return PersonResponse.builder()
.name(person.getName())
.age(person.getAge())
.height(person.getHeight())
.leg(person.getLeg())
.arm(person.getArm())
.build();
}
}
자바에서 정적 펙터리 메서드를 위해서 필요한 것은 2개 입니다. 빌더 패턴 사용 + 생성자를 여러개 생성하는것
위에서 필요한 내용을 타입스크립트에서는 { }객체 생성을 통해서 해결하는 것 같습니다.
어떤 부분에서 그렇게 느꼈는지 설명하겠습니다.
1. 빌더패턴처럼 필요한 속성만 데이터를 넣도록 옵셔널 체이닝을 통해서 해결이 가능한것 같았습니다.
2. 타입스크립트에서는 return값을 먼저 적어준다면 { } 으로 생성자를 여러개 생성이 가능합니다.
export class PersonResponse {
name: string;
age: number;
height: number;
leg: number;
arm: nubmer;
static from(
person: Person
): PersonResponse {
return {
name: person.name,
age: person.age,
height: person.height,
leg: person.leg,
arm: person.arm,
};
}
}
이상입니다.