정적 팩토리 메서드란?

2023. 5. 29. 22:27·노빠꾸 개발일지/JAVA
목차
  1. 정적 팩터리 메서드 명명규칙
  2. 정적 팩터리 메서드 사용예시
반응형

장점

  • 이름을 가질 수 있다.
  • 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다.
  • 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있다.
  • 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다.
  • 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다.

단점

  • 상속을 하려면 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
  1. 정적 팩터리 메서드 명명규칙
  2. 정적 팩터리 메서드 사용예시
'노빠꾸 개발일지/JAVA' 카테고리의 다른 글
  • [Intelij] 인텔리제이 기본 초기 세팅 정리(메뉴 글자 크기, 소스코드 폰트크기 등등)
  • [Java] Optional이란?
  • [JAVA] 정적팩토리메서드(Static Factory Method)란?
  • 부트스트랩 정리 및 참고할 만한 부트스트랩 추천 사이트
No Backing
No Backing
노빠꾸
    300x250
  • No Backing
    누릇한 노빠꾸 블로그
    No Backing
  • 전체
    오늘
    어제
    • 분류 전체보기 (144)
      • 노빠꾸 서버 (20)
        • AWS (0)
        • 설치관련 (7)
        • 명령어 정리 (2)
        • 서버 설정 (8)
        • Nginx (2)
      • 노빠꾸 개발일지 (70)
        • JAVA (16)
        • JQUERY & JAVASCRIPT (10)
        • HTML5 (0)
        • SPRING (16)
        • Design Patterns (1)
        • DAUM API (1)
        • GIT (10)
        • Python (1)
        • SPRING SECURITY (1)
        • Vue (3)
      • 노빠꾸 데이터베이스 (9)
        • SQL (1)
        • ORACLE (3)
        • MySql (5)
      • 노빠꾸 일상 (13)
      • 노빠꾸 책 추천 (4)
      • 노빠꾸 경제 (20)
      • 노빠꾸 맥북 사용기 (7)
      • 노빠꾸 정보처리기사 정리 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    경제용어
    JPA 쿼리 메소드
    맥북 사용 팁
    스프링 시큐리티 5.7 버전이후 변경사항
    리눅스 자바 설치
    스프링부트란
    MySQL 데이터베이스 생성
    사이트맵
    맥북 단축키
    Spring boot
    Linode
    WebSecurityConfigurerAdapter Deprecated
    스프링부트 JPA
    websecurityconfigureradapter 빈 등록
    MySQL 사용자 계정 생성
    인텔리제이
    스프링부트 프로젝트
    금융용어
    스프링부트
    websecurityconfigureradapter 사용법
    주식용어
    깃허브 코파일럿
    리노드
    티스토리 사이트맵 등록
    websecurityconfigureradapter란
    WebSecurityConfigurerAdapter
    스프링시큐리티 websecurityconfigureradapter
    우분투 자바 설치
    개인서버 추천
    websecurityconfigureradapter 변경사항
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
No Backing
정적 팩토리 메서드란?
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.