
1. 제어의 역전 IoC (Inversion of Control) - 예제 프로젝트를 개발하면서 AppConfig를 사용하지 않았을때, 클라이언트 구현 객체가 스스로 필요한 구현 객체를 생성(new)하고, 연결하고, 실행했다. 즉, 구현 객체가 프로그램의 제어 흐름을 스스로 조종한 것이다. 솔직히 개발자 입장에서는 매우 자연스러운 흐름이다. - 하지만, AppConfig의 등장 이후, 구현 객체는 오직 자기가 맡은 역할을 실행하는 것에만 집중한다. 프로그램의 제어는 이제 AppConfig가 하는것이다. - 이렇듯 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)이라고 한다. 2. 의존관계 주입 (Dependency Injection) - 의존관계는 정적인 클래..
서론 - 지금까지 과정의 흐름을 정리한다. 비즈 니스 요구사항에 따른 프로젝트 설계 (FixDiscountPolicy) 비즈 니스 요구사항의 변경에 따른 새로운 할인 정책 (RateDiscountPolicy) 개발 새로운 할인 정책 적용과 문제점 관심사의 분리 AppConfig 리팩터링 새로운 구조와 할인 정책 적용 1. 비즈니스 요구사항에 따른 프로젝트 설계 (FixDiscountPolicy) 비즈니스 요구사항에 따라 고정 할인 정책(FixDiscountPolicy)으로 할인하는 서비스를 설계하였다. 이때, 기능의 확장을 위해 다형성을 위해 인터페이스와 구현체를 분리하여 설계한다. 2. 비즈 니스 요구사항의 변경에 따른 새로운 할인 정책 (RateDiscountPolicy) 개발 다형성을 고려하여 인터..

서론 - 이전 포스트까지의 코드는 역할과 구현을 분리하여 설계하였다. - 하지만 새로운 기능의 확장을 위해 결국 OrderServiceImpl의 코드를 변경하였다. (OCP 위반) - 또한 인터페이스 뿐만 아니라 구현체에도 의존하고 있었다. (DIP 위반) - 이를 극복하기 위해 클라이언트인 OrderServiceImpl에 DiscountPolicy의 구현 객체를 대신 생성하고 주입해야 한다 는것을 알게되었다. - 이번 포스트에선 OCP와 DIP를 지키기위해 "구현 객체를 생성"하고, "연결"하는 책임을 가지는 별도의 설정 클래스 AppConfig를 만들것이다. AppConfig 생성 기존의 MemberServiceImpl은 사진과 같이 MemberRepository 인터페이스와 MemoryMemberR..

서론 - 이전 포스트에서 순수 Java만 사용하여 비즈니스 요구사항에 맞게 프로젝트를 설계하였다. - 이제 새로운 할인 정책을 개발하여 프로젝트를 확장해보자. - 이때, 객체 지향의 설계 원칙을 잘 준수했는지 확인해 보자. 1. 새로운 할인 정책 개발 - 상황 : 서비스 오픈 직전에 할인 정책에 대한 기획자의 요구사항이 변경되었다. 기획자 : 고정 할인 정책(1000원)이 아니라 정률 할인 정책(10%)으로 바꿉시다! 개발자 : ㅠㅠ RateDiscountPolicy 추가 새로운 할인 정책을 설계했으면 이제 OrderService에서 기존에 사용하던 FixDiscountPolicy대신 RateDiscountPolicy로 대체한다. 이때, 문제점이 발견된다. 분명히 역할과 구현을 충실하게 분리했다. 다형성..

서론 - Spring의 기능을 쓰지 않고 순수한 Java로 프로젝트를 설계하기 - 순수 Java로 설계한 프로젝트에서 서비스를 확장해보기 - 이때, 객체지향의 원칙을 잘 준수 했는지 확인해보기 1. 프로젝트 생성 https://start.spring.io/ 2. 비즈니스 요구사항 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인..

SOLID - 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리한 것이다. SRP: 단일 책임 원칙(single responsibility principle) OCP: 개방-폐쇄 원칙 (Open/closed principle) LSP: 리스코프 치환 원칙 (Liskov substitution principle) ISP: 인터페이스 분리 원칙 (Interface segregation principle) DIP: 의존관계 역전 원칙 (Dependency inversion principle) 1. SRP 단일 책임 원칙 (Single Responsibility Principle) 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수도 있고, 작을 수도 있다..

객체 지향 프로그래밍이란? 구글에 "객체 지향 프로그래밍"을 검색하면 다음과 같이 나온다. 유연하고, 변경이 쉽다? => 레고 블럭을 조립하듯이, 키보드, 마우스를 갈아 끼우듯이, 컴퓨터 부품을 갈아 끼우듯이, 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법. 객체 지향의 특징 추상화(Abstarction) 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 모델화하는 것. 객체(클래스)를 정의하는 것을 추상화라고 할 수 있다. 캡슐화(Encapsulation) 추상화를 통해 객체를 정의했다면, 객체에 필요한 데이터나 관련 메소드를 그룹화하는것이다. 실제로 구현되는 부분을 외부에 드러나지 않도록 하여 정보를 은닉할 수 있다. 코드가 묶여있어서 오류가 없어 편리하다. 캡슐화 ..

1. Spring이란? - 스프링은 특정한 하나가 아니라 여러가지 기술들의 모음이다. - 가장 핵심이 되는 Spring Framework, 여러 Spring 기술들을 편리하게 사용 가능하게 하는 Spring Boot - 그 외에도 Spring Data, Spring Session, Spring Security, Spring Rest Docs, Spring Batch, Spring Cloud 등이 있다. Spring | Projects Spring Framework Provides core support for dependency injection, transaction management, web apps, data access, messaging, and more. spring.io Spring Fra..
- Total
- Today
- Yesterday
- 코딩새내기
- 구현
- 시뮬레이션
- 현꾸라지
- Spring
- g4
- react
- PriorityQueue
- 리액트 네이티브
- SWEA
- 리액트
- 백준
- laugh4mile
- DFS
- BFS
- G5
- 우선순위큐
- java
- map
- S2
- 자바
- 다익스트라
- 그리디
- S3
- 문자열
- 알고리즘
- 백트래킹
- Spring Boot
- react native
- 객체지향
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |