본문 바로가기

전체 글176

(스프링 핵심 원리 - 기본편) 3-(7)좋은 객체 지향 설계의 5가지 원칙 적용, (8)IoC, DI, 그리고 컨테이너, (9) 스프링으로 전환하기 - 좋은 객체 지향 설계의 5가지 원칙 적용 어떻게 적용됐는지 알아보자 SRP : 한 클래스는 하나의 책임만 가져야 한다 클라이언트 객체는 기존에 직접 구현 객체를 생성, 연결, 실행하는 책임을 모두 가지고 있었음 SRP 단일 책임 원칙을 따를 수 있도록 관심사를 분리함 구현 객체를 생성하고 연결하는 책임은 AppConfig가 담당하도록 함 => 클라이언트 객체는 실행하는 책임만 담당하게 됨. DIP 의존관계 역전 원칙 : 프로그래머는 추상화에 의존해야지 구체화에 의존하면 안된다. 의존성 주입은 이 원칙을 따르는 방법 중 하나. 새로운 할인 정책을 적용하려면 클라이언트도 함께 변경해야 했음. 기존 클라이언트 코드(OrderServiceImpl)는 DiscountPolicy 추상화 인터페이스에만 의존하는 .. 2023. 4. 1.
패키지, import, 캡슐화, 접근제한자, 접근자, 설정자, static, JVM 메모리 구조 (Java) 접근 제한자접근제한을 할 때 패키지로도 접근제한 가능 패키지프로그램의 많은 클래스를 관리하기 위해 패키지 이용(컴퓨터의 폴더와 비슷)패키지는 클래스와 관련있는 인터페이스를 모아두기 위한 이름 공간(Name Space)패키지 구분은 .(dot) 연산자 이용 (컴퓨터에서 하위폴더 나타낼 때 \쓰는 것과 유사)패키지 이름은 시중에 나와 있는 패키지들과 구분되게 지어야함why ? 수백만개의 회사의 수많은 프로젝트들의 클래스 이름이 중복될 수 있기 때문에 패키지로 구분일반적으로 도메인.프로젝트이름.모듈이름ex. com.ssafy.project_이름.module_이름일반적으로 소속이나 회사의 도메인 사용중첩 가능(마치 컴퓨터의 하위폴더가 있듯이!)ex. List 사용 시 java.awt 안에 들어가 있는 것과 ja.. 2023. 4. 1.
[Java] 상속과 다형성 상속부모에서 private으로 막아놓은걸 자식이 오픈할 순 없음새로운 설계도를 만들 때 맨땅에서 새로 시작하는게 아니라 기존에 만들어둔 class에 플러스해서 새로운 걸 만들 수 있지 않을까? ⇒ 상속이란, 기존의 설계도를 재사용하기 위해 등장상속 : 어떤 클래스의 특성을 그대로 갖는 새로운 클래스를 정의한 것기존 클래스 : 상위 클래스, 부모클래스, super class상속받은 클래스 : 하위 클래스, 자식클래스, sub class⇒ 상속을 받은 자식 클래스를 호출하면 부모클래스를 먼저 호출. 부모클래스 도장 꽝 찍은 후 나머지 자식 클래스로도 도장 꽝!⇒ 그래서! 자식 클래스에서 부모클래스 내에 있던 메소드나 변수 볼 수 있는 거상속 안 받은 경우 : → 자동완성 창에 클래스 자기 자신의 이름이 뜸상.. 2023. 4. 1.
(스프링 핵심 원리 - 기본편) 3-(4)AppConfig 리택터링, (5)새로운 구조와 할인 정책 적용, (6) 전체 흐름 정리 - AppConfig 리팩터링 지금까지 만들어 놓은 AppConfig 를 살펴보면 중복도 있으며 역할에 따른 구현이 한 눈에 보이지 않는다. 현재 변경 후 이렇게 바꾸면 메서드명을 바꿈으로써 역할이 다 드러남. 나중에 db로 바뀐다면 AppConfig에서 memberRepository 메서드가 리턴하는 객체만 바꿔끼워주면 됨. 역할과 구현이 모두 한 눈에 드러나게 됨 => 애플리케이션 전체 구성이 어떻게 돼 있는지 한번에 파악 가능 - 새로운 구조와 할인 정책 적용 정액할인을 정률할인 정책으로 변경해볼 것. AppConfig만 변경하면 됨! AppConfig로 인해 객체를 생성하고 구성하는 영역과 애플리케이션이 사용되는 영역 이렇게 두 영역으로 크게 분리 됨. 할인 정책 변경하려면 AppConfig 부분.. 2023. 4. 1.
(스프링 핵심 원리 - 기본편) 3-(1)새로운 할인정책 개발, (2)새로운 할인 정책 적용과 문제점, (3)관심사의 분리 - 새로운 할인정책 개발 새로운 할인 정책 추가하려면 DIP, OCP를 지키지 못하는 문제 발생 => 이 문제를 해결하기 위해 여러 과정을 거치게 됨. => 새로운 할인 정책 : 기본 1000원 할인에서 10% 할인으로 변경하기 기존에 dicount package에 'RateDiscountPolicy' class를 만들고 기존의 DiscountPolicy Interface 를 implements 하기 class를 작성하고 Ctrl +Shift + T 를 눌러 Test생성하기 Test 작성하기 ( VIP라서 할인이 적용되는 경우와 적용되지 않는 경우 두가지 테스트) - 새로운 할인 정책 적용과 문제 새로운 할인 서비스를 적용하려면 OrderServiceImpl로 들어가야 함. OrderServiceImpl.. 2023. 3. 30.
(스프링 핵심 원리 - 기본편) 2-주문과 할인 도메인 (6) 설계 , (7) 개발, (8)실행과 테스트 - 주문과 할인 도메인 설계 주문과 할인 정책을 다시 떠올려보자. 회원 : 상품 주문 가능 회원 등급에 따라 할인 정책 적용 가능 할인 정책 : 모든 vip는 1000원 할인하는 고정 금액 할인 적용(변경 가능) 할인 정책 변경 가능성이 높음 클라이언트는 주문 생성 가능/주문 서비스는 주문 생성의 역할을 함 회원저장소에서 회원 조회 회원등급을 가지고 할인 정책 역할에 할인 적용할 수 있는지 물어보고 그 결과를 주문서비스가 받음(주문 서비스는 회원 등급에 따른 할인 여부를 할인 정책에 위임) 주문서비스는 최종적으로 할인까지 적용된 주문결과를 클라이언트에게 반환 위처럼 역할과 구현을 분리 => 자유롭게 구현 객체 조립 가능. 회원저장소와 할인정책 모두 유연하계 변경 가능 정액 할인 정책에서 정률 할인 정책으.. 2023. 3. 27.
알고리즘 - 퀵정렬 - 호어 파티션 방식 import java.util.Arrays; public class 퀵정렬_호어파티션 { static int[] arr; static boolean[] flag; public static void main(String[] args) { arr = new int[] {3, 1, 4, 6, 9, 2, 8, 7, 5}; flag = new boolean[arr.length]; hoare(arr, 0, arr.length-1); System.out.println(Arrays.toString(arr)); } public static void hoare(int[]arr, int left, int right) { //피봇 정하기(이 경우 제일 왼쪽값으로 정한 것.) int pivot = arr[.. 2023. 3. 27.
알고리즘 - 병합정렬 - 자바코드로 구현한 병합정렬 package day0322_분할정복; import java.util.Arrays; public class 병합정렬 { static int[] arr; static int[] result; public static void main(String[] args) { arr = new int[] {3, 1, 4, 6, 9, 2, 8, 7, 5}; result = new int[arr.length]; sort(arr, 0, arr.length-1); System.out.println(Arrays.toString(result)); } public static void sort(int[]arr, int left, int right) { if(left>=right) return; //분.. 2023. 3. 27.
알고리즘 - 백트래킹&순열 몇 개의 원소를 뽑을 지에 대해서 고정된 문제라면 for문을 여러번 써서 구현할 수 있으나, 매번 뽑아야 하는 원소의 수가 변경되는 경우라면 이 방법이 불가하다. 순열을 구현할 수 있는 다양한 방법을 고려해보자. - swap 메서드를 활용한 순열 구현 import java.util.Arrays; public class 순열_swap { static int[] nums; //배열 static int N; public static void main(String[] args) { nums = new int[] {1,2,3}; N = nums.length; perm(0); } //idx : 현재 판단 하는 위치 public static void perm(int idx) { //기저조건 //N번째까지 판단을 다 .. 2023. 3. 27.
알고리즘 - 조합 - 재귀를 활용한 조합 구현1 import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class 조합_재귀 { static String[] items = {"A", "B", "C", "D"}; static int N = items.length; static int R = 2; // 몇개의 원소를 고를 것인가 static String[] sel = new String[R]; //내가 선택한 원소 static List list = new ArrayList(); public static void main(String[] args) { combination(0, 0); for(String[] strs : list) { .. 2023. 3. 26.