전체 글
-
Spring 기본3 - 객체 지향 원리 적용, OCP,DIP 위반의 문제FrameWork/Spring&Spring-boot 2023. 11. 9. 11:21
객체 지향 원리 적용3 새로운 할인 정책 개발 *새로운 할인 정책을 확장해 보자* https://agilemanifesto.org/iso/ko/manifesto.html 애자일 소프트웨어 개발 선언 애자일 소프트웨어 개발 선언 우리는 소프트웨어를 개발하고, 또 다른 사람의 개발을 도와주면서 소프트웨어 개발의 더 나은 방법들을 찾아가고 있다. 이 작업을 통해 우리는 다음을 가치 있게 agilemanifesto.org RateDiscountPolicy추가 새로운 할인 정책 적용과 문제점 *방금 추가한 할인 정책을 적용해 보자 할인 정책을 어플리케이션에 적용해보자 할인 정책을 변경하려면 클라이언트인 OrderServiceImpl 코드를 수정해야 한다. public class OrderServiceImpl im..
-
Spring 기본2 - 주문 할인 도메인 설계FrameWork/Spring&Spring-boot 2023. 11. 7. 18:08
주문과 할인 도메인 설계 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원은 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원은 할인해주는 고정 금액 할인을 적용해달라.(나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 할인 정책은 아직 확정되지 않았고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. 주문 도메인 협력,역할,책임 1. 주문생성: 클라이언트는 주문 서비스에 주문 생성을 요청한다. 2. 회원 조회 : 할인을 위해서는 회원 등급이 필요하다. 그래서 주문 서비스는 회우너 저장소에서 회원을 조회한다. 3. 할인 적용 : 주문 서비스는 회원 등급에 따른 할인 여부를 할인 정책에 위임한다. 4. 주문 결과 반..
-
Spring 기본1 - 회원 도메인 설계, SOLID 원칙FrameWork/Spring&Spring-boot 2023. 11. 7. 15:37
회원 도메인 설계 회원 도메인 요구사항 회원가입을 하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다.(미확정) 회원 도메인 협력 관계(역할) *기획자들도 볼수 있는 그림 회원 저장소라는 레이어를 별도로 만든다. 회원 DB를 자체 구축할 수도 있고 외부 시스템과 연동할 수도 있기 때문이다. 그래서 회원 데이터에 접근하는 계층을 따로 만드는 것이다. 회원 데이터를 어디서 끌어다 쓸지 결정이 되지 않았기때문 일단 메모리를 사용한 회원 저장소를 이용해 개발을 진행하기로 하였다. 메모리 회원 저장소는 test할때도 쓰이고 로컬에서 개발할 때도 쓰이고 할것이다. 이후에 어떤 회원 저장소를 쓸질 결정되면 그 부분만 빠르게 개..
-
Java - 컬렉션 프레임워크(제네릭)1-1개발언어/JAVA 2023. 11. 7. 13:46
제네릭 제네릭이란? 프로그램에서 변수를 선언할 때 모든 변수는 자료형이 있다. 메서드에서 매개변수를 사용할 때도 자료형을 가지고 있다. 대부분은 하나의 자료형으로 구현한지만, 변수나 메서드의 자료형을 필요에 다라 여러 자료형으로 바꿀 수 있다면 프로그램이 훨씬 유연할 것이다. 이와 같이 어떤 값이 하나의 참조 자료형이 아닌 여러 참조 자료형을 사용할 수 있도록 프로그래밍하는 것을 '제네릭(Generic) 프로그래밍'이라고 한다. 제네릭 프로그램은 참조 자료형이 변환될 때 이에 대한 검증을 컴파일러가 하므로 안정적이다. 제네릭의 필요성 3D프린터를 예로 들어 제네릭에 대해 이해해보자 3D프린터는 재료를 가지고 입체 모형을 만드는 일을 한다. 프린터에 스이는 재료는 여러가지가 있을 수 있는데, 쌓아 올려 입..
-
Java - 기본 클래스(Class 클래스)5개발언어/JAVA 2023. 11. 6. 16:46
Class 클래스 자바의 모든 클래스와 인터페이스는 컴파일되고 나면 class 파일로 생성된다. 예를 들어 a.java 파일이 컴파일 되면 a.class 파일이 생성되고 이 class파일에는 클래스나 인터페이스에 대한 변수, 메서드, 생성자 등의 정보가 들어있다. Class 클래스는 컴파일된 class 파일에 저장된 클래스나 인터페이스 정보를 가져오는데 사용한다. Class 클래스란? 앞 전 까지의 Java 문법에 대한 게시물에 예시 코드에서는 변수를 선언할 때 자료형을 미리 파악하고 그 자료형에 따라 변수를 선언했다. 그리고 클래스를 사용할 대도 이미 그 클래스 정보(변수,매서드 등)를 알고 있는 상황에서 프로그램을 만들었다. 그런데 코드를 짜다 보면 어떤 경우에는 여러 클래스 주에 상황에 따라 다른 ..
-
Java - 기본 클래스(Wrapper 클래스)5개발언어/JAVA 2023. 11. 6. 15:07
Wrapper 클래스 기본 자료형을 위한 클래스 public void setValue(Integer i){...} //객체를 매개변수로 받는 경우 public Integer returnValue(){...} //반환 값이 객체형인 경우 보통 정수를 사용할 때는 기본형인 int를 사용했다. 그런데 정수를 객체형으로 사용해야 하는 경우가 있다 위와 같이 매개변수가 객체이거나 반환값이 객체형인 경우이다. 기본형 Wrapper 클래스 boolean Boolean byte Byte char Character short Short int Integer long Long float Float double Double 이를 위해 자바에서는 기본 자료형처럼 사용할 수 있는 클래스를 제공한다. 이러한 클래스를 기본 자료형..
-
Java - 기본 클래스(String 클래스)4개발언어/JAVA 2023. 11. 6. 14:09
String을 선언하는 두 가지 방법 String str1 = new String("abc"); //생성자의 매개변수로 문자열 생성 String str2 = "test" //문자열 상수를 가리키는 방식 String 타입의 변수를 생성하는 방식에는 두가지가 존재한다. 문자열을 생성자의 매개변수로 하여 생성하는 방식과 이미 생성된 문자열 상수를 가리키는 방식이 그것이다. 이 두 방식은 언뜻 비슷해 보이지만, 내부적으로는 두 가지 방식에 큰 차이가 있다. new 예약어를 사용하여 객체를 생성하는 경우는 "abc" 문자열을 위한 메모리가 할당되고 새로운 객체가 생성된다. 하지만 str = "test"와 같이 생성자를 이용하지 않고 바로 문자열 상수를 가리키는 경우에는 str2가 기존에 만들어져 있던 "test"..
-
Java - 기본 클래스(Objectd의 hashCode()메서드, clone()메서드)3카테고리 없음 2023. 11. 6. 11:45
hashCode()메서드 해시(hash)는 정보를 저장하거나 검색할 때 사용하는 자료구조 이다. 1)정보를 어디에 저장할 것인지, 2)어디서 가져올 것인지,해시 함수를 사용하여 구현한다. 해시 함수는 객체의 특정 정보(키 값)를 매개변수 값으로 넣으면 그 객체가 1)저장되어야 할 위치나 2)저장된 해시 테이블 주소(위치)를 반환한다. 따라서 객체 정보(키값)를 알면 해당 객체의 위치를 빠르게 검색할수 있다. 해시 함수[hash(key)]는 개발하는 프로그램 특성에 따라 다르게 구현된다. hashCode = hash(key); //객체의 해시 코드 값(메모리 위치 값)이 반환된다. 자바에서는 인스턴스를 힙 메모리에 생성하여 관리할 때 해시 알고리즘을 사용한다. Object 클래스의 toString()메서드..