스프링 입문을 위한 자바 객체 지향의 원리와 이해 - Chapter 06. 스프링이 사랑한 디자인 패턴

김광현·2023년 1월 5일
0

이번 챕터에서는 스프링에서 유용하게 쓰이는 디자인 패턴에 대해 알아보겠습니다.

디자인 패턴 (Design Pattern)

디자인 패턴이란?

비즈니스 요구사항을 프로그래밍으로 처리하면서 만들어진 다양한 해결책 중에서 많은 사람들이 인정한 베스트 프랙티스를 정리한 것입니다.

어댑터 패턴 (Adapter Pattern)

어댑터 패턴이란?

ㆍ한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환시키는 패턴입니다.
ㆍAdapter Pattern 은 OCP ( Open Closed Principle ) 를 활용한 설계 패턴입니다.

장점은?

호환성 문제로 같이 쓸 수 없는 클래스들을 연결해서 사용할수있습니다.

요약

호출당하는 쪽의 메서드를 호출하는 쪽의 코드에 대응하도록 중간에 변환기를 통해 호출하는 패턴


프록시 패턴 (Proxy Pattern)

프록시 패턴이란?

어떤 객체를 사용할 때 객체를 직접적으로 참조하는 것이 아닌 해당 객체를 대리하는 객체를 통해서 대상 객체에 접근하는 방식입니다.

주의할점

ㆍ대리자는 실제 서비스와 같은 이름의메서드를 구현해야함 이때 인터페이스를 사용
ㆍ대리자는 실제 서비스에 대한 참조 변수를 갖는다.(합성)
ㆍ대리자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고 그 값을 클라이언트에게 돌려줌
ㆍ대리자는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행할 수도 있음

요약

제어 흐름을 조정하기 위한 목적으로 중간에 대리자를 두는 패턴


데코레이터 패턴 (Decorator Pattern)

데코레이터 패턴이란?

객체의 결합 을 통해 기능을 동적으로 유연하게 확장 할 수 있게 해주는 패턴입니다.

추가로 설명하면 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우에 각 추가 기능을 데코레이터 클래스로 정의 한 후 필요한 데코레이터 객체를 조합함으로써 추가 기능의 조합을 설계 하는 방식입니다.

주의할점

ㆍ장식자는 실제 서비스와 같은 이름의메서드를 구현해야함 이때 인터페이스를 사용
ㆍ장식자는 실제 서비스에 대한 참조 변수를 갖는다.(합성)
ㆍ장식자는 실제 서비스의 같은 이름을 가진 메서드를 호출하고 그 값에 장식을 더해 클라이언트에게 돌려줌
ㆍ장식자는 실제 서비스의 메서드 호출 전후에 별도의 로직을 수행할 수도 있음

요약

메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴


싱글톤 패턴 (Singleton Pattern)

싱글톤 패턴이란?

객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미합니다.

장점은?

ㆍ메모리 측면에 있어 낭비를 방지할 수 있고 이미 생성된 인스턴스를 사용하여 속도 측면에서도 좋습니다.
ㆍ데이터 공유가 쉽습니다.

특징은?

ㆍprivate 생성자를 갖는다.
ㆍ단일 객체 참조 변수를 정적 속성으로 갖는다.
ㆍ단일 객체 참조 변수가 참조하는 단일 객체를 반환하는 getInstance() 정적 메서드를 갖는다.
ㆍ단일 객체는 쓰기 가능한 속성을 갖지 않는 것이 정석이다.

요약

클래스의 인스턴스, 즉 객체를 하나만 만들어 사용하는 패턴


템플릿 메서드 패턴 (Template Method Pattern)

템플릿 메서드 패턴이란?

알고리즘의 골격만 정의하고 각 단계에 대한 구체적인 처리는 서브클래스에게 위임하는 패턴입니다.

장점은?

ㆍ중복코드를 줄일 수 있습니다.
ㆍ자식 클래스의 역할을 줄여 핵심 로직의 관리가 용이합니다.
ㆍ코드를 좀더 객체지향적으로 구성할 수 있습니다.

요약

상위 클래스의 견본 메서드에서 하위 클래스가 오버라이딩한 메서드를 호출하는 패턴


팩토리 메서드 패턴 (Factory Method Pattern)

팩토리 메서드 패턴이란?

'공장' 즉 객체를 생산하는 패턴이자 객체를 만들어 내는 부분을 서브 클래스에 위임하는 패턴이라고 할 수 있습니다.

특징은?

객체 생성을 처리하며, 팩토리 메소드를 이용하면 객체를 생성하는 작업을 서브클래스에 캡슐화시킬 수 있습니다.
이 행위의 기대값으로 슈퍼클래스에 있는 클라이언트 코드와 서브클래스에 있는 객체 생성 코드를 분리시킬 수 있습니다.

요약

오버라이드된 메서드가 객체를 반환하는 패턴


전략 패턴 (Strategy Pattern)

전략 패턴이란?

비슷한 동작을 하지만 다르게 구현되어 있는 행위(전략)들을 공통의 인터페이스를 구현하는 각각의 클래스로 구현하고, 동적으로 바꿀 수 있도록 하는 패턴입니다.

필수 요소는?

ㆍ전략 메서드를 가진 전략 객체
ㆍ전략 객체를 사용하는 컨텍스트(전략 객체의 사용자/소비자)
ㆍ전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제3자, 전략 객체의 공급자)

장점은?

ㆍ추가되는 요구사항에 대처가 유연합니다.
ㆍ요구사항의 구현체가 컨텍스트와 분리되기에 알고리즘에만 집중할 수 있습니다.
ㆍ객체의 전략이 분리되어있기에 전략이 필요한 곳에서 재사용이 가능합니다.

요약

클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴


템플릿 콜백 패턴 (Template Callback Pattern - 견본/회신 패턴)

템플릿 콜백 패턴이란?

탬플릿 콜백 패턴은 전략 패턴의 변형으로 스프링 3대 프로그래밍 모델 중 하나인 DI (Dependency injection) 의존성 주입에서 사용하는 특별한 전략 패턴입니다.

전략 패턴과 다른점은?

전략을 익명 내부 클래스로 정의해서 사용한다는 차이점이 있습니다.
이 점은 추가로 공부해두면 좋습니다.

요약

전략을 익명 내부 클래스로 구현한 전략 패턴


느낀점 및 알게된점

앞으로 개발하면서 머릿속에 익혀야할 디자인 패턴들에 대해 정리해봤습니다.
MVC말고도 많은 패턴이 있다는 것을 알게되었고 물론 한번보고 바로 써먹지는 못하겠지만 수시로 사용하면서
손에 익히면 여러모로 도움이 많이 될 것 같습니다.

해당 내용은 스프링 입문을 위한 자바 객체 지향의 원리와 이해를 참고하여 작성되었습니다.

profile
대림대학교 컴퓨터정보학부

0개의 댓글