Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 알고리즘
- 컴퓨터 네트워크
- 재귀
- 백준
- github action
- CI/CD
- BFS
- 자료구조
- 순열
- 그리드 알고리즘
- AWS
- dfs
- HTTP
- Spring
- 그리드
- SQL
- 역방향 반복자
- 분할 정복
- 도커
- GIT
- TCP
- 이분탐색
- 분할정복
- 브루트포스
- 트리
- 스프링
- 다이나믹 프로그래밍
- 그래프
- 다이나믹프로그래밍
- 자바
Archives
- Today
- Total
코딩성장스토리
스프링 이해를 위한 디자인 패턴 본문
어댑터 패턴(Adapter Pattern)
변환기 , 즉 서로 다른 두 인터페이스 사이에 통신이 가능하게 하는 것
호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴
ex) 두 클래스 메서드가 같은 기능을 할때 이를 어댑터를 이용해서 같은 메서드 호출로 다른 객체 메서드를 부르게함
public class AdapterServiceA{
ServiceA sa1=new ServiceA();
void run(){
sa1.runA;
}
}
public class AdapterServiceB{
ServiceB sa1=new ServiceB();
void run(){
sa1.runB;
}
}
public class AdapterClient{
AdapterServiceA asa1= new AdapterServiceA();
AdapterServiceB asb1= new AdapterServiceB();
asa1.run();
asb1.run(); //동일한 메서드 명으로 두 객체의 메서드 호출
}
프록시 패턴(Proxy Pattern)
제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴
- 대리자는 실제 서비스와 같은 이름의 메서드를 구현, 이때 인터페이스 사용
- 대리자는 실제 서비스에 대한 참조변수를 갖는다.
- 대리자는 실제 서비스와 같은 이름을 가진 메서드를 호출하고 그 값을 클라이언트에게 돌려준다.
- 대리자는 실제 서비스의 메서드 호출 전후에 별도의 로직 수행 가능
public interface IService{
String runSomething();
}
public class Service implements Iservice{
public String run(){
return "서비스 짱!!"
}
}
public class Proxy implements Iservice{
IService service1;
public String run(){
System.out.println("호출에 대한 제어 흐름 주목적 반환 결과는 그대로);
service1=new Service();
return service1.run();
}
}
데코레이터 패턴(Decorator Pattern)
원본에 장식을 더하는 패턴, 프록시 패턴이랑 동일하나 반환값을 조작해서 반환함.즉 장식을 덧입한다.
public interface IService{
String runSomething();
}
public class Service implements Iservice{
public String run(){
return "서비스 짱!!"
}
}
public class Proxy implements Iservice{
IService service1;
public String run(){
System.out.println("호출에 대한 제어 흐름 주목적 반환 결과는 그대로);
service1=new Service();
return "정말" + service1.run();
}
}
싱글턴 패턴(Singleton)
인스턴스를 하나만 만들어 사용하기 위한 패턴
- new를 실행할 수 없도록 생성자에 private 접근 제어자를 지정한다.
- 유일한 단일 객체를 반환할 수 있는 정적 메서드가 필요하다
- 유일한 단일 객체를 참조할 정적 참조 변수가 필요
public class Singleton{
static Singleton singletonObject;
private Singleton(){};
public static Singleton getInstance(){
if(SingletonObject == null){
singletonObject = new Singleton();
}
return singletonObject;
]
템플릿 메서드 패턴(Template Method pattern)
상위 클래스의 견본 메서드에서 하위 클래스가 오버라이딩한 메서드를 호출하는 패턴
public abstract class Animal{
//템플릿 메서드
public void platWithOwner(){
System.out.println("come");
play();
runSomething();
System.out.println("good);
}
// 추상 메서드
abstract void play();
//훅(hook) 메서드
void runSomething(){
System.out.println("꼬리 살랑살랑");
}
}
팩터리 메서드 패턴(Factory Method Pattern)
객체를 생성 반환하는 메서드
오버라이드된 메서드가 객체를 반환하는 패턴
public abstract class Animal(){
//추상 팩터리 메서드
abstract AnimalToy getToy();
}
//팩터리 메서드가 생성할 객체의 상위 클래스
public abstract class AnimalToy{
abstract void identift()'
}
public class Dog extends Animal{
//추상 팩터리 메서드 오버라이딩
@Override
AnimalToy getToy(){
return new DogToy();
}
}
전략 패턴(Strategy Pattern)
클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴
템플릿 메서드 패턴과 유사 차이는 객체 주입이나 상속이냐 임
public interface Strategy{
public abstract void runStrategy();
}
//전략
public class StrategyGun implements Strategy{
@Override
public void runStrategy(){
System.out.println("탕")";
}
}
//전략
public class StrategyBow implements Strategy{
@Override
public void runStrategy(){
System.out.println("슝")";
}
}
//컨텍스트
public class Soilder{
void runContext(Strategy strategy){
System.out.pringtln("start");
strategy.runStrategy();
System.out.pringtln("finish");
}
}
템플릿 콜백 패턴(Template Callback Pattern)
전략 패턴이랑 동일하나 이것은 전략을 익명 내부 클래스로 정의
public class Soilder{
void runContext(Strategy strategy){
System.out.pringtln("start");
strategy.runStrategy();
System.out.pringtln("finish");
}
private Strategy executeWeapon(final String weaponSound){
return new Strategy(){
@Override
public void runStrategy(){
System.out.println("weaponSound")
}
};
}
}
'백 엔드 > spring' 카테고리의 다른 글
스프링 타임리프 스프링 통합기능 (0) | 2022.05.06 |
---|---|
spring 타임리프 기본기능 (0) | 2022.05.05 |
스프링 토이 프로젝트 진행중에 배운것 (0) | 2022.03.14 |
스프링 빈 스코프 (0) | 2022.02.20 |
스프링 의존관계 자동 주입 (0) | 2022.02.17 |