Chapter 2. 객체의 생성과 파괴
객체의 생성
Item 1. Constructor 대신 Static Factory Method를 고려하라.
public class Laptop {
private String model;
private String company;
}
public Laptop(String modelName, String company) {
this.modelName = modelName;
this.company = company;
}
- 이름을 가진 Static Factory Method
public static Laptop ofModelNameAndCompany(String modelName, String company) {
Laptop laptop = new Laptop();
laptop.company = company;
laptop.modelName = modelName;
return laptop;
}
From to Entity Class (API request Parameter)
- Api request with LaptopForm
public class LaptopForm {
private String name;
private String corp;
}
@PostMapping(value = "/add")
public LaptopDto addLapTop(@RequestBody LaptopForm laptopForm) {
// 생략
}
public class Laptop {
private Long id;
private String modelName;
private String company;
public static Laptop from(LaptopForm laptopForm) {
Laptop laptop = new Laptop():
laptop.modelName = laptopForm.getModelName();
laptop.company = laptopForm.getCompany();
return laptop;
}
}
Entity to Dto class (API response parameter)
public class LaptopDto {
private String modelName;
private String companyName;
public static LaptopDto from(Laptop laptop) {
LaptopDto laptopDto = new LaptopDto();
laptopDto.company = laptop.getCompany();
laptopDto.modelName = laptop.getModelName();
return laptopDto;
}
}
정리하자면 Constructor 대신 Static Factory Method를 고려하라
- 장점
- 이름을 가질 수 있다.
- Simple하고 명확하게 사용할 수 있다.
- 인스턴스를 매번 생성할 필요는 없다.
- Flyweight pattern - Collection Object
- Singleton pattern - Single Object (Singleton의 경우 한 객체, Flyweight의 경우 multiple한 객체를 다룬다)
- 단점
- Static Factory method만 제공하면 Constructor가 없을 수 있어 상속받은 Class를 만들 수 없다.
- 프로그래머에게 인지가 잘 되지 않을 수 있다.