Java
-
디자인 패턴 - 템플릿 콜백 패턴(Template Callback Pattern)Java 2022. 3. 21. 01:00
전략 패턴의 변형으로, 스프링의 DI에서 사용하는 특별한 형태의 전략 패턴. 전략을 익명 내부 클래스로 정의해서 사용. 전략 인터페이스 public interface Stragegy{ public abstract void runStrategy(); } 컨텍스트 # 컨텍스트 public class Soldier{ void runContext(Strategy strategy){ System.out.println("전투 시작"); strategy.runStrategy(); System.out.println("전투 종료"); } } 클라이언트 public class Client{ public static void main(String[] args){ Soldier rambo = new Soldier(); ram..
-
디자인 패턴 - 전략 패턴(Strategy Pattern)Java 2022. 3. 21. 00:38
전략 메서드를 가진 전략 객체 전략 객체를 사용하는 컨텍스트 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트 전략 인터페이스 public interface Stragegy{ public abstract void runStrategy(); } 전략1 # 전략1 public class StrategyGun implements Strategy{ @Override public void runStrategy(){ System.out.println("탕, 타당, 타다당"); } } 전략2 # 전략2 public class StrategySword implements Strategy{ @Override public void runStrategy(){ System.out.println("챙, 채쟁, 채쟁챙"); } ..
-
디자인 패턴 - 팩터리 메서드 패턴(Factory Method Pattern)Java 2022. 3. 18. 01:52
팩터리 메서드는 객체를 생성 반환하는 메서드를 말한다. 여기서 패턴이 붙으면 하위 클래스에서 팩터리 메서드를 오버라이딩해서 객체를 반환하게 하는 것을 의미한다. public abstract class Animal{ // 추상 팩터리 메서드 abstract AnimalToy getToy(); } // 팩터리 메서드가 생성할 객체의 상위 클래스 public abstract class AnimalToy { abstract void identify(); } public class Dog extends Animal{ // 추상 팩터리 메서드 오버라이딩 @Override AnimalToy getToy(){ return new DogToy(); } } public class DogToy extends AnimalTo..
-
디자인 패턴 - 템플릿 메서드 패턴(Template Method Pattern)Java 2022. 3. 18. 00:15
public class Dog{ public void playWithOwner(){ System.out.println("이리와~"); System.out.println("멍! 멍!!"); System.out.println("꼬리 살랑살랑~"); System.out.println("잘했어"); } } public class Cat{ public void playWithOwner(){ System.out.println("이리와~"); System.out.println("야옹.."); System.out.println("꼬리 살랑살랑~"); System.out.println("잘했어"); } } 객체지향 설계를 하면 public abstract class Animal{ public void playWithOw..
-
디자인 패턴 - 싱글턴 패턴(Singleton Pattern)Java 2022. 3. 17. 23:55
인스턴스를 하나만 만들어 사용하기 위한 패턴. new를 실행할 수 없도록 private 접근 제어자 지정 유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요. 유일한 단일 객체를 참조할 정적 참조 변수가 필요. public class Singleton{ static Singleton singletonObject; // 정적 참조 변수 private Singleton(){}; // private 생성자 // 객체 반환 정적 메서드 public static Singleton getInstance(){ if(singletonObject == null){ singletonObject = new Singleton(); } return singletonObject; } } 핵심 private 생성자를 가짐 단일..
-
디자인 패턴 - 데코레이터 패턴(Decorator Pattern)Java 2022. 3. 17. 23:48
장식자. 프록시 패턴은 클라이언트가 최종적으로 돌려받는 반환값을 조작하지 않고 그대로 전달하는 반면, 데코레이터 패턴은 클라이언트가 받는 반환값에 장식을 덧입힌다. 데코레이터 패턴이 적용되지 않을 때 public interface IService{ public abstract String runSomething(); } public class Service implements IService{ public String runSomething(){ return "서비스 짱!!"; } } public class Client{ public static void main(String[] args){ IService service = new Service(); System.out.println(service.ru..
-
디자인 패턴 - 프록시 패턴(Proxy Pattern)Java 2022. 3. 16. 21:38
대리자, 대변인 프록시 패턴을 사용하지 않을 때 public class Service{ public String runSomething(){ return "서비스"; } } public class ClientWithNoProxy{ public static void main(String[] args){ Service service = new Service(); System.out.println(service.runSomething()); } } 직접 Service 객체를 생성하고 메서드를 수행. 프록시 패턴 사용 public interface IBrowser{ show(); } public class Html{ private String url; public Html(String url){ this.url..
-
디자인 패턴 - 어댑터 패턴(Adpater Pattern)Java 2022. 3. 16. 15:16
ODBC/JDBC 같은 공통 인터페이스에 적용되어 있는 패턴 다양한 데이터베이스 시스템을 단일한 인터페이스로 조작할 수 있게 해줌. 어댑터 패턴을 사용하지 않을 때 public class ServiceA{ void runServiceA(){ System.out.println("ServiceA"); } } public class ServiceB{ void runServiceB(){ System.out.println("ServiceB"); } } public class ClientWithNoAdapter{ public static void main(String[] args){ ServiceA sa1 = new ServiceA(); ServiceB sa2 = new ServiceB(); sa1.runServi..