본문 바로가기
Java

[Effective Java] Item1 생성자 대신 정적 팩터리 메서드를 고려하라

by 신입같은 3년차 2020. 12. 10.
728x90

신입시절부터 개발을 시작하여 어느덧 3년차를 지나가는 시기에 Effective Java, 객체지향의 사실과 오해, 오브젝트 , Clean Code라는 책을 추천받아서 읽어볼 수 있는 기회가 생겼습니다.

혼자 읽고 다 익힐 자신이 없어서 이렇게 글로 작성하면서 어떻게 동년차 개발자가 이해했는지 공유하고자 합니다. 오탈자 , 틀린부분 , 잘못된부분에 대해서는 지적 및 조언주시면 감사히 받겠습니다. 그러면 시작하겠습니다.

클라이언트가 클래스으 인스턴스를 얻는 정통적인 수단은 public 생성자를 통해 얻는 방법이다.
하지만 알아둬야할 기법이 하나 더 있다.

클래스는 생성자와 별도로 정적 팩터리 메서드를 제공할 수 있다.

( 시작부터 막혔다.. 정적 팩터리 메서드가 뭘까 ...)

일단 책에서 장점과 단점이 나오는대 먼저 알아보고 이해해보겠습니다.

참고 사이트

장점


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

일단 장점을 나열하였는데 한번 코드로 알아보겠습니다.

1. 이름을 가질 수 있다


정적 팩토리 메서드란 객체 생성의 역할을 하는 클래스 메서드라는 의미로 보면 될듯합니다.

쉽게 정리하면 생성자의 이름을 정적 팩터리 메서드로 바꾼다음 각각의 차이가 명확하게 드러나는 이름을 지어준다.

2. 호출될 떄마다 인스턴스를 새로 생성하지는 않아도 된다.


이 덕분에 불변 클래스는 인스턴스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불필요한 객체 생성을 피할 수 있다.

대표적인 예가 클래스의 valueOf 메서드입니다. 객체를 아예 생성하지 않고 같은 객체가 자주 요청을 해도 미리 생성해 놓은 객체를 사용하기 때문에 성능을 많이 올려준다.

728x90
반응형

댓글