이전 포스팅에서 만든 회원 도메인이 정상적으로 동작하는지 실행하고 테스트해보자. 이전 포스팅의 "회원 객체 다이어그램"에 해당하는 작업이다. 앞서 설명했지만, 클래스 다이어그램은 정적인 것이고 객체 다이어그램은 동적인 것이다. 회원 도메인 실행과 테스트 회원 도메인 회원 가입 main hello.core 아래 MemberApp 클래스를 하나 생성하자. package hello.core; import hello.core.member.Grade; import hello.core.member.Member; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; public class MemberApp { public..
이전 포스팅에서 프로젝트 환경을 만들었고 이제 실제로 역할과 구현을 나누어 간단하게 설계를 해보자. 비즈니스 요구사항과 설계 회원 회원가입을 하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다.(이 기능은 결정이 되지 않은 상태) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용한다.(나중에 변경될 수 있다) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수도 있다.(미확정) 위 요구사항을 살..
앞서 배운 대로 역할과 구현 즉, 인터페이스와 구현 객체로 나누어 하나의 예제를 개발할 것인데, 스프링의 도움 없이 순수한 자바만을 사용하여 개발을 할 것이다. 이를 통해 추후에 실제 요구사항의 변화가 발생했을 때, 정말 유연하게 대처가 가능한가 와 다형성, OCP, DIP가 잘 지켜졌는지를 확인하고 문제가 있다면 다음 포스팅에서 객체 지향의 원리를 적용하여 해결해 나가 보자. 목차는 다음과 같다. 프로젝트 생성 비즈니스 요구사항과 설계 회원 도메인 설계 회원 도메인 개발 회원 도메인 실행과 테스트 주문과 할인 도메인 설계 주문과 할인 도메인 개발 주문과 할인 도메인 실행과 테스트 프로젝트 생성 이번 프로젝트는 순수한 자바만을 사용하지만, 프로젝트를 Setting 할 때는 편의를 위해 스프링 부트를 사용..
스프링에 왜 객체 지향 이야기가 나올까? 스프링은 DI(Dependency Injection)을 통해서 OCP, DIP를 가능하게 지원한다. DI는 의존관계 주입, 의존성 주입이라고 하며, DI 컨테이너를 제공한다. DI 컨테이너는 자바의 객체들을 컨테이너 안에 넣어두고 이 안에서 의존관계를 연결해주고 주입해주는 기능을 제공하는 것이다. 이것을 활용하여 클라이언트 코드의 변경 없이 기능을 확장할 수 있다. 이제까지의 포스팅을 정리해보면, 모든 설계에 역할과 구현을 분리할 필요가 있다. 애플리케이션 설계도 공연을 설계 하듯이 배역(인터페이스, 역할)만 만들어두고, 배우(구현)는 언제든지 유연하게 변경할 수 있도록 만드는 것이 좋은 객체 지향 설계이다. 이것이 가능하려면 다형성 뿐만아니라, SOLID원칙도 ..
클린코드(Clean Code)로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리한 것이다. 이 5가지 원칙을 줄여 SOLID라 한다. SRP Single Responsibility principle(단일 책임 원칙) 하나의 클래스는 하나의 책임만 가져야 한다는 원칙이다. 하지만 정의만 이런 것이고 실제로는 하나의 책임이라는 것은 매우 모호하다. 책임이라는 것이 클 수도 있고 작을 수도 있다. 또한 문맥과 상황에 따라 다르다. 여기서 중요한 기준은 변경이다. 즉, 변경이 있을 때 파급 효과가 적으면 SRP를 잘 따른 것이라 볼 수 있다. OCP Open/Closed principle(개방-폐쇠 원칙) 5가지 중 가장 중요한 원칙으로, 소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀 ..
들어가기에 앞서, 먼저 스프링에 대해 잠깐 알아보자. 스프링의 생태계 스프링은 단순한 하나의 개념이 아니라, 여러 가지 기술의 모음이라 볼 수 있다. 위의 그림을 살펴보면, 먼저 스프링의 가장 핵심이 되는 스프링 프레임워크, 여러 스프링 기술들을 편리하게 사용할 수 있도록 도와주는 스프링 부트는 스프링의 필수적인 요소이다. 스프링 데이터는 데이터베이스를 편리하게 사용할 수 있도록 도와주는 것이며, 제일 많이 사용하는 것은 스프링 데이터 jpa이다. 스프링 세션은 세션 기능을 편리하게 사용할 수 있도록 도와주는 것이며, 스프링 시큐리티는 보안과 관련된 것, 스프링 Rest Docs는 API 문서화를 편리하게 해주는 것이다. 마지막으로 스프링 배치는 배치 처리에 특화된 기술이며, 스프링 클라우드는 클라우드에..