클래스 내 특정 객체에 고정적으로 객체를 할당하는 것이 아닌 동적으로 필요에 따라 해야 할 때 유용하다. 인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식이다. 또한 불변을 보장하여 여러 클라이언트가 의존 객체들을 안심하고 공유할 수 있기도 하다. 의존 객체 주립이 유연성과 테스트 용이성을 개선해주기는 하지만, 의존성이 수 천개나 되는 큰 프로젝트에서는 코드를 어지럽게 만들기도 한다.
정적 메서드나 정적 필드만을 담은 클래스를 만들고 싶을 때 유용한 아이템이다. 대표적으로 java.lang.Math, java.util.Arrays, java.util.Collections, final 클래스와 메서드를 모아놓은 클래스 등이 있다. 인스턴스화를 막으려면 private 생성자를 추가하면 된다. 이 방법은 상속도 막을 수 있다. 하지만 직관성이 다소 낮으므로 적절한 주석을 달아주는 것이 중요하다.
싱글턴(singleton)이란 인ㅅ흐턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 전형적인 예로 함수(아이템 24)와 같은 무상태(stateless) 객체나 설계상 유일해야 하는 시스템 컴포넌트를 들 수가 있다. 그런데 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트 하기 어려울 수 있다. 싱글턴을 만드는 방식은 보통 둘 중 하나다. 두 방식 모두 생성자는 private으로 감춰두고 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마련해둔다. 아래 코드를 보자. public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() {...}; public void le..
정적 팩토리 메서드와 생성자에 똑같은 제약이 하나 있다. 그것은 바로 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 만약에, 식품 포장의 영양정보를 표현하는 클래스를 생각해보자. 영양정보는 1회 내용량, 총 n회 제공량, 1회 제공량당 칼로리 같은 필수 항목 몇 개와 총지방, 탄수화물, 나트륨 등 수많은 선택 항목으로 이뤄진다. 이때 대다수 값이 0 이다. 그래서, 값이 있는 항목에 한해 객체 생성시 넣을 수 있도록 생성자를 생성하려하면 파라미터가 끝도 없이 길어질 수 있고, 또한 파라미터에 넣는 값의 순서가 바뀌어도 오류가 나지 않아 어플리케이션이 비정상 적으로 작동될 수 있다. 더 큰 문제는 비정상 작동은 큰 문제가 된 이후에 발견 될 것이다. 결론적으로 생성자의 매개 변수 조합이 다양하고 매..
Outline 클라이언트(API 사용자)가 클래스의 인스턴스를 얻는 정통적인 수단은 Public 생성자다. 그 밖에도 클래스는 생성자와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있다. - Pros and Cons, 장점 & 단점 Pros 1. 이름을 가질수 있다. 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 반면 정적 팩터리는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. ex 1. 생성자 & 정적 팩토리 메서드 비교 // 생성자 BigInteger(int, int, Random); // 정적 팩토리 메서드 // 참고: prime number: n.소수 BigInteger.probablePrime();전자 보다는 후자..
- Total
- Today
- Yesterday
- 자바 메모리 구조
- Replication Controller
- k8s
- Java
- Effective Java
- Java Memory Structure
- POD
- JVM
- JMM
- Delete
- kubernetes
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |