스프링 (24) 썸네일형 리스트형 [Spring] 디자인 패턴 - 데코레이터 패턴 예시 참고 1. 스프링-핵심-원리-고급편, 김영한 참고 2. 위키백과 데코레이터 패턴의 전체적인 틀은 프록시 패턴과 동일하다. 1. Component 인터페이스 실제 객체와 부가 기능 추가를 위한 데코레이터의 인터페이스를 정의한다. public interface Component { String operation(); } 2. 실제 서버에 대한 객체 실제 서버에 대한 객체를 정의한다. @Slf4j public class RealComponent implements Component{ @Override public String operation() { log.info("RealComponent 실행"); return "data"; } } 3. Decorator 정의 위 실제 서버를 주입받고, 해당 서버에 추가할.. [Spring] 디자인 패턴 - 프록시 패턴(데코레이터 패턴) 참고 1. 스프링-핵심-원리-고급편, 김영한 참고 2. 위키백과 프록시 패턴 프록시는 클라이언트의 요청을 클라이언트 대신 서버로 전달하는 역할을 한다. 즉, 프록시 패턴이란 클라이언트에서 서버로의 직접 요청이 아닌, 클라이언트에서 서버로의 간접 요청을 하도록 중간에 프록시를 두는 방법을 말한다. 프록시 패턴의 이점 중간에 프록시를 둘 경우, 프록시에서 아래와 같은 여러가지 일들을 처리할 수 있다. 접근 제어(프록시 패턴) 권한에 따른 접근 차단 캐싱 (캐시 서버도 프록시 서버 중 하나) 지연 로딩 부가 기능 (데코레이터 패턴) 프록시 객체 조건 클라이언트는 요청이 프록시로 간건지, 서버로 간건지 몰라야 한다. 즉 서버와 프록시는 같은 인터페이스를 사용해야 한다.또한 클라이언트가 사용하는 서버 객체를 프록.. [Spring] 디자인 패턴 - 템플릿 콜백 패턴 참고 1. 스프링-핵심-원리-고급편, 김영한 참고 2. 위키백과 콜백 콜백(함수)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행 혹은 나중에 실행할 수 있다. 이전 글의 전략 패턴에서 Context의 execute를 실행하면, strategy의 call이 실행됐다. 여기서, strategy는 Context 뒤에서 동작하므로, strategy는 콜백에 해당한다. *스프링 내부에서 자주 보이는 패턴으로, GOF 패턴은 아님. *스프링에서 "~Template" 형식의 템플릿들은 템플릿 콜백 패턴으로 만들어져 있음. 예시 1. callback 인터페이스 정의 public interface CallBack { void call(); } 2. .. [Spring] 디자인 패턴 - 전략 패턴 개선하기 참고 1. 스프링-핵심-원리-고급편, 김영한 이전 전략 패턴은 아래와 같이 새로운 Strategy마다 Context를 새로 생성해야 했다. Strategy strategy1 = new Strategy(); Context context1 = new Context(strategy1);//Context1 생성 context1.execute(); Strategy strategy2 = new Strategy(); Context context2 = new Context(strategy2);//Context2 생성 context2.execute(); 이번에는 Context의 Strategy를 생성자 주입이 아닌 파라미터로 주입받는 방법으로 개선해보자. 이렇게 파라미터 방식으로 주입받을 경우 각 Strategy마다 새.. [Spring] 디자인 패턴 - 전략 패턴 참고 1. 스프링-핵심-원리-고급편, 김영한 전략 패턴, Strategy Pattern 변하지 않는 부분을 "Context"에 두고, 변하는 부분을 "Strategy"라는 인터페이스에 둔다. 그리고, Context는 Stragtegy라는 인터페이스에만 의존한다. 이렇게 되면, 이후 새로운 Strategy를 변경하거나 생성할 때, Context에는 영향이 가지 않는다. 이러한 전략은 스프링의 의존관계 주입(DI)에서 사용하는 전략이다. Context : 변하지 않는 템플릿 역할 Strategy : 변하는 알고리즘 역할 템플릿 메서드 vs 전략 패턴 템플릿 메서드는 부모 클래스에 변하지 않는 템플릿과 변하는 추상 메서드를 두어 관리한다. 하지만, 전략 패턴은 변하지 않는 부분을 Context에 두고, 변하는.. [Spring] 디자인 패턴 - 템플릿 메서드 패턴 참고 1. 스프링-핵심-원리-고급편, 김영한 템플릿 메서드 패턴 프로젝트에서 중복된 코드들을 개선하기 위한 패턴이다. 각 코드에서 변하는 부분(중복되지 않는 부분)과 변하지 않는 부분(중복되는 부분)을 파악 후 변하지 않는 부분을 템플릿(추상 클래스)에 몰아 넣고 변하는 부분은 오버라이딩하는 디자인 패턴이다. 예시 1. 아래와 같이 처음과 끝에 "Hello Start"와 "Hello End"를 고정적으로 출력해주는 클래스들이 있다. public class ex1 { System.out.println("Hello Start"); //중복 System.out.Println("this is ex1"); System.out.println("Hello End"); //중복 } public class ex2 { S.. [Spring] 동시성 문제 - ThreadLocal로 개선 참고 1. 스프링-핵심-원리-고급편, 김영한 동시성 문제 여러 쓰레드가 동시에 같은 인스턴스의 필드 값을 변경하면서 발생하는 문제 동시성 문제가 발생하는 상황 지역 변수에서는 발생하지 않음. (지역 변수는 쓰레드마다 각각 다른 메모리 영역이 할당) 인스턴스의 필드, static 같은 공용 필드에 접근할 때 발생 주로 싱글톤에서 자주 발생 쓰레드 로컬, Thread Local 해당하는 쓰레드만 접근할 수 있는 특별한 저장소이다. 만약, "A" 쓰레드와 "B" 쓰레드가 있다면, A와 B 각각의 전용 저장소가 만들어 진다. 이후, A와 B가 데이터를 변경할 경우, 쓰레드 로컬이 각각의 전용 저장소에 연결해준다. 이를 통해 동시성 문제를 해결할 수 있다. 예시 동시성 문제가 발생하는 변수를 ThreadLocal.. [Spring]IoC(Inversion of Control)와 DI 참고: 김영한, 스프링 핵심 원리, https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8 IoC, Inversion of Control, 제어의 역전 프로그램의 제어를 직접 제어하는 것이 아닌 외부에서 관리하는 것을 말한다. IoC를 적용하지 않은 기존의 프로그램들은 구현체가 필요한 객체들을 직접 생성, 연결, 실행한다. 즉, 구현체가 제어의 흐름을 관제한다. 하지만 IoC 개념이 적용된 프로그램에서 제어의 흐름은 다른 객체(혹은 프레임워크)가 관제한다. 각 객체들은 내부의 필요한 구현체들이 어떤 구현.. 이전 1 2 3 다음