본문 바로가기

전체 글

(77)
[2022-1-12] 스프링 핵심원리 - 기본편 : 싱글톤 컨테이너 스프링 핵심원리 - 기본편 : 싱글톤 컨테이너 웹 애플리케이션과 싱글톤 스프링을 사용하지 않은 순수한 DI컨테이너 AppConfig를 만들었다. @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); // 호출할때마다 객체 생성 MemberService memberService1 = appConfig.memberService(); MemberService memberService2 = appConfig.memberService(); //참조값이 다른 것을 확인 Assertions.assertThat(memberService1).isNotSameAs(memberService2);..
[2022-1-10]스프링 핵심원리 - 기본편 : 스프링 컨테이너와 스프링 빈 (2/2) / 프로그래머스 코딩테스트 연습문제 - 실패율 스프링 핵심원리 - 기본편(스프링 컨테이너와 스프링 빈 2/2) 부모 타입으로 조회 컨테이너에서 특정 Bean을 조회할 때, 상속관계에 대해서 조회하려고 하는 Bean과 이 객체를 상속받는 모 든 Bean을 동시에 조회한다. 아래 코드는 테스트를 위해 만든 TestConfig 클래스이다. @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy(); } @Bean public DiscountPolicy fixDiscountPolicy() { return new FixDiscountPolicy(); } } 이 TestConfig를 통해 컨테이너를 ..
[2022-1-9]프로그래머스 레벨1 10문제 오늘은 프로그래머스 1단계에서 특히 풀이가 간단한 문제 10개를 풀어봤다. 대부분 어렵지 않게 풀었지만 새로 알게된 부분도 있어서 정리해보려한다. 프로그래머스 코딩테스트 연습문제 https://programmers.co.kr/learn/courses/30/lessons/77884 코딩테스트 연습 - 약수의 개수와 덧셈 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주 programmers.co.kr 일정범위의 양수들에서 각각의 약수의 개수를 구해 짝수면 더하고 홀수는 빼는 문제였다. 약수를 구하는 가장 빠른 방법은 양수 n 을 제..
[2022-1-8] 스프링 핵심 원리 - 기본편 : 스프링 컨테이너와 스프링 빈 (1/2) / 프로그래머스 연습문제 - 폰켓몬(Set, HashSet) 스프링 핵심 원리 - 기본편(스프링 컨테이너와 스프링 빈 1/2) 저번시간에 AppConfig에 @Configuration 과 @Bean 애너테이션을 추가해서 ApplicationContext를 통해 스프링 컨테이너를 생성했다. 오늘은 컨테이너가 생성되면 어떻게 Bean이 생성되고 조회할 수 있는지 공부했다. AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); 이 코드를 통해 스프링 컨테이너를 생성한다. 스프링 컨테이너 안에는 Spring Bean 저장소가 있다. 컨테이너를 생성할 때 파라미터로 넘어온 AppConfig 클래스 통해 스프링 빈을 등록한다. 빈의 이름은 @Bean으로 등..
[2022-1-7] 프로그래머스 연습 문제 - 소수 만들기(조합, DFS 응용) 매일 공부 시작전에 프로그래머스 문제를 하나씩 풀고 있다. 오늘은 내적을 푸는 날이었는데 문제가 너무 쉬워서 다음문제도 풀어보았다. 문제 이름은 소수 만들기 였다. 정수배열에서 세가지 수를 뽑아 그 합이 소수인 개수를 구하는 문제였다. 이를 위해 일단 정수 배열에서 세개의 중복없는 수를 뽑아야 했고(조합) 그 수들의 집합의 합을 구해야 했다. 고등학교 때 이후로 순열 조합과 담쌓은지 오래돼서 기억을 되돌는데 오래 시간이 걸렸다. 그 후 조합을 구하는 알고리즘을 검색해 봤는데 DFS를 응용해서 구할 수 있다고 한다. 근데 이문제를 풀 때 DFS를 어떻게 응용해야 풀 수 있다는 건지 이해가 잘 안됐다. 그래서 재귀를 이것 저것 다뤄보다가 결국 소 뒷걸음치다가 맞아서 아래와 같은 코드를 풀 수 있었다. cla..
[2022-1-6] 스프링 핵심 원리 - 기본편 : 프레임워크, IoC, DI 2022.01.05 - [TIL] - [2015-1-5]문제를 똑바로 읽자 / 스프링 핵심원리 기본편 AppConfig 구현 [2015-1-5]문제를 똑바로 읽자 / 스프링 핵심원리 기본편 AppConfig 구현 문제를 똑바로 읽자 오늘 푼 프로그래머스 문제는 없는 문제 더하기 였다. 문제 자체는 엄청 쉬웠기 때문에 빠르게 풀었다. 다만 문제의 요구사항 에서, 배열 numbers 의 모든 수는 다르다는 조건 unannn.tistory.com 어제, 구현객체에서 다른 구현 객체를 생성, 연결하는 역할을 AppConfig 에게 위임하고, 구현 객체에서는 프로그램의 로직만을 담당하도록 리팩토링 했다. 이 과정에서 어떻게 OCP 가 지켜지는지, DIP가 어떻게 이루어질 수 있는지 확인했다. 제어의 역전 이처럼 ..
[2022-1-5]문제를 똑바로 읽자 / 스프링 핵심원리 기본편 AppConfig 구현 문제를 똑바로 읽자 오늘 푼 프로그래머스 문제는 없는 문제 더하기 였다. 문제 자체는 엄청 쉬웠기 때문에 빠르게 풀었다. 다만 문제의 요구사항 에서, 배열 numbers 의 모든 수는 다르다는 조건이 있었다. 나는 당연히 중복을 허용하지 않을 것이라고 속단하고 중복까지 생각한 코드를 짰는데, 다른사람의 코드가 너무 짧은 것을 보고 조건을 잘못 알았다는 것을 알아차렸다. 이 문제같은 경우에는 쉬워서 크게 문제가 안됐지만 과거에도 문제를 잘못 파악해 원래 문제가 요구하는 것보다 어렵게 풀거나, 잘못 풀고 문제를 다시 파악해 수정하는 경우가 많았기 때문에 오늘 실수가 크게 느껴졌다. 앞으로 풀게될 문제들은 적어도 문제를 잘못읽어서 해매지 않도록 꼭 꼼꼼히 요구사항을 확인해야겠다. 나중에 코테를 볼때도, 취업을..
[2022-1-4] Stack<E> 뜯어보기 오늘 프로그래머스에서 푼 크레인 인형뽑기 게임 은 Stack을 쓰면 매우 쉽게 풀리는 문제였다. Stack 객체를 생성하여 풀었는데 Stack의 개념은 학교에서 배워서 알고있었지만 c언어로만 구현해 봤을 뿐 자바에서 사용해본 것은 처음이라 이번에 사용하면서 Stack 클래스가 어떻게 동작하는지 알아봤다.(문제 풀이는 하단에) Stack 클래스는 Vector클래스를 상속받는다. Vector 클래스에서 protected Object[] elementData 로 선언된 객체 배열에 데이터를 저장하게 된다. 처음 Vector를 봤을 때 이게 도대체 뭔가했더니 그냥 배열이었다. elementCount는 배열에 추가된 객체의 개수이고 capacityIncrement 는 배열이 꽉 찼을 때 더해주는 크기이다. Sta..