Spring 47

[Spring 완전 정복 시리즈] 7편 - DIP/OCP 위반 구조의 문제점

이번 편에서는 이전에 만들었던 회원/주문 예제에 객체 지향 원칙을 적용하면서 구조적으로 어떤 문제가 있었는지를 확인해본다.특히 DIP(의존 역전 원칙) 과 OCP(개방-폐쇄 원칙)을 위반한 부분을 짚고, 이후 개선 방향까지 함께 살펴본다.할인 정책 교체 시 발생하는 문제기존 구조에서는 할인 정책을 다음과 같이 고정해서 사용하고 있었다.private final DiscountPolicy discountPolicy = new FixDiscountPolicy();이 경우 새로운 할인 정책(RateDiscountPolicy)으로 교체하려면 코드를 직접 수정해야 한다.private final DiscountPolicy discountPolicy = new RateDiscountPolicy();이는 OCP 위반이다..

Spring 2025.07.26

[Spring 완전 정복 시리즈] 6편 - 예제 만들기: 역할과 구현 분리의 시작

스프링의 핵심 개념을 체득하기 위해 순수 자바 기반의 예제를 만들어보며 객체 지향 설계 원칙이 실제 개발에서 어떤 의미를 가지는지 확인해보는 시간이다.이번 포스팅에서는 회원 가입과 조회 기능을 중심으로 도메인 설계 → 구현 → 테스트까지 하나하나 살펴본다. 회원 도메인 요구사항 정리회원은 가입할 수 있어야 하고, 가입한 회원을 조회할 수 있어야 한다.회원은 일반과 VIP 두 가지 등급이 있다.회원 정보는 자체 DB나 외부 시스템과 연동하여 저장할 수 있다. (아직 미확정)저장소 구현이 미정인 상태이므로 개발 초기에는 메모리 기반 저장소를 사용한다.이후 구현체만 바꿔 끼우는 구조로 설계하면 된다. 역할과 구현 분리 전략요구사항 중에서 회원 저장 방식과 할인 정책은 변경 가능성이 크다.그래서 다음의 객체 지..

Spring 2025.07.26

[Spring 완전 정복 시리즈] 5편 - 객체 지향 설계와 스프링: DI가 왜 중요한가?

1. 객체를 조립하는 방법: 스프링의 DI 컨테이너우리는 객체를 사용하면서 서로 연결해야 할 필요가 있습니다. 예를 들어, 서비스가 리포지토리를 사용하려면 직접 생성하거나 연결해야 합니다.하지만 이런 의존 관계를 코드 안에서 직접 처리하면 OCP, DIP 원칙을 위반하게 됩니다.그래서 등장한 개념이 바로 DI(Dependency Injection) 이며, 이걸 관리해주는 것이 스프링 컨테이너입니다.2. DI 컨테이너의 역할객체를 대신 생성하고의존 관계를 외부에서 주입해줌@Configurationpublic class AppConfig { @Bean public MemberRepository memberRepository() { return new MemoryMemberReposit..

Spring 2025.07.23

[Spring 완전 정복 시리즈] 4편 - 좋은 객체 지향 설계의 5가지 원칙 (SOLID)

1. 왜 원칙이 필요한가?객체 지향은 단순히 클래스를 만들고 상속을 사용하는 것이 아닙니다. 제대로 된 객체 지향 설계를 하려면 변경에 강하고, 확장에 유연하며, 테스트가 쉬운 코드를 작성할 수 있어야 합니다.이를 실현하기 위한 설계 원칙이 바로 SOLID 원칙입니다.2. SOLID 5가지 원칙 정리1) SRP - 단일 책임 원칙 (Single Responsibility Principle)클래스는 단 하나의 책임만 가져야 함변경이 발생했을 때 수정의 이유가 오직 하나여야 함// Badclass ReportManager { void generateReport() {} void saveToFile() {} void sendEmail() {}}// Goodclass ReportGenerator..

Spring 2025.07.23

[Spring 완전 정복 시리즈] 3편 - 객체 지향 특징: 유연하고 변경에 강한 코드의 시작

1. 객체 지향이란?소프트웨어 설계에서 '객체 지향'은 단순한 프로그래밍 패러다임 그 이상입니다. 현실 세계의 사물이나 개념을 객체(Object) 로 표현하고, 이들 간의 관계와 메시지를 통해 문제를 해결합니다.객체는 상태(데이터) 와 행위(기능) 를 함께 가지고 있는 독립적인 단위입니다.2. 객체 지향의 4가지 핵심 특징특징설명추상화 (Abstraction)공통된 속성과 기능을 식별해 클래스로 정의캡슐화 (Encapsulation)객체의 내부 구현을 숨기고 필요한 인터페이스만 공개상속 (Inheritance)기존 클래스를 재사용해 새로운 클래스를 생성다형성 (Polymorphism)동일한 메시지에 대해 객체에 따라 다른 동작 수행 3. 실생활과 코드로 이해하는 다형성운전자는 자동차 내부 구조를 몰라도..

Spring 2025.07.23

[Spring 완전 정복 시리즈] 2편 - 스프링이란?

1. 스프링 프레임워크란?스프링은 자바 플랫폼을 위한 경량 애플리케이션 프레임워크입니다. 복잡했던 과거의 엔터프라이즈 개발을 단순하게, 효율적으로 만들어 주는 핵심 철학을 바탕으로 만들어졌습니다.핵심 철학은 바로 “POJO 기반 개발” 과 “의존성 주입(DI)”, “관점 지향 프로그래밍(AOP)”입니다.2. 스프링의 핵심 구성 요소스프링 컨테이너: 객체를 생성하고 관리하는 중심 역할 (IoC Container)DI (Dependency Injection): 객체 간의 의존 관계를 외부에서 주입AOP (Aspect Oriented Programming): 공통 기능(로깅, 트랜잭션 등)을 핵심 로직과 분리트랜잭션 처리: 선언적 방식으로 쉽게 트랜잭션을 제어스프링 MVC: 웹 애플리케이션의 요청 흐름을 처리..

Spring 2025.07.23

[Spring 완전 정복 시리즈] 1편 - 스프링의 탄생

1. 자바 진영의 과거: EJB의 등장과 한계과거 자바 진영에서는 엔터프라이즈 애플리케이션 개발 시 EJB (Enterprise JavaBeans) 가 표준처럼 사용되었습니다. 하지만 이 기술은 너무 복잡했습니다.비즈니스 로직을 작성하려면 EJB 인터페이스, 홈 인터페이스, 실제 구현 클래스를 각각 만들어야 했고배포 시에도 ejb-jar.xml 등의 복잡한 설정 파일이 필요했으며개발 속도는 느리고 테스트도 어려웠습니다.즉, 개발자 입장에서 생산성과 유지보수성이 모두 떨어지는 구조였던 셈입니다.2. 경량 컨테이너와 POJO 기반 개발의 등장이러한 문제에 대한 반발로 등장한 개념이 경량 컨테이너와 POJO (Plain Old Java Object) 기반 개발입니다.특별한 규약 없이, 단순한 자바 객체로 로직..

Spring 2025.07.23