인프런 커뮤니티 질문&답변

저스트님의 프로필 이미지
저스트

작성한 질문수

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

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

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

작성

·

915

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()로 호출하는 것 외에는 차이점을 못 느꼈습니다.

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

 

답변 2

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 저스트님

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

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

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

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

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

감사합니다.

1

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

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

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

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

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

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

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

저스트님의 프로필 이미지
저스트

작성한 질문수

질문하기