목록개발서적 (12)
SW
1. 복합 패턴복합 패턴 = 여러 패턴을 함께 사용해서 다양한 문제를 해결하는 패턴 = 패턴으로 이루어진 패턴 오리 시뮬레이션 게임을 처음부터 다시 만들면서 몇 가지 기능을 추가해 봅시다.이 과정에서 하나의 문제를 해결할 때 여러 패턴이 어떻게 공존하고 협력하는지 볼 수 있습니다.1. Quackable 인터페이스 정의public interface Quackable { public void quack();}Quackable 인터페이스는 quack() 메서드를 선언합니다. 이 메서드는 오리가 소리를 낼 때 사용됩니다.2. Quackable 구현 클래스들public class MallardDuck implements Quackable { public void quack() { Syste..
1. 모니터링 코드 만들기CEO는 원격에 있는 모든 뽑기 기계를 모니터링 하기를 원합니다. 뽑기 기계 코드의 알맹이의 개수를 알려주는 메소드와 기계의 현재 상태를 알려주는 메소드는 현재 존재합니다.여기서, 모든 뽑기 기계의 재고와 현재 상태를 알려 주는 기능을 추가하려고 합니다.우선 GumballMachine 클래스에 뽑기 기계의 현재 위치를 알려 주는 기능을 추가해봅니다.public class GumballMachine { String location; // 기계의 위치 int count; // 알맹이의 개수 String state; // 기계의 현재 상태 // 생성자: 기계의 위치와 재고를 초기화 public GumballMachine(Strin..
1. 뽑기 기계 예시뽑기 기계 회사는 최근 기술 발달에 맞춰 뽑기 기계에 CPU를 탑재하여 매출을 늘리고, 네트워크 연결을 통해 재고 관리 및 고객 만족도 집계를 하려는 목표를 가지고 있습니다.아래 그림처럼 뽑기 기계를 제어할 수 있는 코드를 요청받았습니다. 1. 상태 정의 및 상태 변수 설정// 상태 정의final static int SOLD_OUT = 0; // 매진 상태final static int NO_QUARTER = 1; // 동전 없음 상태final static int HAS_QUARTER = 2; // 동전 있음 상태final static int SOLD = 3; // 알맹이 판매 상태// 현재 상태를 저장하는 변수int state = SOLD_OUT; // 처음에는 매진 ..
1. 객체 마을 식당과 팬케이스 하우스 합병팬케이스 하우스에서 파는 아침 메뉴, 객체마을 식당에서 파는 점심 메뉴를 한 곳에서 먹을 수 있게 되었습니다만, 문제가 생겼습니다.아침, 점심에 각각 다른 메뉴를 써야합니다. 일단 MenuItem 클래스의 구현 방법은 합의했습니다.public class MenuItem { String name; // 메뉴 이름 String description; // 메뉴 설명 boolean vegetarian; // 채식주의 여부 double price; // 가격 // 생성자: 메뉴 아이템의 속성을 초기화 public MenuItem(String name, String description, boo..
템플릿 메소드템플릿 메소드는 알고리즘의 각 단계를 정의하며, 서브클래스에서 일부 단계를 구현할 수 있도록 유도합니다. 추상 클래스 - CaffeineBeverageabstract class CaffeineBeverage { // 템플릿 메서드 final void prepareRecipe() { boilWater(); brew(); pourInCup(); if (customerWantsCondiments()) { addCondiments(); } } abstract void brew(); abstract void addCondiments(); void boilWater() { Sy..
1. 객체지향 어댑터어댑터는 클라이언트로부터 요청을 받아서 새로운 업체에서 제공하는 클래스를 클라이언트가 받아들일 수 있는 형태의 요청으로 변환해주는 중개인 역할을 합니다.Duck과 Turkey 예시를 보겠습니다.public interface Duck { void quack(); void fly();}public interface Turkey { void gobble(); void fly();}public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } @Override public voi..
1. 커맨드 패턴 소개커맨드 패턴은 요청을 객체로 캡슐화하여 서로 다른 요청을 매개변수화하거나, 요청의 취소 및 재실행 등을 가능하게 하는 디자인 패턴입니다. 이 패턴을 사용하면 요청을 처리하는 객체(Receiver)와 요청을 발행하는 객체(Client)를 분리할 수 있습니다.처음에 말만 들어서는 이해가 잘 안가니 아래 내용을 따라가 보겠습니다. 객체 마을 식당 예시고객: 요청을 발행하는 역할 (커맨드 객체를 생성).종업원: 커맨드 객체를 전달하는 역할.주방장: 커맨드 객체에 따라 실제로 작업을 수행하는 역할. 주문서 (Command 객체):역할: 주문서 객체는 주문 내용을 캡슐화합니다. 이는 요청을 특정한 형식으로 묶어서 다른 객체에게 전달할 수 있도록 하는 역할을 합니다.특징: 주문서에는 orderU..
1. 싱글턴 패턴 vs 전역 변수전역 변수의 단점은 애플리케이션 시작 시 객체가 생성되어 자원을 낭비할 수 있다는 것입니다.예를 들어, 전역 변수에 자원을 많이 차지하는 객체를 대입했지만, 애플리케이션 종료까지 사용되지 않는다면 쓸모없는 자원 낭비가 됩니다. 이를 방지하기 위해 싱글턴 패턴을 사용하면 필요할 때만 객체를 생성할 수 있습니다.2. 고전적인 싱글턴 패턴 구현법클래스 내에서 자신의 유일한 인스턴스를 정적 변수로 보유클래스 내부에 static 변수를 사용하여 자신의 인스턴스를 저장합니다.생성자를 private으로 설정외부에서 객체를 생성하지 못하도록 생성자를 private으로 선언합니다.이렇게 하면 클래스 외부에서는 새로운 인스턴스를 만들 수 없습니다.유일한 인스턴스에 접근할 수 있는 정적 메서..
1. 최첨단 피자 코드 만들기피자 종류를 고르고 그에 맞는 피자를 만드는 코드를 작성해야 합니다. 초기 코드public class PizzaStore { public Pizza orderPizza(String type) { Pizza pizza = null; if (type.equals("cheese")) { pizza = new CheesePizza(); } else if (type.equals("greek")) { pizza = new GreekPizza(); } else if (type.equals("pepperoni")) { pizza = new PepperoniPizza(); ..
1. 초대형 커피 전문점, 스타버즈현재는 매우 많은 스타버즈 매장이 존재합니다.하지만 워낙 빠르게 성장하다보니 다양한 음료를 모두 포괄하는 주문 시스템을 갖추지 못했습니다.초기 주문 시스템 클래스는 아래와 같았습니다. Beverage는 음료를 나타내는 추상 클래스이며, 모든 음료는 Beverage 클래스의 서브클래스가 됩니다.모든 서브클래스는 가격을 리턴하는 cost() 메소드를 구현해야 합니다. // Beverage.javapublic abstract class Beverage { String description = "Unknown Beverage"; public String getDescription() { return description; } public ab..