Back End/Spring53 Spring - AppConfig 중복을 제거하고, 역할에 따른 구현이 보이도록 리팩터링 하자. package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.member.MemberRepository; 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.. 2023. 7. 7. Spring - DIP, OCP를 지키는 도메인 서비스 기존 코드는 이렇게 추상화와 구현체에 모두 의존하고 있지만 이를 생성자를 통해서 분리해주면 아래와 같은 코드가 되면서 MemberServiceImpl에서는 MemoryMemberRepository()인 구현체에 대해서는 의존하지 않기 때문에, DIP를 위반하지 않게된다. 대신 AppConfig에서 MemberService인터페이스는 그의 구현체인 MemberServiceImpl을 부르고, 구현체를 부를때 인수를 통해 MemoryMemberRepository를 생성해서 넣어주게 된다. (생성자 주입) 설계 변경으로 MemberServiceImpl 은 MemoryMemberRepository 를 의존하지 않는다! 단지 MemberRepository 인터페이스만 의존한다. MemberServiceImpl 입장.. 2023. 7. 7. spring - 회원 도메인 설계 회원 도메인 요구사항 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 회원 클래스 다이어그램 : 정적 회원 객체 다이어그램 : 동적 하지만 이렇게 구현했을시에 문제점들이 있다. //MemberServiceImpl은 MemberRepository에도 의존하고 MemoryMemberRepository에도 의존함 public class MemberServiceImpl implements MemberService{ //이부분에서 DIP 위반, 실제 할당하는 부분이 구현체를 의존함 private final MemberRepository memberRepository = new MemoryMembe.. 2023. 7. 6. Spring - springboot 초기 설정 2023. 7. 6. 좋은 객체 지향 설계의 5가지 원칙 (SOLID) SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP: 단일 책임 원칙(single responsibility principle) ⭐️ OCP: 개방-폐쇄 원칙 (Open/closed principle) LSP: 리스코프 치환 원칙 (Liskov substitution principle) ISP: 인터페이스 분리 원칙 (Interface segregation principle) ⭐️ DIP: 의존관계 역전 원칙 (Dependency inversion principle SRP 단일 책임 원칙 Single responsibility principle 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 .. 2023. 7. 5. Spring - 객체 지향 프로그래밍이란 객체 지향 프로그래밍 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는것이다. 각각의 객체는 메시지를 주고 받고, 데이터를 처리할 수 있다. 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에서 많이 사용된다. 객체 지향의 특징 추상화 캡슐화 상속 다형성 자동차 역할 : 인터페이스 자동차 구현 : 인터페이스를 구현한 클래스, 구현 객체 운전자 역할 : 클라이언트 역할과 구현을 분리 역할과 구현으로 구분하면 세상이 단순해지고, 유연해지며 변경도 편리해진다. 장점•클라이언트는 대상의 역할(인터페이스)만 알면 된다. 클라이언트는 구현 대상의 내부 구조를 몰라도 된다... 2023. 7. 5. 이전 1 2 3 4 5 6 7 8 9 다음