본문 바로가기

전체 글

디자인 패턴 - 컴포지트 패턴(Composite Pattern) 1. 정의 객체를 트리구조로 구성해서 부분-전체 계층구조를 구현한다. 클라이언트에서 개별 객체와 복합 객체를 일관된 방법으로 다룰 수 있다. 💡 개별 객체는 리프 노드를 의미하고, 복합 객체는 일반 노드를 의미한다. 2. 예시 식당 메뉴를 계층구조로 만든다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ MenuComponent breakfast = new Menu("아침 메뉴", "08:00~11:00"); MenuComponent lunch = new Menu("점심 메뉴", "12:00~17:00"); MenuComponent dinner = new Menu("저녁 메뉴", "18:00~23.. 더보기
디자인 패턴 - 반복자 패턴(Iterator Pattern) 1. 정의 컬렉션의 구현 방법을 노출하지 않으면서 집합체 내의 모든 항목에 접근하는 방법을 제공한다. 2. 예시 식당의 점심 메뉴는 리스트에 저장되어 있고, 저녁 메뉴는 배열에 저장되어 있다. 같은 방법으로 점심 및 저녁 메뉴를 가져온다. 3. 그림 4. 클래스 다이어그램 5. 코드 import java.util.Arrays; import java.util.Iterator; public class Client { public static void main(String[] args){ System.out.println("[직접 만든 반복자 패턴]"); LunchMenu lunchMenu = new LunchMenu(); MenuIterator lunchIterator = lunchMenu.createIte.. 더보기
백준 - 19542 전단지 돌리기(Java) dfs 문제입니다. 트리 형태의 맵에서 전단지를 돌렸을 때, 최소로 방문하게 되는 길의 거리를 구하는 문제입니다. 단, 주의 해야할 점이 있습니다. 이 문구를 해석하면 다음과 같습니다. 리프 노드에서 거리가 D인 거리 까지만 탐색하면된다. 위 그림에 의하면 리프노드인 4번과 6번에서 거리가 1인 2번과 5번 까지만 탐색을 하면 되는 것입니다. 단, 5번 노드를 갈 때 2번 노드를 거치기 때문에 이를 중복해서 계산하지 않게 합니다. [구현 코드] import java.io.*; import java.util.*; import java.util.stream.Collectors; public class Main { private static List graph; private static int n, s, d.. 더보기
디자인 패턴 - 템플릿 메소드 패턴(Template Method Pattern) 1. 정의 알고리즘의 골격을 정의한다. 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의 할 수 있다. 2. 예시 커피와 홍차를 만든다.(둘의 제작 과정은 비슷하다.) 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ CaffeineBeverage tea = new Tea(); tea.prepareRecipe(); System.out.println("------"); CaffeineBeverage coffee = new Coffee(); coffee.prepareRecipe(); } } /* 출력 물을 끓인다. 찻잎.. 더보기
디자인 패턴 - 퍼사드 패턴(Facade Pattern) 1. 정의 서브시스템에 있는 일련의 인터페이스를 통합 인터페이스로 묶는다. 💡 고수준의 인터페이스를 정의하므로 서브시스템을 편리하게 사용할 수 있다. 2. 예시 영화를 보기위한 일련의 과정(팝콘, 조명, 스크린, 음량, …)을 하나의 과정으로 통합한다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ TheaterFade theaterFade = new TheaterFade( new Popcorn(), new Light(), new Screen(), new Amplifier() ); theaterFade.watchMovie(); } } public class TheaterFade { Popcorn .. 더보기
디자인 패턴 - 어댑터 패턴(Adapter Pattern) 1. 정의 특정 클래스 인터페이스를 클라이언트에서 요구하는 다른 인터페이스로 변환한다. 타깃을 구현하여 인터페이스가 호환되지 않아 같이 쓸 수 없었던 클래스를 사용할 수 있게 한다. 2. 예시 어댑터를 사용하여 오리에게 “꽥”소리가 아닌 “골골”소리를 내게 한다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args){ Duck mallard = new MallardDuck(); mallard.quack(); Turkey turkey = new WildTurkey(); Duck duck = new TurkeyAdapter(turkey); duck.quack(); } } /* 출력 꽥 골골 */ public .. 더보기
디자인 패턴 - 커맨드 패턴(Command Pattern) 1. 정의 요청 내역을 객체로 캡슐화해서 객체를 서로 다른 요청 내역에 따라 매개변수화 한다. 💡 요청을 큐에 저장하거나 로그로 기록하거나 작업 취소 기능을 사용할 수 있다. 2. 예시 리모컨 각 버튼에 요청을 저장하여 버튼에 맞게 동작을 실행한다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { static Command lightOnCommand; static Command lightOffCommand; static Command doorOnCommand; static Command doorOffCommand; static RemoteControllerInvoker invoker; public static void main(String[] args){ initSet.. 더보기
디자인 패턴 - 싱글톤 패턴(Singleton Pattern) 1. 정의 클래스 인스턴스를 하나만 만들고, 메소드를 통한 인스턴스의 전역 접근을 제공한다. 2. 예시 두 개의 주소가 같은지 확인한다. 3. 그림 4. 클래스 다이어그램 5. 코드 public class Client { public static void main(String[] args) { Singleton singleton1 = Singleton.getInstance(); Singleton singleton2 = Singleton.getInstance(); isSingleton(singleton1, singleton2); singleton2 = new Singleton(); isSingleton(singleton1, singleton2); } private static boolean isSingle.. 더보기