본문 바로가기
IT Books Review/이펙티브 자바

[이펙티브 자바] 2장 객체 생성과 파괴

by happy coding! 2018. 11. 22.
반응형

Chapter 2. 객체의 생성과 파괴

객체의 생성

Item 1. Constructor 대신 Static Factory Method를 고려하라.

  • Laptop Class
public class Laptop {
    private String model;
    private String company;
}
  • Constructor
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) {
    // 생략
}
  • Laptop으로 convert!
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를 만들 수 없다.
    • 프로그래머에게 인지가 잘 되지 않을 수 있다.
반응형

댓글