inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

주문, 주문상품 엔티티 개발

정적 팩토리 메서드에 static이 붙어야 하는 이유

1122

저스트

작성한 질문수 6

1

안녕하세요. 강의 잘 보고 있습니다!

 

다른 분 질문에 궁금한 것이 해소되지 않아 질문드립니다.

https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-%ED%99%9C%EC%9A%A9-1&unitId=24297&category=questionDetail&q=30892&tab=community

정적 팩토리 메소드 사용 이유중에 static 메모리에 올라가기때문에 새로운 객체를 생성하지 않는 장점이 있는 거라고 알고 있습니다. 이 예제의 경우 static을 빼도 JPA가 엔티티로 관리하면서 어차피 사용할 수 있는 부분아닌가요..?

 

라는 질문에서 강사님께서는 static을 빼보면 이해될 거라고 답변하셨습니다.

제가 생각하기로는 정적 팩토리 메서드 안에서 생성자를 통해 인스턴스를 생성하는 것은 똑같아 보이고, 호출할 때 new가 아닌 Order.createOrder()로 호출하는 것 외에는 차이점을 못 느꼈습니다.

조금 더 상세한 가르침을 주시면 감사하겠습니다!

 

java spring 웹앱 spring-boot jpa

답변 2

1

김영한

안녕하세요. 저스트님

여기서 정적 팩토리 메소드는 단순히 Order 인스턴스를 생성하기 위한 목적으로 사용합니다.

쉽게 이야기해서 new를 사용하는 것과 같은 목적입니다.

대신에 new를 직접 사용하는 것 보다는 좀 더 의미있는 메서드 이름을 부여할 수 있는 등의 몇가지 장점이 있습니다. 이 관점으로 정적 팩토리 메서드를 검색해보시면 도움이 되실거에요.

참고로 정적 팩토리 메소드는 JPA나 다른 기술과는 관련이 없습니다.

추가로 AI 인턴의 답변도 참고해주세요.

감사합니다.

1

인프런 AI 인턴

안녕하세요 저스트님, 인프런 AI 인턴이에요.

정적 팩토리 메서드에 static이 붙어야 하는 이유는 여러 가지가 있습니다. 일반적으로 정적 팩토리 메서드는 해당 클래스의 인스턴스를 생성하거나, 인스턴스를 반환하는 역할을 합니다. 그런데 static 키워드가 없다면 해당 메서드를 호출하기 위해서는 해당 클래스의 인스턴스를 먼저 생성해야 합니다.

하지만 static 메서드로 정의되어 있다면, 해당 클래스의 인스턴스 생성 없이 바로 메서드를 호출할 수 있습니다. 이를 통해 코드의 가독성을 향상시킬 수 있으며, 더 간단하게 객체를 생성하거나 관리할 수 있습니다.

예를 들어 정적 팩토리 메서드를 사용하면 생성자의 가시성을 조절할 수 있습니다. 생성자를 private으로 설정하고, 정적 팩토리 메서드만 public으로 설정하면 외부에서 직접적인 인스턴스 생성을 막을 수 있습니다. 또한 정적 팩토리 메서드는 매번 새로운 객체를 생성하지 않고 재사용할 수 있습니다.

또한 정적 팩토리 메서드를 사용하는 것은 유연성을 높여줍니다. 예를 들어, 인스턴스를 생성할 때마다 캐싱하여 성능을 향상시킬 수 있거나, 생성된 인스턴스들을 관리하여 객체의 유출을 막을 수 있습니다.

정적 팩토리 메서드의 장점과 사용 시나리오에 대해 설명드렸는데, 해당 강의 예제의 경우에는 JPA가 엔티티로 관리하며 사용할 수 있는 부분입니다. 정적 팩토리 메서드를 사용할지 여부는 상황에 따라 다를 수 있으며, 객체 생성에 대한 유연성이 필요한 경우에 유용하게 사용될 수 있습니다.

더 상세한 내용은 해당 강의를 참고하시면 좋을 것 같습니다. 감사합니다!

sdk 설정 오류

0

53

2

오탈자 - @Transactional

0

56

1

src/test/resources 테스트 경로 문제

0

50

1

상품 등록후 H2 db 출력 순서 바꿀 수 있나요?

0

64

1

MemberRepositoryTest 실행오류

0

81

1

boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)

1

183

2

강의 마지막 QueryDSL 사용 부분 질문있습니다

1

142

2

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

0

51

1

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

0

71

1

기본 생성자

0

60

1

h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.

0

103

1

멤버서비스테스트 부분에서 막힙니다.

0

165

4

실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?

0

116

1

초반에 h2 다운로드 과정 꼭 필요한가요?

0

120

2

자신 필드에도 get으로 접근하는 이유가 있을까요?

0

114

1

24분 27초 연관관계 편의 메서드 위치

0

113

1

단건 주문만 가능하게 한건 의도한 부분이신가요?

0

109

2

빌드 툴, Gradle

0

59

1

h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다

0

77

2

Repository에서 EntityManager 주입 방식 차이

0

90

1

롬복과 사용자 정의 setter 메서드

0

72

1

주문 목록 조회 fetch join 질문드립니다

0

82

1

dirty checking 질문드립니다.

0

83

1

동시성 관련 질문입니다

0

75

1