많은 클래스가 하나 이상의 자원에 의존합니다. 가령 맞춤법 검사기는 사전에 의존하는데, 이런 클래스를 정적 유틸리티 클래스(아이템 4)로 구현한 모습을 드물지 않게 볼 수 있습니다. public class SpellChecker { private static final Lexicon dictionary = ..; private SpellChecker() {} // 객체 생성 방지 public boolean isValid(String word) { ... } public List suggestions(String typo) { ... } } 위 코드는 정적 유틸리티를 잘못 사용한 예입니다. 유연하지 않고 테스트하기 어렵다는 단점이 있습니다. public class SpellChecker { private ..
이따금 단순히 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 생깁니다. 객체 지향적으로 사고하지 않는 이들이 종종 남용하는 방식이기 때문에 그리 곱게 보이지는 않지만, 분명 나름의 쓰임새가 있습니다. 예를 들어, java.lang.Math와 java.util.Arrays처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓을 수 있습니다. 또한 java.util.Collections처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(혹은 팩터리)를 모아놓을 수도 있습니다. (자바 8부터는 이런 메서드를 인터페이스에 넣을 수 있습니다.) 마지막으로, final 클래스와 관련한 메서드들을 모아놓을 때도 사용합니다. final 클래스를 상속해서 하위 클래스에 메서드를 넣는 건 불가능하기 ..
싱글턴(singleton)이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말합니다. 싱글턴의 전형적인 예로는 함수(아이템 24)와 같은 무상태(stateless) 객체나 설계상 유일해야 하는 시스템 컴포넌트를 들 수 있습니다. 그런데 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워질 수 있습니다. 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글턴이 아니라면 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이죠. 싱글턴을 만드는 방식 싱글턴을 만드는 방식은 보통 둘 중 하나입니다. 두 방식 모두 생성자는 private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마련해둡니다. [1]. publ..
정적 패터리와 생성자에는 똑같은 제약이 하나 있습니다. 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 점입니다. 이런 클래스용 생성자 혹은 정적 팩터리는 어떤 모습일까요? 점층적 생성자(telescoping constructor) 패턴 프로그래머들은 이럴 때 점층적 생성자 패턴을 즐겨 사용했습니다. 필수 매개변수만 받는 생성자, 필수 매개변수와 선택 매개변수 1개를 받는 생성자, 선택 매개변수를 2개까지 받는 생성자 형태로 선택 매개변수를 전부 다 받는 생성자까지 늘려가는 방식입니다. 다음 코드가 그 예입니다. 지면상 선택 매개변수가 4개까지 늘어난 코드를 예로 들었습니다. public class NutritionFacts { private final int servingSize; // 필수 pri..
클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자다. 다음 코드는 boolean 기본 타입의 박싱 클래스(boxed class)인 Boolean에서 발췌한 간단한 예시 코드다. 이 메서드는 기본 타입인 boolean 값을 받아 Boolean 객체 참조로 변환해준다. package java.lang; public final class Boolean implements java.io.Serializable, Comparable { /** * The {@code Boolean} object corresponding to the primitive * value {@code true}. */ public static final Boolean TRUE = new Boolean(true); /..
- Total
- Today
- Yesterday
- 디자인패턴
- Olympiad
- 객체지향
- programmers
- Java
- JPA
- Algorithm
- C++
- kotest
- Effective Java
- 클린 코드
- 프로그래머스
- 백준
- 알고리즘
- BOJ
- 클린 아키텍처
- BAEKJOON
- 코테
- 정규표현식
- Kotlin
- 테라폼
- 이팩티브 자바
- Spring Boot
- Spring
- kkoon9
- 디자인 패턴
- AWS
- node.js
- 이펙티브 자바
- MSA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |