정적 팩토리 메서드란?

2023. 5. 29. 22:27·노빠꾸 개발일지/JAVA
반응형

장점

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

단점

  • 상속을 하려면 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
'노빠꾸 개발일지/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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바