티스토리 뷰
![]() |
|
클래스를 정의할 때 클래스에 public으로 선언된 정적 팩토리 메서드(static factory method) 를 추가하는 것을 고려해본다.
장점1) 생성자와 달리 정적 팩터리 메서드에는 이름(name)이 있다.
- 가독성에 도움이 된다.
ex) 소수일 가능성이 높은 BigInteger 객체를 생성하는 생성자 BigInteger(int, int, Random) ->
BigInteger.probablePrime 과 같이 사용하면 이해하기 쉬울 것
- 클래스의 시그니처 별로 하나의 생성자만 넣을 수 있는 제약을 피할 수 있다.
ex) A(int, double) , A(double, int) 와 같이 생성자를 만들 경우 코드를 읽고 사용하는데 매우 힘들 다. 정적 팩터리 메서드를 여러개 만들면 이름으로 구별할 수 있다.
장점2) 생성자와는 달리 호출할 때마다 새로운 객체를 생성할 필요가 없다.
- 변경 불가능 클래스라면 이미 만들어둔 객체를 사용할 수 있다.
- 변경이 불가능한 클래스라면 a == b 일 때만, a.equals(b) 가 참이되도록 만들 수 있다.
=> == 을 사용할 경우 equals 를 사용할 때 보다 성능향상. (?) 성능향상이 얼마나 되길래...
장점3) 생성자와는 달리 반환값 자료형의 하위 자료형 객체를 반환할 수 있다.
- 반환되는 객체의 클래스를 유연하게 결정 가능
ex) java.util.EnumSet 의 경우 public 생성자는 존재하지 않고 모두 정적 팩터리 메소드를 사용하 는데 EnumSet 안에 상수의 개수가 64개 이하일 경우 RegularEnumSet 을 반환하고 64개 초 과일 경우 JumboEnumSet 을 반환하는데 이때 사용하는 사람은 RegularEnumSet 인지
JumboEnumSet 인지 알지 않고 사용할 수 있다.
장점4) 형인자 자료형 (parameterized type) 객체를 만들 때 편하다.
- 컴파일러가 형인자를 스스로 알아내도록 할 수 있다.
위와 같은 코드를 다음과 같이 수정 할 수 있다.
단점1) public 이나 protected로 선언된 생성자가 없으므로 하위 클래스를 만들 수 없다.
단점2) 정적 팩터리 메서드가 다른 정적 메서드와 확연히 구분되지 않는다.
- valueOf() vs of() vs getInstance() vs getType() vs newInstance()
'JAVA > Effective Java' 카테고리의 다른 글
규칙5 불필요한 객체는 만들지 말라 (0) | 2018.12.19 |
---|---|
규칙6 유효기간이 지난 객체 참조는 폐기하라 (0) | 2018.12.19 |
규칙4 객체 생성을 막을 때는 private 생성자를 사용하라 (0) | 2018.12.19 |
규칙3 private 생성자나 enum 자료형은 싱글턴 패턴을 따르도록 설계하자 (0) | 2018.12.19 |
규칙2 생성자 인자가 많을 때는 Builder 패턴 적용을 고려하라 (0) | 2018.12.19 |
- Total
- Today
- Yesterday
- dynamodb
- Flux
- reactor
- Lazy
- custom config data convertion
- wait()
- circurit breaker
- RouteDefinition
- MariaDB
- DyanomoDB
- msyql-connector-java
- N+1
- rate limit
- mariadb-connector-j
- GlobalFilter
- notifyAll()
- referencedColumnName
- getBoolean
- ResultSet
- aurora
- AbstractMethodError
- spring cloud gateway
- Seperate Chaining
- ConcurrentHashMap
- mariada-connector
- router
- reative
- RoutePredication
- HashMap
- notify()
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |