본문 바로가기

전체 글50

Design Patterns - Builder 동일한 프로세스를 거쳐 다양한 구성의 인스턴스를 만드는 방법 복잡한 객체를 만드는 프로세스를 독립적으로 분리할 수 있다. public interface TourPlanBuilder { TourPlanBuilder nightsAndDays(int nights, int days); TourPlanBuilder title(String title); TourPlanBuilder startDate(LocalDate localDate); TourPlanBuilder whereToStay(String whereToStay); TourPlanBuilder addPlan(int day, String plan); TourPlan getPlan(); } TourPlan 객체를 만들기 위한 인터페이스이다. TourPlan에 .. 2021. 11. 21.
Design Patterns - Abstract Factory 서로 관련있는 여러 객체를 만들어주는 인터페이스 구체적으로 어떤 클래스의 인스턴스(concrete protuct)를 사용하는지 감출 수 있다 public interface ShipPartsFactory { Anchor createAnchor(); Wheel createWheel(); } public interface Anchor { } public interface Wheel { } public class WhiteShipFactory extends DefaultShipFactory { private final ShipPartsFactory shipPartsFactory; public WhiteShipFactory(ShipPartsFactory shipPartsFactory) { this.shipPart.. 2021. 11. 20.
Design Patterns - Factory Method 구체적으로 어떤 인스턴스를 만들지는 서브 클래스가 정한다 다양한 구현체(Product)가 있고, 그중에서 특별한 구현체를 만들 수 있는 다양한 팩토리(Creator)를 제공할 수 있다. 확장에 열려있고 변경에 닫혀있는 구조로 만들어보자 public interface ShipFactory { default Ship orderShip(String name, String email) { validate(name, email); prepareFor(name); Ship ship = createShip(); sendEmailTo(email, ship); return ship; } void sendEmailTo(String email, Ship ship); Ship createShip(); private void .. 2021. 11. 17.
Design Patterns - Singleton 인스턴스를 오직 한개만 제공하는 클래스 시스템 런타임, 환경 세팅에 대한 정보 등, 인스턴스가 여러개 일 때 문제가 생길 수 있는 경우가 있다. 인스턴스를 오직 한개만 만들어 제공하는 클래스가 필요하다. 싱글톤 패턴을 가장 단순히 구현하는 방법 public class Settings1 { private static Settings1 instance; private Settings1() { } public static Settings1 getInstance() { if (instance == null) { instance = new Settings1(); } return instance; } } 생성자를 private으로 만든 이유 : 외부에서 해당 인스턴스에 직접 접근을 막기 위해 getInstance(.. 2021. 11. 11.
Lotto - 3. 등수 매기기 LastWeekLotto public class LastWeekLotto { private final Lotto lastWeekLottoNum; private final int bonusNum; protected LastWeekLotto(List lastWeekLottoNum, int bonusNum) { this.lastWeekLottoNum = Lotto.createLotto(lastWeekLottoNum); this.bonusNum = bonusNum; } public static LastWeekLotto of(List lastWeekLottoNum, int bonusNum) { validateBonusNum(bonusNum); return new LastWeekLotto(lastWeekLottoN.. 2021. 11. 9.
Lotto - 2. Lottos (일급 컬렉션) / Shop Lottos public class Lottos { private final List lottos = new ArrayList(); private final int cost; public Lottos(int count, List manualLottoNums, int cost) { this.cost = cost; for (int i = 0; i < count; i++) { lottos.add(Lotto.createLotto()); } for (List manualLottoNum : manualLottoNums) { lottos.add(Lotto.createLotto(manualLottoNum)); } } public static Lottos createLottos(int count, int cost) { .. 2021. 11. 9.