Java Spring 기초

BioBeBE·2022년 10월 9일
0

자바

목록 보기
6/8

요즘 자바와 스프링 기초에 대해 책 읽고 JVM 구동방법부터 공부중이 김영한님의 스프링기초 코드를 다시 따라가보기로 했다.

SOLID 원칙

SRP : 한 클래스는 한 가지 일만, 실행 클래스는 실행만, 객체 생성 및 연결 클래스는 생성 및 연결만

OCP : 확장엔 열려있고, 변경엔 닫혀있게 인터페이스의 구현 클래스가 늘어나도 클라이언트 코드에서의 변경은 없게

DIP : 의존성 역전, 실행 클래스에서 객체 생성 및 연결은 없게

세가지 원칙을 지키기 위해 실행 클래스(Service Impl Class)에서 필요한 (Repository Impl Class)는 생성자 주입으로 AppConfig Class에서 제어를 한다.

LSP : 리스코프 치환 원칙은 물리적으론 상속만 하면 컴파일 오류는 없지만 논리적으로 오류가 날 수 있다.

ex) 자동차 인터페이스에서 엑셀이 뒤로가게 코드 짜기

ISP : 책임에 맞게 인터페이스 분리하기

스프링 없이 의존성 관리하는 클래스

AppConfig.class

MemberServiceTest

까지는 문제가 없었다.

OrderServiceTest

MemberService에서 join까지는 저장이 잘된걸 확인했는데
OrderServiceImpl.crateOrder의 memberRepository.find에서 저장한 member를 찾지 못해 Discount Policy 내에서 member.grade를 비교하는 메소드에서 NullPointException이 터졌다.

찾느라 시간이 좀 걸렸는데 위의 AppConfig.class 코드를 다시 보자

memberService에 새로운 memberRepository를 주입하고
orderServier에도 새로운 memberRepository를 주입한다.
memberService의 HashMap에 member를 저장했지만 orderService에 주입된 memberRespotiory가 비어있어 memberRepository로 접근해서 NullPointExcepiton이 터졌다.

해결 방법은


memberRepository의 Map을 methodArea의 static zone에 넣고 서로 다른 객체가 생성되도 같은 맵을 참조하게 static 키워드를 붙여야 한다.

잘돌아간다.

출처 : 인프런 - 우아한 형제들 기술이사 김영한의 스프링 완전 정복 (스프링 핵심원리 - 기본 편)

profile
개발자지망생

0개의 댓글