전체 글
어뎁터 패턴
어댑터 패턴이란? 💡 서로 호환되지 않는 인터페이스를 가진 객체들이 상호작용할 수 있도록 두 객체 사이에서 호환을 해주는 구조를 만드는 것입니다. 어댑터 패턴을 어떤 경우에 사용할까? A 인터페이스를 사용하고 싶은데, A 타입의 데이터로만 작동한다. 하지만 나는 B 타입의 데이터를 입력받아 사용해야할 때 → 궁여지책으로 A 인터페이스를 내가 원하는 B타입으로 작동하도록 수정할 수도 있지만, 그렇게 한다면 A 인터페이스에 의존하는 코드들을 수정해줘야한다. 또한, A 쪽의 코드에 내가 접근하지 못하는 경우라면, 이 해결방식조차 이용할 수 없다. 어댑터 패턴을 사용한다면? 클라이언트 코드와 사용하고자하는 코드의 수정 없이 호환 가능한 구조를 만들 수 있다. → OCP 타입을 변환해주는 로직을 분리할 수 있다...
데코레이터 패턴
데코레이터 패턴이란? 객체에 책임을 동적으로 추가하는 패턴을 말합니다. 데코레이터 패턴을 주로 사용하는 상황 클래스의 요소들을 조금씩 수정해가면서 사용하는 경우 여러 요소들을 조합하여 구성하는 경우 예시 데코레이터 패턴을 설명하는 대표적인 예시로 커피가 있습니다. 아메리카노 = 에스프레소 + 물 카페라떼 = 에스프레소 + 우유 + 휘핑크림 이런식으로 다양한 재료들을 합쳐서 커피를 만들어야한다고 합시다. 만약, 재료들을 전부 다 클래스로 구현해준다면 굉장히 비효율적일 것입니다. 새롭게 커피를 개발하여 새로운 재료가 필요하다면, 그럴 때마다 새롭게 재료의 클래스를 만들어줘야하기 때문입니다. 이를 해결하기 위해 데코레이터 패턴을 적용해봅시다. public interface Ingredient { String ..
프록시 패턴
프록시 패턴이란? 프록시는 “대리”라는 의미를 가진다. 그렇다면 무엇을 대리하는 것일까? 실제 객체의 ‘존재’를 대신한다. 실제 객체로 접근하기 전에 일단 프록시 객체를 거쳐가게끔 하는 방식이다. 구현 방식 프록시 객체는 실제 객체와 완벽히 같은 인터페이스를 구현하여야 한다. 그래야 다형성을 통해 프록시 객체가 실제 객체의 존재를 대신할 수 있다. 일단 동작을 위해 실제 객체의 존재를 대신하여 프록시 객체를 생성하여 메모리 상에 올려 놓는다. 이때, 프록시 객체는 실제 객체의 참조값을 갖고 있다. 실제 객체에 대한 요청이 들어오면 그때, 요청을 받은 프록시 객체가 실제 객체를 생성한다. 실제 객체가 로직을 실행합니다. 한번 실제 객체가 생성이 되었다면, 프록시 객체는 생성되어있는 실제 객체를 호출해줍니다..
빈 스코프에 따른 생명 주기
singleton 디폴트 스코프로 컨테이너의 시작부터 끝까지 함께하는 빈이다. 컨테이너 생성-빈 생성-의존관계 주입-초기화 후 콜백-사용-소멸 전 콜백-종료 의 생명주기를 가진다. prototype 요청 시마다 새로운 빈을 생성하여 클라이언트에 반환한다. 스프링 컨테이너에서 빈 생성 후 의존관계 주입까지만 관리하고 그 이후 관리의 책임은 클라이언트가 갖는다. 컨테이너 생성-빈 생성-의존관계 주입-초기화 후 콜백까지만 스프링이 관리함. request http 요청마다 생성되어 http 요청과 같은 생명주기를 가짐 request 빈은 실제 http 요청이 올때까지는 존재하지 않는 빈이다. 스프링 컨테이너 생성 시점에는 request 빈이 존재하지 않기에 DI를 해주면 오류가 발생한다. 스프링에서는 Provi..
싱글톤 패턴이란?
싱글톤 패턴이란? 클래스의 인스턴스가 단 1개만 생성되는 것을 보장하는 것 인스턴스가 2개 이상이 되지 않도록 막아야하므로 생성자의 접근제어자를 private 로 지정하여 new 로 생성하지 못하게 해야한다. 그럼 싱글톤 패턴을 대체 왜 쓰는 걸까? 예를 들어, UserService 라는 클래스가 있다고 하고, 고객이 접근을 할 때 필수적으로 사용된다고 해보자. 1분에 100명의 고객이 접근한다면, 분당 100개의 UserService 객체가 생성되고 사라져 엄청난 자원 낭비가 일어난다. 이런 문제를 해결하기 위해 모든 고객들이 하나의 객체를 공유하면 좋겠다는 아이디어에서 나온 것! 기본적인 싱글톤 패턴의 구현 방식 class Singleton { // static 으로 딱 1개만 private stat..