전체 글 211

2. Adapter : 사이에 끼워 재사용

1. Adapter 패턴 재사용성 향상 종류 상속 사용 : class에 의한 패턴 포함관계 사용 : instance에 의한 패턴 - 이게 더 유연, 많이 사용. 데코레이터 패턴과 같이 사용 가능해짐 java는 다중 상속이 안되기 때문에 포함 관계를 이용해서 해결한다. Wrapper 패턴이라고도 불린다. 2. 구현 코드 3. 장점 왜 그냥 프로그래밍하면 되지 adapter 패턴 같은 걸 생각해야하냐? 이미 존재하는 class를 이용하는 경우 (재사용하고 싶을 때) 해당 패턴 사용시 빠르게 필요 메서드 사용이 가능해짐 그리고 이미 존재하는 것이라 검증되 됨 주의 보통 우리는 기존 클래스 소스를 만져서 수정을 한다. 하지만 그렇게 하면 동작 테스트가 이미 끝난 기존 클래스에 손을 댔으니 수정한 후에 다시 테스..

1. Iterator - 처리를 반복한다.

1. Iterator 패턴 for문의 int i를 추상적으로 일반화 한 것 종류 Iterator 향상된 for문 iterator를 가지고 있는 type 배열 : hasnext()가 없다. 대신 향상된 for문으로 사용 Collection : 향상된 for문 사용 가능 직접 Iterator 패턴 구현 2. 실제 구현 코드 // github 링크 현재 코드가 문제가 있음 BookShelfIterator가 BookShelf를 땡겨서 쓰는 것이 아니고 BookShelf에게 시켜야된다. 이게 과제 : 뭔가 중간에 관리해주는 친구가 필요 3. 해당 패턴 장점 왜 Iterator와 같이 번거로운 방식을 사용? 구현과 분리하여 반복할 수 있기 때문 bookShelf 구현체가 변경이 되어도 while loop는 정상 동..

0. UML 및 기초

1. UML 시스템 개발을 위한 시각적인 설계 표기 UML은 표준화된 모델링 언어 : 시각화, 명세화, 구축, 문서화 언어이다. 2. UML 다이어 그램 유스 케이스 클래스 순차 통신 활동 상태 컴포넌트 배치 패키지 3. 객체 지향 모델링 모델링 : 개발하고자 하는 프로그램을 시각적으로 표현한 것 객체 지향 모델링 : 객체 지향 시스템을 가시화하고 명세화, 문서화 하는 것이 목적인 모델링 소프트웨어 모델링 : 실제 생활에 일어나는 일을 소프트웨어적으로 모델링한 것 시스템 설계 시, 중요점 : 신뢰성, 확장성(유지보수) 4. 객체, 클래스, 메시지 메시지 객체간의 협력하기 위한 상호작용 수단 한 객체가 다른 객체에게 작업을 요청하는 신호 객체 1가지의 역할만 가지고 변하는 것과 변하지 않는 것을 분리시켜야..

⭐️ 스프링 핵심 원리 이해 5 - 컴포넌트 스캔

1. 컴포넌트 스캔과 의존관계 자동 주입 컴포넌트 스캔 필요성 등록해야 할 spring bean이 수백개가 되면 일일이 등록하기 힘들고, 설정 정보도 커지고, 누락하는 문제도 발생 bean 등록을 해주는 컴포넌트 스캔과 더불어 의존관계를 주입 해주는 @Autowired도 제공 @Bean 등록 Overiding, 예외 처리 조건 SpringBootApplication 실행 시 : 동일 @Bean 명일 경우 NoUniqueBeanDefinitionException 발생 SpringApplication 실행 시 : 동일 @Bean 명이여도 overriding 해버림 - 위험 단위 Test 실행 시 : 동일 @Bean 명이여도 overriding 해버림 - 위험 Spring Test 실행 시 : 동일 @Bean..

framework/spring 2023.10.28

스프링 핵심 원리 이해 4 - 싱글톤 컨테이너

발생 원인 순수 자바 컨테이너로 만들었던 AppConfig를 웹 애플리케이션으로 직접 사용하면 요청할 때마다 설정파일 내의 객체를 새로 생성하고 삭제하는 과정을 거친다. 메모리 낭비가 심하다. @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer(){ AppConfig appConfig = new AppConfig(); MemberService memberService1 = appconfig.memberService(); MemberService memberService2 = appconfig.memberService(); assertThat(memberService1).isNotSameAs(memberService2); } 해결방안 해당 객체를 1개..

framework/spring 2023.10.27

스프링 핵심 원리 이해 3 - 스프링 컨테이너와 스프링 빈

0. 흐름 AppConfig 변화 AppConfig의 return type이 구체 클래스여도 작동에는 문제가 없지만 설정파일에서는 역할과 구현이 분리가 되어야 한눈에 파악이 쉽기 때문에 스프링 추상클래스로 나타낸다. @Configuration public class AppConfig{ // service @Bean public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } @Bean public Orderservice orderService(){ return new OrderServiceImpl(memberRepository(), discoutnPolicy()) } // 객체 @Bean public M..

framework/spring 2023.10.27

스프링 핵심 원리 이해 0 - 객체지향 설계와 스프링

1. EJB 단점 : 웹 관련 기술과 ORM의 기술을 제공하지만 너무 복잡하고 EJB에 의존적 대안책 : 스프링(웹 관련 기술), 하이버네이트(ORM 기술 == JPA) 스프링 : EJB 없이도 자바로만 가지고 충분히 고품질의 확장 가능한 애플리케이션 개발할 수 있음을 보여줌. EJB 컨테이너 대체 단순함 현재 표준 기술 하이버네이트(JPA) : 하이버네이트 JPA의 새로운 표준 정의 EJB EntityBean 기술 대체 JPA 표준 정의 EJB EntityBean -> 하이버네이트 -> JPA(인터페이스) JPA의 90%는 하이버네이트로 구현 2. Spring 하나가 아닌 여러기능들의 모음 2.1. Spring Framework Spring의 여러 기능들 중 핵심 핵심 기술 : 스프링 DI 컨테이너(b..

framework/spring 2023.10.27

lv1. 두 정수 사이의 합

1. 문제 문제 설명 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 제한 조건 a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요. a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다. a와 b의 대소관계는 정해져있지 않습니다. 입출력 예 a b return 3 5 12 3 3 3 5 3 12 2. 내 풀이 import java.util.stream.LongStream; class Solution { public long solution(int a, int b) { if (a == b) return a; else if..

lv1. 정수 내림차순으로 배치하기

1. 문제 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.제한 조건 n은 1이상 8000000000 이하인 자연수입니다. 입출력 예 n return 118372 873211 2. 내 풀이 import java.util.*; class Solution { public long solution(long n) { long answer = 0; if (n 8000000000L) return -99999L; List list = new ArrayList(); while (n != 0) { list.add(n % 10); n /= 10; } Colle..