객체 지향 원리 적용새로운 할인 정책 개발새로운 할인 정책을 확장해보자새로운 할인 정책 적용과 문제점테스트가 끝난 새로운 할인 정책을 적용해보자.AppConfigAppConfig 리펙터링SpringAppConfig에 Spring 적용하기객체 지향 원리 적용 새로운 할인 정책 개발 새로운 할인 정책을 확장해보자 참고: 애자일 소프트웨어 개발 선언 https://agilemanifesto.org/iso/ko/manifesto.html기획자의 요구사항 변동으로 인해 FixDiscountPolicy를 RateDiscountPolicy로 변경할것이다.RateDiscountPolicy 추가 회원의 등급을 조회하고 VIP일때 할인 금액이였던 1000원을 return했던 FixdiscountPolicy와 다르게 pri..
java
클래스 클래스의 구성요소 객체 객체란 물리적으로 존재하나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별이 가능한 것을 말한다. 예를들어 물리적으로 존재하는 자동차, 자전거, 책, 사람과 추상적인 학과, 강의, 주문 등이 모두 객체가 될 수 있다. 객체는 속성과 동작으로 구성되어 있다. 자동차는 색깔, 모델명 등의 속성과 달린다, 멈춘다 등의 동작이 있다. 자바는 이 속성과 동작을 각각 필드와 메소드라고 부른다. 필드 (멤버 변수) 클래스 내부에 선언되는 데이터의 저장 공간으로, 객체의 상태를 나타내는 속성을 의미합니다. 필드는 클래스의 특성이나 속성을 나타내는 변수들로, 객체마다 고유한 값을 가질 수 있다. 필드는 클래스 내에서 선언되고, 객체가 생성될 때마다 해당 객체에 대한..
SOLID SRP OCP ★ LSP ISP DIP 스프링 SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP 단일 책임 원칙 (single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수도 있고, 작을 수도 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급효과가 적으면 단일 책임 원칙을 잘 따른 것 ex) UI의 변경, 객체의 생성과 사용을 분리 OCP ★ 개방 - 폐쇠 원칙 (Open/closed principle) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 확장을 하려면 당연히 기존 코드를 변경해야 하지만 이는 다형성으로 극..
예제 만들기 비즈니스 요구사항과 설계 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정) 요구 사항을 보면 회원 데이터와 할인정책같이 수정될 수 있는 부분은 객체 지향 설계 방법으로 대비할 수 있다. 우선 스프..
Java 어플리케이션 실행과 Servlet, AppletApplication → java라는 명령어로 컴파일된 byte 코드를 실행되는 프로그램Servlet → 자바의 서버에서 실행되고 직접 사용하는 경우는 드뭄 하지만 아키텍쳐의 이해를 위해선 학습 필요●Servlet에 대한 추가 설명서블릿(Servlet)은 Java 언어를 기반으로 웹 애플리케이션을 개발하기 위한 기술 중 하나로, 클라이언트와 서버 사이에서 동작하는 웹 컴포넌트입니다. 서블릿은 주로 웹 서버에서 동작하며, HTTP 요청과 응답을 처리하여 동적인 웹 페이지나 웹 애플리케이션을 생성하고 관리하는 데 사용됩니다.서블릿은 자바 클래스로 구현되며, 주로 javax.servlet 패키지와 javax.servlet.http 패키지에 포함된 인터페이..
자바 기초 개념 소스코드 → 사람이 작성한 코드 컴파일 → 각 기기의 JDK가 JVM(실행환경)에서 해당 소스코드를 해석할 수 있게 기계어로 변환해주는 과정 JDK → 자바로 프로그램을 개발할 수 있는 실행 환경(JVM) 과 개발도구 (컴파일러) 등을 제공 API Application Programming Interface → API의 약자 자바에서는 라이브러리의 개념과 유사하게 생각하면 된다. 자바의 각종 데이터 타입 기본 타입 bool, ★char, byte, short, int, long, float, double 참조 타입 String(참조형이지만 기본형처럼 사용), 배열(array[]), 열거(enum), 클래스(class), 인터페이스(interface) 자세한 설명 자바에서의 참조형 데이터 ..
AppConfig라는 클래스를 구상영역으로 설정해주어 사용영역과 분리해줌으로써 DIP를 완성해주었다. package hello.core; import hello.core.member.Grade; import hello.core.member.Member; import hello.core.member.MemberService; import hello.core.order.Order; import hello.core.order.OrderService; public class OrderApp { public static void main(String[] args) { MemberService memberService; OrderService orderService; AppConfig appConfig = new ..
Set List 컬렉션의 객체의 저장순서를 유지하지만, Set 컬렉션은 저장 순서가 유지되지 않는다.인덱스 관련된 메소드가 없다.Set 컬렉션은 인덱스로 객체를 검색해서 가져오는 메소드가 없다. 대신 전체 객체를 대상으로 한 번씩 반복해서 가져오는 반복자(Iterator) 를 제곡한다. Iterator 메소드 hasNext() : 가져올 객체가 있으면 true를 리턴하고 없으면 false를 리턴한다.next() : 컬렉션에서 하나의 객체를 가져온다.remove() : Set 컬렉션에서 객체를 제거한다. Iterator를 사용하지 않더라고 향상된 for문( value : values ) 을 이용해서 전체 객체를 대상으로 반복할 수 있음. HashSet HashSet은 객체를 저장하기 전에 먼저 객체의 ha..
Vector ArrayList와 Vector의 차이점은 동기화 여부이다.Vector는 동기화 메소드로 구성되어 있어 멀티 스레드가 동시에 Vector의 메소드들을 실행할 수 없고, 하나의 스레드가 메소드 실행을 완료 해야만 다른 스레드가 메소드를 실행할 수 있음. Vector는 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있다 LinkedList LinkedList는 List 구현 클래스이므로 ArrayList와 사용 방법은 동일하나 데이터를 보관하는 내부 구조가 다르다. ArrayList는 내부 배열에 객체를 저장해서 관리하고 (한줄서기) LinkedList는 인접 참조를 링크해서 체인처럼 관리함. (번호표)객체 삭제와 삽입이 일어나는 곳에서는 ArrayList 보다 LinkedList가 더..