Reference
[Design Pattern] Singleton
"헤더퍼스트 디자인패턴" + "면접을 위한 CS 전공 지식 노트"에 개인적인 의견과 생각들을 추가하여 작성한 포스팅이므로 틀린 내용이 있을 수 있습니다. (있다면 지적 부탁 드립니다.) 📕 목차 1. 리틀 싱글턴 2. 싱글턴 패턴 3. 싱글턴 패턴 구현 전략 1. 리틀 싱글턴 📌 The Little Lisper 클래스의 인스턴스를 생성하기 위해서는 일반적으로 다음과 같이 new 연산자를 사용한다. new Foo(); 다른 객체에서 또 Foo라는 클래스의 인스턴스가 필요하면, 또 new 연산자를 사용해 인스턴스를 생성하면 된다. 그런데 만약, Foo 클래스의 생성자를 private로 바꾼다면 어떻게 될까? class Foo() { private Foo() {} } 이렇게 되면 Foo 클래스 내부에서만 생성..
[Algorithm Strategies] 3-10. 탐욕법
구종만님의 "프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략"을 기반으로 공부한 내용입니다. 📕 목차 1. 도입 2. 도시락 데우기 (문제 ID: LUNCHBOX, 난이도: 하) 3. 문자열 합치기 (문제 ID: STRJOIN, 난이도: 중) 4. 미나스 아노르 (문제 ID: MINASTIRITH, 난이도: 상) 1. 도입 • 탐욕적 알고리즘 • 예제: 회의실 예약 • 예제: 출전 순서 정하기 (문제 ID: MATCHORDER, 난이도: 하) • 탐욕적 알고리즘 레시피 📌 탐욕법(Greedy Method) 완전 탐색과 동적 계획법 알고리즘과 동일하게 여러 개의 조각으로 쪼개고, 각 단계마다 답의 한 부분을 만들어간다. 하지만 결정적 차이는 모든 선택지를 고려하고 가장 좋은 답을 찾는 것이 아니라, 각..
[Effective-Java] Chapter12 #90. 직렬화된 인스턴스 대신 직렬화 프록시 사용을 검토하라
📌 직렬화 프록시 패턴 (Serialization Proxy Pattern) 디자인 패턴의 프록시 패턴을 응용한 것과 같다. (그래서 장/단점도 비슷하게 따라간다.) 실제 객체를 숨기고 대변인을 통해 직렬화/역직렬화를 수행한다. 📌 작성 순서 1️⃣ 프록시 클래스 생성자 private static class SerializationProxy implements Serializable { public SerializationProxy(Period p) { this.start = p.start; this.end = p.end; } } 중첩 클래스를 private static으로 선언한다. 생성자는 단 하나여야 한다. 바깥 클래스를 매개변수로 받아야 한다. 인스턴스를 복사하는 역할만 수행한다. 일관성 검사나 ..
[Effective-Java] Chapter12 #89. 인스턴스 수를 통제해야 한다면 readResolve보다는 열거 타입을 사용하라
📌 Singleton 패턴과 직렬화 public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { ... } public void leavingTheBuilding() {...} } 위 클래스는 외부 생성자 호출을 막음으로써, 인스턴스가 오직 하나만 만들어짐을 보장하는 싱글턴 패턴이다. 하지만 `implements Serializable`을 추가하는 순간 더 이상 싱글턴이 아니게 된다. 기본 직렬화(Item 87)을 쓰지 않고, 명시적인 readObject(Item 88)을 사용해도 소용없다. writeObject()를 제공하더라도 소용이 없다. 🤔 과연 그럴까? public class Main { publi..