FrameWork/Spring&Spring-boot
-
Junit-Assert 메소드FrameWork/Spring&Spring-boot 2021. 12. 29. 18:18
Assertions 메소드 @Test 수행 결과를 판별합니다. 메소드 설명 assertEquals(x,y) 객체 x와 y가 일치함을 확인합니다. x(예상 값)와 y(실제 값) 같으면 테스트 통과 assertArrayEquals(a,b) 배열a와 b가 일치함을 확인합니다. assertFalse(x) x가 false인지 확인합니다. assertTrue(x) x가 true인지 확인합니다. assertTrue(message,condition) condition이 true이면 message표시 assertNull(o) 객체가o가 null인지 확인합니다. assertNotNull 객체가o가 null이 아닌지 확인합니다. assertSame(ox,oy) 객체가 ox와 oy가 같은 객체임을 확인합니다. ox과 oy가 ..
-
주문과 할인 도메인 개발FrameWork/Spring&Spring-boot 2021. 12. 29. 17:53
개발 팁★ -Enum형식의 참조 변수는 .equal매소드가 아니라 "=="으로 비교 연산자를 사용해야 한다. @Test -단위 테스트 : Spring이나 Container에 도움 없이 순순하게 자바 코드로 테스트를 하는 것. Order객체는 주문에서 할인적용이 끝났을 때 만들어 지는 객체 @Override public Order createOrder(Long memberId, String itemName, int itemPrice) { Member member = memberRepository.findById(memberId); int discount = discountPolicy.discount(member,itemPrice); return null; } 잘 짜여진 설계 -> 할인정책에 대한 책임은 D..
-
주문과 할인 도메인 설계FrameWork/Spring&Spring-boot 2021. 12. 29. 15:53
주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해 달라(나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 정책을 아직 정하지 못헸고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다.(미확정) 주문 도메인 협력,역할 책임 주문 생성 : 클라이언트는 주문 서비스에 주문 생성을 요청한다. 회원 조회 : 할인을 위해서는 회원 등급이 필요하다. 그래서 주문 서비스는 회원 저장소에서 회원을 조회한다. 할인 적용 : 주문 서비스는 회원 등급에 따른 할인 여부를 할인 정책에 위임한다. 주문 결과 반환 : 주문 서비스는 할인 결과를 포함한..
-
회원 도메인 실행과 테스트FrameWork/Spring&Spring-boot 2021. 12. 29. 14:23
개발 팁★ @Test void join( ){ //given(주어진 환경에서) //when(이렇게 했을 때) //then(이렇게 된다.) } -클래스 다이어그램은 정적인 것이고, 객체 다이어그램은 동적인 것이다. new해서 실제 들어가 봐야 어떤 구현체가 쓰였는지 알 수 있다. 회원 도메인 설계의 문제점 다른 저장소로 변경할 때 OCP 원칙을 잘 준수할까? DIP를 잘 지키고 있을까? -의존관계가 인터페이스 뿐만 아니라 구현까지 모두 의존하는 문제점이 있음 [출처 : 김영한. 스프링 핵심 원리-기본편. 인프런]
-
회원 도메인 개발FrameWork/Spring&Spring-boot 2021. 12. 29. 13:32
개발 팁★ -인터페이스와 구현체를 같은 패키지에 두는 것 보다 다른 패키지에 두는 것이 설계상 좋다. private final MemberRepository memberRepository = new MemoryMemberRepository(); @Override public void join(Member member) { memberRepository.save(member); } join 메서드에서 save메서드를 호출하면 다형성에 의해서 MemoryMemberRepository 에 save 메소드(override한)가 호출된다. [출처 : 김영한. 스프링 핵심 원리-기본편. 인프런]
-
회원 도메인 설계FrameWork/Spring&Spring-boot 2021. 12. 29. 13:10
회원 도메인 요구 사항 •회원을 가입하고 조회할 수 있다. •회원은 일반과 VIP 두 가지 등급이 있다. •회원 데이터는 자체 DB를 구축 할 수 있고, 외부 시스템과 연동할 수 있다.(미확정) 회원 도메인 협력 관계 회원클래스 다이어그램 구현체 중 어떤 Repository에 data를 넣을지(new)는 동적으로 결정된다. 회원 객체 다이어그램 그래서, 별도로 객체 다이어그램이 라는 것이 존재 하게 된다. 실제 new 하게되는 인스턴스끼리의 참조 관계 [출처 : 김영한. 스프링 핵심 원리-기본편. 인프런]
-
객체 지향 설계와 스프링FrameWork/Spring&Spring-boot 2021. 12. 28. 19:11
다시 스프링으로 스프링 이야기에 왜 객체 지향 이야기가 나오는가? 스프링은 다음 기술로 다형성 + OCP, DIP를 가능하게 지원 -DI(Dependency Injection):의존관계,의존성 주입 -DI 컨테이너를 제공 +클라이언트의 코드 변경없이, 기능을 확장 할 수 있다.(부품을 교체해서 끼워 넣을 수 있다.) 클라이언트 코드의 변경 없이 기능 확장 쉽게 부품을 교체하듯이 개발 +스프링은 다형성,OCP,DIP를 가능하게 해주는 기술 스프링이 없던 시절로 옛날 어떤 개발자가 좋은 객체 지향 개발을 하려고 OCP,DIP 원칙을 지키면서 개발을 해 보니, 너무 할일이 많았다. 배보다 배꼽이 더 큰 경우, 그래서 프레임워크로 만듬 순수하게 자바로 OCP,DIP 원칙들을 지키면서 개발을 해보면, 결굴 스프링..
-
SOLIDFrameWork/Spring&Spring-boot 2021. 12. 28. 18:06
좋은 객체 지향 설계의 5가지 원칙 SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP : 단일 책임의 원칙(single responsibility principle) OCP : 개방-폐쇄 원칙 (Open/closed prinsiple) LSP : 리스코프 치환의 원칙(Liskov suvstitution prinsiple) ISP : 인터페이스 분리 원칙 (Interface segregation principle) DIP : 의존관계 역전 원칙 (Dependency inversion principle)' 1. SRP 단일 책임 원칙 Single responsibility principle 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. ..