반응형
장점
- 이름을 가질 수 있다.
- 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다.
- 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다.
- 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.
- 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다.
단점
- 상속을 하려면 public이나 protected 생성자가 필요하니 정적 팩터리 메서드만 제공하면 하위 클래스를 만들 수 없다.
- 정적 팩터리 메서드는 프로그래머가 찾기 어렵다.
정적 팩터리 메서드 명명규칙
from | 매개변수를 하나 받아서 해당 타입의 인스턴스를 반환하는 형 변환 메서드 ex) Date d = Date.from(instant) |
of | 여러 매개변수를 받아 적합한 타입의 인스턴스를 반환하는 집계 메서드 ex) Set<Rank> faceCards = EnumSet.of(JACK, QUEEN, KING); |
valueOf | from과 of의 더 자세한 버전 ex) BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE); |
instance / getInstance | 매개변수로 명시한 인스턴스를 반환하지만, 같은 인스턴스임을 보장하지는 않는다. ex) StackWalker luke = StackWalker.getInstance(options) |
create / newInstance | instance 혹은 getInstance와 같지만, 매번 새로운 인스턴스를 생성해 반환함을 보장한다. ex) Object newArray = Array.newInstance(classObject, arrayLen); |
getType | getInstance와 같으나, 생성할 클래스가 아닌 다른 클래스에 팩터리 메서드를 정의 할 때 쓴다. “Type”은 팩터리 메서드가 반환할 객체의 타입이다. ex) FileStonre fs = Files.getFileStore(path); |
newType | newInstance와 같으나, 생성할 클래스가 아닌 다른 클래스에 팩터리 메서드를 정의할때 쓴다. “Type”은 팩터리 메서드가 반환할 객체의 타입이다. ex) BufferedReader br = Files.newBufferedReader(path); |
type | getType과 newType의 간결한 버전 ex) List<Complaint> litany = Collections.list(legacyLitany); |
정적 팩터리 메서드 사용예시
Entity → Dto 변환 사용 예제
- UserEntity.java
public class UserEntity implements Serializable {
@Id
@Column(name = "F_USER_NO")
private Long userNo;
@Column(name = "F_USER_NAME")
private String userName;
}
- UserDto.java
public class UserDto {
private Long userNo;
private String userName;
public static UserDto from(UserEntity userEntity) {
UserDto userDto = new UserDto();
userDto.userNo = userEntity.getUserNo();
userDto.userName = userEntity.getUserName();
return userDto;
}
}
UserDto userDto = UserDto.from(userEntity);
반응형
'노빠꾸 개발일지 > JAVA' 카테고리의 다른 글
[Intelij] 인텔리제이 기본 초기 세팅 정리(메뉴 글자 크기, 소스코드 폰트크기 등등) (1) | 2024.01.01 |
---|---|
[Java] Optional이란? (0) | 2023.05.30 |
[JAVA] 정적팩토리메서드(Static Factory Method)란? (0) | 2022.11.13 |
부트스트랩 정리 및 참고할 만한 부트스트랩 추천 사이트 (0) | 2022.09.18 |
메이븐(MAVEN) 프로젝트 기본 세팅해보기 - 2 (0) | 2022.09.14 |