Spring/스프링입문을 위한 자바객체지향의 원리와 이해 37

템플릿 콜백 패턴(Template Callback Pattern)

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 전략 패턴 (Strategy Pattern)핵심 정의클라이언트가 전략을 생성해서 전략을 실행할 컨텍스트에 주입하는 패턴구성 요소 3가지전략 객체: 전략 메서드를 가진 객체 (ex. 총 전략, 칼 전략, 활 전략)컨텍스트: 전략 객체를 사용하는 객체 (ex. Soldier – 전투 시작/종료하고 전략 실행)클라이언트: 전략을 생성하고 컨텍스트에 주입하는 객체 (ex. main 메서드가 있는 Client 클래스) 코드 흐름 설명전략 인터페이스 (Strategy.java)public interface Strategy { public abstract void runStrategy();}전략 구현 클래스들StrategyGun..

전략 패턴(Strategy Pattern)

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 전략 패턴(Strategy Pattern)이란?전략 패턴은 알고리즘(전략)을 캡슐화하여 동적으로 교체할 수 있게 하는 디자인 패턴입니다. 핵심은 다음 문장으로 요약됩니다:“클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴”전략(Strategy)은 실행되는 알고리즘이고, 컨텍스트(Context)는 이 전략을 사용하는 객체이며, 전략을 공급하는 클라이언트(Client)가 존재합니다. 구성 요소Strategy (전략)실행 알고리즘(무기 종류 등)을 캡슐화한 인터페이스ConcreteStrategy실제 전략 구현 클래스 (총, 칼, 활 등)Context전략을 사용하는 객체 (군인, 병사 등)Client전략을 생성하..

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

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 팩터리 메서드 패턴이란?팩터리 메서드 패턴은 객체 생성을 서브 클래스에게 위임하는 생성 패턴입니다.팩터리(factory)는 '공장', 즉 객체를 생성하는 역할을 합니다.어떤 객체를 만들지는 상위 클래스에서 결정하지 않고, 하위 클래스가 결정합니다.즉, "객체 생성 코드를 하위 클래스가 구현하도록 강제"함으로써 상위 클래스는 어떤 객체가 생성되는지 알 필요가 없습니다.이 패턴은 주로 다음 상황에 사용됩니다:생성할 객체의 타입을 나중에 결정해야 할 때객체 생성 코드를 캡슐화해서 재사용성과 확장성을 높이고 싶을 때클라이언트가 구체적인 클래스 이름을 몰라도 되게 하고 싶을 때 코드 분석: 팩터리 메서드 패턴 구조추상 클래스 An..

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

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 템플릿 메서드 패턴이란?“상위 클래스의 템플릿 메서드에서 하위 클래스가 오버라이딩한 메서드를 호출하는 패턴”공통 로직은 상위 클래스에 작성하고,변해야 할 부분만 하위 클래스에서 오버라이딩합니다.코드 중복을 제거하고 일관된 처리 흐름을 보장하며,DIP(의존 역전 원칙)를 적용할 수 있게 해 줍니다. 기존 코드의 문제점Dog.javapublic class Dog { public void playWithOwner() { System.out.println("귀염둥이 이리온…"); System.out.println("멍! 멍!"); System.out.println("꼬리 살랑 살랑~")..

싱글톤 패턴(Singleton Pattern)

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 싱글톤 패턴이란?"오직 하나의 인스턴스만 사용하게 하는 패턴"입니다.왜 이런 패턴이 필요할까요?프로그램 실행 중에 동일한 객체가 계속 여러 개 생성되면 안 되는 경우가 있습니다.예를 들어, 설정을 관리하는 객체, 로그를 기록하는 객체, 데이터베이스 연결 객체 등은 하나만 존재해야 일관성 유지와 자원 절약이 가능합니다. 주요 특징생성자를 private으로 만든다→ 외부에서 new Singleton()으로 인스턴스를 만들지 못하게 막습니다.클래스 내부에 static 참조변수를 둔다→ 인스턴스를 클래스 내부에서 딱 하나만 만들어두고 공유합니다.getInstance()라는 정적 메서드로 인스턴스를 제공한다→ 외부에서 이 메서드를..

테코레이터 패턴(Decorator Pattern)

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 객체지향 설계에서 기능을 점진적으로 확장하거나 수정해야 할 때, 기존 코드를 변경하지 않으면서도 유연하게 기능을 추가할 수 있는 방법이 있다면 얼마나 좋을까요? 바로 데코레이터 패턴(Decorator Pattern)이 그런 역할을 합니다. 데코레이터란?'데코레이터(Decorator)'는 말 그대로 장식자, 즉 도장이나 장식을 덧붙이는 사람이라는 의미입니다. 소프트웨어 설계에서의 데코레이터 패턴은 어떤 기존 객체에 기능(장식)을 덧붙이는 패턴입니다.즉, 클라이언트가 어떤 객체를 호출했을 때, 그 결과값을 가공하거나 덧붙인 형태로 반환해주는 구조를 의미합니다. 핵심은 기존의 기능을 바꾸지 않고 결과값에 장식을 추가하는 방식으..

프록시 패턴(Proxy Pattern)

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 프록시 패턴(Proxy Pattern)이란?프록시는 대리자, 대변인이라는 뜻을 가진 단어입니다. 어떤 객체에 직접 접근하지 않고, 그 앞에 대리 객체를 두어 대신 접근하거나 통제하는 구조입니다.일상 속에서 가장 흔한 예는 청와대 대변인, 백악관 대변인처럼 본인을 대신해 입장을 전달해주는 역할입니다. 디자인 패턴에서도 마찬가지로, 이런 대리자(프록시)를 앞에 세워 실제 객체에 대한 접근을 제어하거나 로직을 추가하는 방식입니다. 프록시 패턴이 적용되지 않은 구조먼저 프록시 없이 직접 서비스 객체를 사용하는 구조입니다.클래스 다이어그램ClientWithNoProxy는 Service 클래스의 runSomething() 메서드를 ..

어댑터 패턴(Adapter Pattern)

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 어댑터 패턴(Adapter Pattern)이란?소프트웨어 설계에서 서로 다른 인터페이스를 가진 클래스들끼리 통신이 불가능할 때, 중간에서 이 둘을 연결해주는 ‘변환기’ 역할을 수행하는 것이 바로 어댑터 패턴입니다. 마치 전기 콘센트 규격이 달라 직접 연결이 불가능할 때 사용하는 충전기(어댑터)처럼, 코드에서도 형식이 맞지 않는 두 객체를 어댑터를 통해 연결할 수 있습니다.예를 들어, 휴대폰은 5V DC 전원만을 사용할 수 있지만, 벽의 콘센트는 220V AC 전원입니다. 이 둘을 바로 연결할 수는 없고, 반드시 충전기라는 어댑터를 통해야만 연결이 가능합니다. 이처럼 서로 호환되지 않는 시스템 사이를 중재하여 소통 가능하게..

OOP 설계 원칙을 넘어서, 이제는 디자인 패턴이다

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 앞서 객체지향 설계에서 중요한 4대 특성과 SOLID 5원칙을 학습했다면, 이번에는 그보다 한 단계 더 실무에 가까운 디자인 패턴을 살펴볼 차례입니다.다.프로그래밍에서 설계를 잘하고 싶다면 도구의 사용법만이 아니라, 그 도구를 어떻게 조합하고 활용하는지를 알아야 한다. 마치 요리사가 칼질만 잘한다고 요리를 잘하는 게 아니듯, 프로그래머도 ‘잘 만드는 방법’, 즉 설계 기법을 알아야 좋은 프로그램을 만들 수 있다. 이때 필요한 것이 바로 디자인 패턴이다.디자인 패턴은 영어로 Design이라는 단어에서 시작된다. 주어진 요구사항과 조건 속에서 좋은 설계를 이끌어내기 위한 공통적인 해결 방법들을 정리한 것이 바로 디자인 패턴이..

DIP - 의존 역전 원칙

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. “고차원 모듈은 저차원 모듈에 의존하면 안 된다. 이 두 모듈은 모두 추상화된 것에 의존해야 한다.”고차원 모듈: 비즈니스 로직, 주요 핵심 흐름을 담은 모듈저차원 모듈: 데이터 처리, 입출력, API 호출 등 구체적인 구현을 담당하는 모듈 “추상화된 것은 구체적인 것에 의존하면 안 된다. 구체적인 것이 추상화된 것에 의존해야 한다.”이 말의 핵심은:➡️ 상위 모듈이 하위 모듈에 의존하지 말고, 둘 다 추상화에 의존해라. 예시 설명: 자동차 - 스노우타이어❌ 잘못된 의존 관계 (의존 역전 원칙 위반)“자동차 ➝ 스노우타이어”자동차 객체가 특정한 구체 클래스인 스노우타이어에 직접 의존하고 있습니다.그런데 타이어가 겨울엔 스..