서론 - 지금까지 과정의 흐름을 정리한다. 비즈 니스 요구사항에 따른 프로젝트 설계 (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..
AOP 란? - AOP 란 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍을 의미. - 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것. - 핵심적인 관점 : 핵심 비즈니스 로직. 로직의 존재 이유. - 부가적인 관점 : 해당 로직에 걸리는 시간, 로그, DB 연결 등 공통적인 로직 - AOP의 취지 : 부가적인 로직을 여러 메서드에 일일이 넣는것 대신 관점별로 모듈화하여 재사용하도록 함. -> 효율성↑ 1. AOP가 필요한 상황 - 상황 : 모든 메소드가 동작하는 시간을 측정하라. 회원가입, 회원조회 등의 메소드에 시간을 측정하는 기능은 핵심적인 관점이 아니라 부가적인 관점이다. 회원가입, 회원조회 등의 메..
- Total
- Today
- Yesterday
- Spring
- 현꾸라지
- Spring Boot
- 리액트 네이티브
- react native
- 리액트
- S3
- G5
- 시뮬레이션
- 백트래킹
- map
- 자바
- 문자열
- 그리디
- S2
- DFS
- PriorityQueue
- 구현
- react
- 다익스트라
- 알고리즘
- java
- 우선순위큐
- 백준
- BFS
- g4
- SWEA
- laugh4mile
- 객체지향
- 코딩새내기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |