본문 바로가기

전체 글

(185)
[Spring Boot] 새로운 구조 및 구현체 적용 1- 강의 노트 - AppConfig의 등장으로 애플리케이션의 사용 영역과 객체를 생성하고 구성(configuration)하는 영역이 분리됨 - 만약 적용되는 할인 정책이 변경된다면, 클라이언트 코드 영역은 변경할 필요 없이 AppConfig만 수정하면됨 - 구성 영역은 당연히 변경됨. 세부적인 내용이 바뀔 수 있기 때문임. 2- 변경 예시 package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberService; import hel..
[Spring Boot] AppConfig 리팩토링 1- 리팩토링 대상 코드 package hello.core; import hello.core.discount.FixDiscountPolicy; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; /** * Application 전체를 구성하고 설정하는 역할 * - 로미오 줄리엣 공연 예시 중 기획자 * - 어플리케이션에 대한 환경 구성을 모두 이곳에서 함 */ public clas..
[JUnit] JUnit 5 (1) 소개 1- JUnit - 자바 개발자가 많이 사용하는 테스트 프레임워크 - 단위 테스트 작성하는 자바 개발자의 93%가 사용하고 있음 (JetBrain 조사 리포트) - 자바 8 이상을 필요로 함 - 대체재로 TestNG, Spock 등이 있음 2- JUnit 5 구조 - JUnit 4는 JUnit 4가 하나의 jar 파일로 존재함 - JUnit 5는 그 자체로 여러 모듈화가 되어있음 Jupiter Vintage JUnit Platform --> 셋 다 JUnit 5의 세부 모듈 - Platform : JUnit 테스트 코드 실행해주는 런처 제공 (TestEngine API 제공) 뭐.. 이외 테스트 방법들 콘솔, main method, IDE에서 실행 가능 JUit은 platform을 통해 main meth..
[Spring Boot] 스프링 핵심 원리 이해 - 객체 지향 원리 적용 (1) 관심사의 분리 1- AppConfig 활용 - 예시. 배우와 공연 기획자의 분리 - 인터페이스에 어떤 구현체가 들어갈지는 공연 기획자가 해야한다. - AppConfig는 구현 객체를 생성하고 연결을 책임지는 별도의 클래스를 칭함 - 역할분리와 OCP 준수를 위해 생성자주입[ 생성자주입: 생성자를 통해 객체를 전달하는 것] 2- AppConfig의 역할 - 어플리케이션 동작에 필요한 실제 구현 객체 생성 - 생성한 인스턴스의 참조를 생성자를 통해 주입 - AppConfig 객체는 구현체의 객체를 생성하고 그 참조값을 또 다른 생성자(해당 구현체를 받아주는 생성자)로 전달함 - 이로 클라이언트 입장에서 의존관계가 외부에서 주입해주는 것다고 해서 DI(Dependency Injection : 의존관계 주입 또는 의존성 주입..
[Spring Boot] 주문과 할인 도메인 설계 (3-1) 주문과 할인 도메인 개발 1- 강의 내용 요약 해당 강의의 요구사항을 요약하자면 클라이언트가 주문을 넣어. 그러면 회원 아이디, 상품명, 가격이 넘어가는데 주문 서비스에서 이를 받아 주문 내역을 넘겨줘. 근데 중요한건 회원이 VIP 등급이라면 할인 정책이 적용될수도 있는데 이게 정율일지 정액일지는 몰라. 2- 구현 핵심 포인트는 역할과 구현체를 분리하는 것인데. (여러번 강조되지만 기능의 교체나 확장을 용이하게하기 위함) 여기서 보면 주문 구현체는 주문 생성만 행하고 있고, 할인정책 구현체는 할인 정책만 넘겨주고 있기에 단일 책임 원칙(SRP)가 매우 잘지켜지고 있음. 예시 코드의 전제조건은 'VIP는 정액법으로 1,000원을 할인한다.'인데, 이게 아닌 정율법으로 바뀐다하여도 주문 구현체를 수정할 필요가 없기에. 즉, 각 구현..
[Spring Boot] 주문과 할인 도메인 설계 (3) 1- 요구사항 미확정 요구사항 - 할인 정책은 변경 가능성이 높음. 회사의 기본 할인 정책을 아직 정하지 못하였으며, 오픈 직전까지 고민을 미루고 싶음. - 최악의 경우 할인을 적용하지 않을수도 있음. 2- 메모 이전 회원 도메인 설계와 마찬가지이다. 미확정된 요구사항은 추상화(역할)과 구체화(구현)을 분리하여 나중에 어떠한 것을 택하게 된다 하여도 교체가 용이하도록 개발이 가능하다.
[Spring Boot] 비즈니스 요구사항과 설계 (2-2) 회원 도메인 실행 및 테스트 1- 코드와 다이어그램 - 클래스 다이어그램: 정적 다이어그램 - 객체 다이어그램: 동적 다이어그램 (왜냐 실제 동작해야 알 수 있기 때문.) 2- 테스트 프레임워크 - 출력 찍어서 확인하려면 모든걸 다 실행해야하는 번거로움 발생 - 이에 JUNIT 사용! - Assertions에서 테스트 (비교 등)을 위한 메서드들이 주어지는데 [ org.assertj.core.api ]에서 주어지는 것에 좋은 API들이 많음 - GIVEN - WHEN - THEN 패턴 3- 강의. 현재까지 코드의 설계상 문제는 무엇일까요? - 정답 듣기 전 하늘 생각 OCP 법칙이 지켜지지 않는다는 것. 요구사항에 따라가자면 회원 저장소는 아직 어떻게할지 미확정임. 그래서 우선 개발하는 단계에서는 자바 메모리를 활용한 회원 저장소로..
[Spring Boot] 비즈니스 요구사항과 설계 (2-1) 회원 도메인 구현 1- 구현 - 클래스 다이어그램을 기반으로 구현 2- 이론 (1) 다형성(polimorphism) : 하나의 객체가 여러 타입을 가질 수 있는 것을 의미함 다형성 구현 방법 - 오버로딩: 동일 메서드명에 parameter만 다르게하여 메서드를 구현하는 것 - 오버라이딩: 쉽게 이야기하자면 메서드를 재정의하는 것. 주로 상속과 인터페이스에서 사용됨. - 함수형 인터페이스: 한 개의 추상 메서드를 가지고 있는 것을 함수형 인터페이스라 하며, 이는 Enum에서 큰 빛을 발휘한다고 함 (함수형 인터페이스 내용 보충 필요) 3- 이외 팁 - 이번 예제에서 회원 저장소에 대해 미확정이다라는 요구사항이 있기에 자바 메모리를 활용해 회원 정보를 저장함 - 이때 HashMap을 사용하여 저장했는데, 실무에서 동시성 문제..