공유메모장
Spring 시스템 모방 개발 본문
프로젝트 초기 설정
- starter.spring.io 사용
- java 11, spring 2.7.8, jar
Class diagram과 객체 다이어그램

회원 클래스 다이어그램은 어떤 클래스가 존재하는지 알 수 있다. 하지만 MemberMemberRepository와 DbMemberRepository중 어떤 객체를 구체화하는지는 알 수 없다. 그렇기 때문에 회원 객체 다이어그램이 필요하다.
주문, 할인 도메인 설계
회원이 상품을 주문할 때, 등급에 따라 할인 정책을 적용할 수 있도록 한다.
VIP고객은 고정으로 1000원 할인이다. 할인 정책은 오픈 직전까지 의사결정을 미룬다. 즉, 변경가능성이 높다.
자바 자료형 차이
개발을 하다 보면 null point error가 발생할 때가 많다.
primary type인 int, long 등은 null이 허용되지 않고, 그것을 wrapping한 Long, Integer는 null이 가능하기 때문에 null의 가능성이 있는 필드는 wrapper type으로 구현하자.
Spring 없이 DI 컨테이너 만들기 (AppConfig)
보통의 방식으로 개발을 하면, 다형성을 적용하여 OCP, DIP를 지키려 해도 한계가 존재한다.
인터페이스를 상속함에도 불구하고 어떤 클래스에서는 new 연산을 통해 구체클래스를 지정해야 한다. 이러한 문제는 마치 로미오 역할을 하는 A라는 사람이 로미오 역할과 줄리엣 역할을 맡는 B라는 사람을 초빙하는 다양한 책임을 맡는 것과 같다.
관심사 분리
공연을 구성하고, 배우를 섭외하고, 역할에 맞는 배우를 지정하는 책임을 맞는 공연책임자를 가진다
-> AppConfig
AppConfig에는 static으로 생성할 객체를 정의하고, 다른 클래스에서는 이를 그저 가져와서 사용한다.
의존관계 주입(DI)
OrderServiceImpl(주문을 처리하는 구현클래스)는 DisCountPolicy 인터페이스에 의존한다.
하지만 DisCountPolicy 인터페이스의 어떤 구현체가 사용될 지는 모른다.
의존관계는 정적인 클래스 의존관계와 동적인 객체(인스턴스) 의존 관계를 분리해서 생각해야 한다.
정적 클래스 의존 관계
import만 보고도 의존관계를 분석할 수 있다. 이러한 경우는 정적인 클래스 의존관계이다. 즉, 코드나 클래스 다이어그램을 보고 분석할 수 있다. (DiscountPolicy 인터페이스를 사용하고 있구나, 정도)
동적 객체 인스턴스 의존 관계
애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존 관계(FixedDiscountPolicy 와 RateDiscountPolicy중에 무엇이 사용될 지)
객체 다이어그램을 보고 분석할 수 있다.
즉 의존관계 주입은 애플리케이션 실행 시점(run time)에 외부(Appconfig)에서 실제 구현 객체를 생성하고 클라이언트에게 전달해서 클라이언트 서버와 실제 의존관계가 연결되는 것이다.
어떻게? 객체 인스턴스를 생성하고(Appconfig에서 static으로) 참조값을 연결(call by reference)해서 전달된다.
DI컨테이너 (IoC컨테이너)
AppConfig처럼 객체를 생성하고 관리하면서 의존관계를 연결해주는 것
IoC컨테이너 또는 DI 컨테이너라 불린다.
의존관계 주입에 초점을 맞춰, 주로 DI컨테이너라 부른다.
'spring 공부 > spring' 카테고리의 다른 글
| Spring - BeanFactory 와 Application Context (0) | 2023.03.11 |
|---|---|
| spring boot jar 배포 시 thymeleaf가 view를 찾지 못하는 에러 (0) | 2023.03.09 |
| Spring - 스프링 빈 조회 기본 (0) | 2023.03.08 |
| SOLID와 Spring (0) | 2023.03.07 |
| Spring Framework 1 - Spring이란? & 느슨한 결합력과 인터페이스 & DI (0) | 2022.11.16 |