728x90
정적 팩토리 메서드
객체를 생성할 수 있는 방법이 오직 단, 하나의 정적 메소드 방식으로 만 가능하도록 설정
- 팩토리 메서드 = 객체를 생성 및 반환하는 정적 메서드
- 정적 메소드의 의의는 기존 객체에서 새로운 객체로의 변환이다.
한가지 예를 들어보자면
Enum의 요소를 조회할 때 사용하는 `valueOf`도 정적 팩토리 메서드의 일종이라고 할 수 있다.
미리 생성된 객체를 "조회"를 하는 메서드이기 대문에 팩토리 역할을 한다고 볼 수는 없지만, 외부에서 원하는 객체를 반환해주고 있으므로 결과적으로는 정적 팩토리메서드라고 간주해도 좋다.
public enum Color {
RED,
BLUE;
}
...
Color redColor = Color.valueOf("RED");
Color blueColor = Color.valueOf("BLUE");
생성자와는 어떤 차이가 있을까?
생성자 대신 정적 팩토리 메서드를 고려하라 - 이펙트브 자바 책 중
정적 팩토리 메서드를 통한 객체 생성의 장점
- 메서드 이름을 가질 수 있음
- 객체는 생성 목적과 과정에 따라 생성자를 구별해서 사용할 필요가 있다.
- `new`라는 키워드를 통해 객체를 생성하는 생성자는 내부 구조를 잘 알고 있어야 목적에 맞게 객체 생성 가능. - 이름이 없으니까 어떤 생성자가 어떤 역할을 하는지 모른다..
- 메서드 이름에 객체의 생성 목적을 담아낼 수 있다는 것이 큰 장점 - 이름만 보고 어떤 역할을 하는지 짐작 가능
- 호출할 때마다 새로운 객체를 생성할 필요가 없음
- 싱글톤 혹은 생성해야할 객체 개수에 제약을 둘 수 있다.
- 생성자를 통한 객체 생성을 생성자를 private으로 제약할 수 있다.
- 하위 자료형 객체를 반환할 수 있음
- 상속 사용시 이점인데, 상속보단 조합을 사용하므로 크게 활용되진 않는다.
- 객체 생성을 캡슐화할 수 있다
- 생성자로도 가능한데, lombok 사용에 제약이 생긴다.
엔티티(내부 객체) 객체로부터 DTO(외부 전달용 객체, Response) 생성
singleton 객체 생성
- public static final 필드 방식의 싱글톤
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
- 정적 팩토리 메서드 방식의 싱글톤
package com.example.spring_practice.singleton;
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {
}
public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
728x90
'ASAC 웹 풀스택 > Spring Boot' 카테고리의 다른 글
Java 기본 문법 및 JVM 구성(10) - final, static (0) | 2024.09.29 |
---|---|
Java 기본 문법 및 JVM 구성(9) - DTO, VO (0) | 2024.09.28 |
Java 기본 문법 및 JVM 구성(7) - Builder: 객체 생성의, 모든 경우의 수를 지원 (0) | 2024.09.28 |
Java 기본 문법 및 JVM 구성(6) - Object(Lombok을 활용한): 객체 생성 (0) | 2024.09.28 |
Java 기본 문법 및 JVM 구성(5) - Java의 객체지향 프로그래밍 패러다임 문법 (0) | 2024.09.28 |