일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- FLUTTER
- 알고리즘
- Django REST
- NDK
- RxAndroid
- android architecture component
- flutter firestore
- C/C++
- 코틀린
- UWP
- 안드로이드
- kodility
- livedata
- 안드로이드 구글맵
- Django REST Android
- C
- C++
- Django REST framework
- Android
- Flutter TextField
- RxJava
- mfc
- android push
- Java
- Python
- 프로그래머스
- Kotlin
- Rxjava2
- Android P
- dart
- Today
- Total
개발하는 두더지
[Effective Java 규칙1] 생성자 대신 정적 팩터리 메서드? 본문
Effective Java 2/E 책과 구글링을 통해 내용을 정리하고 개인적인 견해가 포함된 글입니다.
보통 객체를 만들 때 Car car = new Car(); 처럼 생성자를 이용하여 만든다.
생성자 대신 정적 팩터리 메서드로 만든다면 장점은 무엇이 있을까?
1. 정적 팩터리 메서드에는 이름이 있다. 무슨말일까?..
생성자와 파라미터만 가지고는 어떤 객체가 생성되는지 설명할 수 없지만 정적 팩터리 메서드는 이름을 잘 지어놓으면
어떤 객체가 생성되는지 설명할 수 있다.
Car car = Car.newInstance();
Car car = Car.newInstanceWithWheel("금호");
2. 호출할 때마다 새로운 객체를 만들지 않는다.
싱글톤 클래스처럼 static 객체가 만들어지므로 동일한 객체가 요청되는 일이 잦고, 객체를 만드는 비용이 크다면 성능을 크게 개선할 수 있다. (?)
3. 생성자와 달리 반환값 자료형의 하위 자료형 객체를 반환할 수 있다. (?)
인터페이스 기반 프레임워크에 적합함
자바의 컬렉션 프레임워크에서 구현체의 대부분이 정적 팩터리 메서드로 구현되어있다. Collections.sort() 는 static 메서드이고 정적 팩터리 메서드인 것 같다.
정적 팩터리 메서드의 이름으로 주로 사용하는 이름은 아래와 같다.
- valueOf
- of
- getInstance
- newInstance
- getType
- newType
결론은 정적 팩터리 메서드와 생성자는 용도가 다르고 장단점이 있다. 책에서 나와있듯이 정적 팩터리 메서드로 만들어 보는 것을 고려하지않고 바로 생성자를 통해 객체를 만드는 것을 삼가야한다.
'Java,Android' 카테고리의 다른 글
[Effective Java 규칙3] private 생성자나 enum 자료형은 싱글턴 패턴으로 설계 (0) | 2018.09.04 |
---|---|
[Effective Java 규칙2] 생성자 인자가 많을 때는 Builder 패턴을 이용 (0) | 2018.09.04 |
리틀엔디안(Little Endian)과 빅 엔디안(Big Endian) (0) | 2018.08.23 |
Android Cannot fit requested classes in a single dex file. 해결 방법 - 190124 업데이트 (3) | 2018.08.19 |
Android NDK 32bit 64bit abi 와 2GB 이상 파일 지원 (0) | 2018.08.13 |