loose
이로운 개발하기
loose
전체 방문자
오늘
어제
  • 전체 (204)
    • ☕ Java (24)
    • 📘 Effective Java (9)
    • 🍃 Spring (47)
    • 📖 ORM (9)
    • ☸️ Kubernetes (13)
    • 🐧 Linux (5)
    • 🐋 Docker (5)
    • 🛠️ CI & CD (7)
    • 🕸️ Web (6)
    • 🔗 Distributed System (3)
    • 📜 Js (10)
    • 📈 Database (11)
    • 🗂️ Etc (34)
    • 🧑 Chitchat (11)
    • 📒 문학 (9)
    • 👜 개인 공부 창고 (1)

공지사항

반응형

최근 글

최근 댓글

loose

이로운 개발하기

📘 Effective Java

[Item 1] 생성자 대신 정적 팩터리 메서드를 고려하라

2022. 9. 2. 15:43
반응형

정적 팩토리 메서드란?


정적 팩토리 메서드란 객체 생성을 생성자가 하지 않고 객체 생성의 역할을 하는 메서드라는 의미다.

pulbic static CarDto from(Car car) {
    return new CarDto(car.getName(), car.getPosition());
}

장점


1. 생성자에서는 쓸 수 없었던 메서드 이름을 가질 수 있다.(위 코드에서 from이라는 이름을 사용)


2. 호출할 때마다 새로운 객체를 생성할 필요가 없다.

 

위의 코드는 메서드를 호출 할 때마다 new로 매번 새로 생성하지만 싱글톤 패턴을 이용해 기존 객체를 호출하는 방식으로 사용할 수 있다.


3. 하위 자료형 객체를 반환할 수 있다.

 

개인적으로 정적 팩토리 메서드만의 장점인건 잘모르겠다.

전략 패턴을 사용하는 생성자 패턴에서도(대표적인 예인 컬렉션 프레임워크의 List) 하위 객체(ArrayList, LinkedList)를 반환할 수 있다.

List list = new ArrayList();

책에서는 컬렉션 프레임워크에서도 정적 팩토리 메서드 패턴을 사용한다고 나와있는데 아래가 그 예제다. ArrayList의 asList 메소드를 이용해 하위 객체인 ArrayList를 반환 할 수 있다.

public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}


4. 객체 생성을 캡슐화할 수 있다. 

 

정적 팩토리 메서드에 DTO에서 꺼낸 변수가 아닌 DTO를 던지고 안에서 다시 가공을 하면 변수를 캡슐화 할 수 있다.

 

결론


생성자 방식이나 정적 팩토리 메소드나 장단점이 있으나 확실한건 정적 팩토리 메소드가 더 장점이 많으므로
자주 이용하는 것이 좋다고 한다.

728x90

'📘 Effective Java' 카테고리의 다른 글

[Item 6] 불필요한 객체 생성을 피하라  (0) 2022.09.02
[Item 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라  (0) 2022.09.02
[Item 4] 인스턴스화를 막으려거든 private 생성자를 사용하라.  (0) 2022.09.02
[Item 3] private 생성자나 열거 타입으로 싱글턴임을 보증하라  (0) 2022.09.02
[Item 2] 생성자에 매개변수가 많다면 빌더를 고려하라  (0) 2022.09.02
    '📘 Effective Java' 카테고리의 다른 글
    • [Item 5] 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
    • [Item 4] 인스턴스화를 막으려거든 private 생성자를 사용하라.
    • [Item 3] private 생성자나 열거 타입으로 싱글턴임을 보증하라
    • [Item 2] 생성자에 매개변수가 많다면 빌더를 고려하라
    loose
    loose
    불만하는 사람은 90명, 해결하는 사람은 9명, 리드하는 사람은 1명 음악과 낭만을 좋아합니다.
    hELLO. 티스토리 스킨을 소개합니다.
    제일 위로

    티스토리툴바