Spring Container & Bean (1)
2021. 8. 30. 23:20
Spring Boot
스프링 컨테이너 생성 스프링 컨테이너가 생성되는 과정 ApplicationContext를 스프링 컨테이너라고 한다. ApplicationContext는 인터페이스이다. 스프링 컨테이너는 (XML 또는) 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. 이전에 AppConfig를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다. 자바 설정 클래스를 기반으로 스프링 컨테이너를 만들어보자 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); AnnotationConfigApplicationContext 클래스는 ApplicationContext 인터페이..
Spring Boot 예제 2 - 객체 지향 원리 적용 (2)
2021. 7. 12. 00:36
Spring Boot
좋은 객체 지향 설계의 5가지 원칙 적용 SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 클라이언트 객체는 직접 구현 객체를 생성하고, 연결하고, 실행하는 다양한 책임을 가지고 있음 SRP 단일 책임 원칙을 따르면서 관심사를 분리함 구현 객체를 생성하고 연결하는 책임은 AppConfig가 담당 클라이언트 객체는 실행하는 책임만 담당 DIP 의존관계 역전 원칙 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다. 새로운 할인 정책을 개발하고, 적용하려고 하니 클라이언트 코드도 함께 변경해야 했다. 기존 클라이언트 코드( OrderServiceImpl )는 DIP를 지키며 DiscountPolicy 추상화 인터페이스에 의존하는 것 같았지만, FixDiscountPolicy 구체화 구현..
Spring Boot 예제 2 - 객체 지향 원리 적용 (1)
2021. 6. 22. 13:24
Spring Boot
새로운 할인 정책 개발 새로운 할인 정책을 확장해보자. 새로운 할인 정책 적용과 문제점 방금 추가한 할인 정책을 어플리케이션에 적용해보자. 할인 정책을 변경하려면 클라이언트인 OrderServiceImpl 코드를 변경해야 한다. -> 문제점 발견 문제점 우리는 역할과 구현을 충실하게 분리했다. (O) 다형성 활용, 인터페이스와 구현 객체를 분리했다. (O) OCP, DIP 같은 객체지향 설계 원칙을 충실히 준수했다. -> 그렇게 보이지만 사실은 아니다. DIP: 주문 서비스 클라이언트(OrderServiceImpl)는 DiscountPolicy 인터페이스에 의존하면서 DIP를 지킨 것 같지만 추상(인터페이스)뿐만 아니라 구체(구현) 클래스에도 의존하고 있다. DIP 위반 추상(인터페이스) 의존: Disc..
Spring Boot 예제 1 - 자바 예제 만들기
2021. 6. 21. 00:35
Spring Boot
비즈니스 요구사항과 설계 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수도 있다. (미확정) 요구사항을 보면 회원 데이터, 할인 정책과 같은 부분은 지금 정하기 어렵다. 그렇다고 이러한 정책이 결정될 때 까지 무기한 기다릴 수 ..
DTO, VO, DAO 정리
2021. 6. 14. 23:35
Spring Boot
DTO(Data Transfer Object) 프로세스 간에 데이터를 전달하는 객체 DAO, BO와의 차이점은 DTO에는 저장, 검색, 직렬화 및 역 직렬화를 제외하고 동작이 없다는 것 즉, DTO는 비즈니스 로직을 포함하지 않고 데이터를 전달하기 위한 단순한 객체 VO(Value Object) Immutable 속성의 값을 가진 객체 자바에서 단순히 값을 표현하기 위해 불변 클래스를 만들어 사용한다. DTO와 VO의 차이 참조(Reference)와 가변(Mutable) class Money { private long amount; private Currency curr; public long getAmount() { return amount; } public void setAmount(long amou..
좋은 객체지향 설계의 5가지 원칙 SOLID & Spring
2021. 6. 8. 23:02
Spring Boot
SRP 단일 책임 원칙 Single Responsibility Principle 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것 예) UI 변경, 객체의 생성과 사용을 분리 OCP 개방-폐쇄 원칙 * Open/Closed Principle 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야 한다. 다형성을 활용해보자! 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 지금까지 배운 역할과 구현의 분리를 생각해보자. 문제점 MemberService 클라이언트가 구현 클래스를 직접 선택 구현 객체를 변경하려면..
객체 지향 설계와 Spring boot
2021. 6. 7. 23:31
Spring Boot
Spring 스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계 Spring boot 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용 단독으로 실행할 수 있는 스프링 어플리케이션을 쉽게 생성 Tomcat과 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨 손쉬운 빌드 구성을 위한 starter 종속성 제공 스프링과 3th party 외부 라이브러리 자동 구성 -> 외부 라이브러리 버전에 대해서 고민하지 않아도 됨 메트릭, 상태 확인, 외부 구성과 같은 프로덕션 준비 기능 제공 -> 모니터링이 편리 관레에 의한 간결한 설정 Spring의 핵심 개념, 컨셉 이 기술을 왜 만들었는가? 스프링은 자바 언어 기반의 프레임워크 자바 언어의 가장 큰 특징 - 객체 지향 언어..
스프링 어노테이션 :: Spring Annotation
2021. 5. 18. 13:11
Spring Boot
Annotation 이란? Meta-Data 데이터를 위한 데이터 구조화 된 정보를 분석, 분류하고 부가적 정보를 추가하기 위해 데이터 뒤에 따라가는 정보 메타 데이터는 설정 정보 저장의 역할을 하고 이전에는 이를 xml에 기재하였는데 설정 정보가 점점 방대해지면서 어노테이션이 등장하게 되었다. ==> 기존의 코드와 설정이 분리 된 방식에서 코드에 설정을 명시하는 방식으로 변화하며 일종의 주석이 의미를 가지게 되어 컴파일과 런타임에 영향을 주는 것 Annotation의 용도 컴파일러에게 프로그래밍 문법 에러를 체크하도록 정보 제공 IDE가 빌드 및 배치 시 코드를 자동 생성하도록 정보 제공 런타임 시 특정 기능을 실행하도록 정보 제공 -> 스프링에서 주로 사용 Annotation의 용법 어노테이션 파일을..