본문 바로가기

분류 전체보기

(386)
[Spring] Bean Scope의 종류 스프링 빈은 기본적으로 싱글톤 스코프로 설정된다. 하지만 필요에 따라 비싱글톤이 필요한 경우도 많다. 스프링이 지원하는 Bean Scope의 종류에 대해 알아보자! Scope의 종류 싱글톤 스코프: 스프링에서 기본으로 설정되는 스코프. 스프링 컨테이너의 시작부터 종료까지 하나의 객체로 유지된다. 프로토타입 스코프: 스프링 컨테이너는 프로토타입 스코프의 생성과 의존관계 주입, 초기화까지만 관여한다. 이후로 더 관여하지 않고, 프로토타입을 받은 클라이언트가 객체를 관리해야 한다. 따라서 @PreDestroy 같은 종료 메소드가 호출되지 않는다. 또한 싱글톤과는 다르게 요청이 오면 계속 새로운 객체를 생성 후 반환한다. 웹 reqeust: 각각의 요청이 들어오고 나갈때까지 유지된다. session: 세션이 생..
[Spring] Bean Life Cycle(생명주기) 스프링 빈은 기본적으로 [객체 생성 -> 의존관계 주입]이라는 생명주기를 가진다. 예외적으로 생성자 주입만이 객체 생성과 의존 관계 주입이 동시에 일어나는데, 이는 생성자 호출이 될 때 의존관계가 존재하지 않는다면 객체 생성이 불가능하기 때문이다. 하지만 setter 주입이나 field 주입의 경우, 의존관계 없이도 객체를 먼저 생성하는 것이 가능하다. 따라서 객체 생성 후 의존관계를 주입하게 된다. 스프링 빈 이벤트 라이프 사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 메소드 호출 -> 사용 -> 소멸 전 콜백 메소드 호출 -> 스프링 종료 초기화 콜백 메소드 : 빈 생성 -> 의존관계 주입 후 호출된다. 소멸 전 콜백 메소드 : 빈이 소멸되기 직전에 호출된다...
[Spring] 스프링에서 의존성을 주입하는 방법 스프링에서는 내부에서 new를 통해 의존성 객체를 직접 생성해서 쓰는 방법을 이용하지 않고, 외부에서 의존성을 주입해주는 방법을 통해 모듈 간 결합도를 낮추고 유연성을 높일 수 있다는 얘기를 했었다. 스프링에서는 Bean으로 등록되면 IoC 컨테이너가 알아서 의존성 주입을 해준다! Bean은? 스프링 컨테이너가 생성 및 관리하는 객체를 의미한다. IoC 컨테이너에 등록된 Bean들은 스프링이 의존성 주입 및 관리를 해주게 된다. Bean은 default 싱글톤 패턴으로 관리된다.(싱글톤 패턴이란 객체가 여러 차례 호출되어도, 한번만 생성한 후 참조하도록 하는 것이다) 스프링 IoC 컨테이너는? Bean의 생성 및 의존성을 관리한다. 스프링 컨테이너(IoC 컨테이너)의 종류는? 1) BeanFactory ..
[기출 상] 집으로 가는 길(사다리 타기 문제) - 정렬 [문제] 초기의 사람 배치 순서를 입력받아 각 사람이 자신의 집으로 돌아갈 수 있게 하는 최소 개의 다리의 수를 return 하도록 해라. 예를 들어 [3, 2, 1, 4] 의 순서대로 있는 사람이 [1, 2, 3, 4]의 자신의 집으로 돌아가기 위해 놓아야 하는 최소한의 사다리 개수는 3개이다. [풀이] 사다리 문제의 규칙을 알아내는 것이 중요하다. 사람이 3, 2, 1, 4의 순서로 배치되어있다고 하자. 3과 2 사이에 사다리를 하나 놓으면 [2, 3, 1, 4]로 사다리 왼쪽, 오른쪽 순서가 바뀌는 것을 알 수 있다. 3과 1 사이에 하나 더 놓으면 [2, 1, 3, 4]로, 2와 1 사이에 하나 더 놓으면 [1, 2, 3, 4]로 순서가 바뀌므로 최소 3개의 사다리를 놓아야 한다. 따라서 이는 정..
[Spring] IoC와 DI 스프링의 핵심 개념을 나타내는 삼각형 중 가장 처음에 접해볼 만한 IoC와 DI에 대해 이해해보자. DI(Dependency Injection) : 의존성 주입. 의존성이 뭐길래 의존성을 주입한다는 걸까? 먼저 의존성에 대한 이해를 돕기 위해 다음과 같은 코드가 있다고 하자. 개발자가 카페를 생성하고, 카페는 내부적으로 오늘의 커피로 아메리카노를 생성한다. Cafe 객체가 Americano 객체를 사용하는 것은, 다른 표현으로는 Cafe가 Americano에 의존한다고 얘기할 수 있다. 이 경우, 개발자가 직접 new 를 이용해서 아메리카노 객체를 생성하고 있으므로, 내부에서 의존성을 만들고 있다고 볼 수 있다. public class Cafe { private Coffee today; public Ca..
[기출 상] 주울 수 있는 최대 돈 1 - 동적계획법 [문제] 일렬로 놓아진 돈에 대해서, 연속으로 3개의 돈을 가질 수 없을 때 최대로 주울 수 있는 돈의 액수를 구하는 프로그램을 작성해라. [풀이] 동적계획법 문제로 이전에 풀었던 포도주 시식 문제와 동일하다. https://stritegdc.tistory.com/44 [c++] 백준 2156 포도주 시식 백준 단계별로 풀어보기 [동적계획법 1] 포도주 시식 https://www.acmicpc.net/problem/2156 2156번: 포도주 시식 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도 stritegdc.tistory.com [코드] #include #include #define max(x,y) (x>y)?x:y using namespace std; /..
[기출 상] N개의 작업공정 - 위상정렬 [문제] N개의 작업공정이 있다. 공정마다 소요시간이 있고, 선행관계가 있다면 반드시 선행 공정이 끝나야만 다음 공정으로 넘어갈 수 있다. 임의로 주어지는 공정에 대해 목표되는 공정까지 소요되는 최소시간을 구하는 프로그램을 작성하라. 첫째줄에 공정수(N), 관계수(R)를 입력한다. 그 다음줄에 공정에서 소요되는 시간 N개를 입력하고, 그 다음 줄부터 공정간의 관계를 R줄에 걸쳐 입력한다. 공정간의 관계는 "선행공정번호 후행공정번호"순으로 입력한다. 그 다음줄에 목표되는 공정 번호를 입력한다. [풀이] 공정 간 선후행관계가 있고, 이를 반드시 지켜야하므로 위상정렬 알고리즘을 이용해 풀 수 있다. 먼저 진입차수가 0이면 선행공정이 없다는 의미이므로 time[i]에 n[i] 값을 넣는다.(time[i]는 i ..
[기출 상] 단어 게임 [문제] 영희와 철수는 단어게임을 하고 있다. 영희가 첫글자를 말하면, 철수는 그 글자로 시작하는 단어를 얘기해야 한다. 단, 단어는 미리 주어진 단어목록에서 선택해야 하며, 동일한 첫글자를 가진 단어가 여러개 있다면, 각 단어는 최소 횟수로 말한 것이여야 한다. 횟수가 똑같다면 알파벳 순으로 결정한다. [코드] // 실제 시험에서는 Solution 클래스의 solution 함수를 사용합니다. 이를 감안하여 풀이해주세요. #include #include using namespace std; void solution(int k, int n, vector word, vector first_word){ //각 단어는 최소 횟수로. 같은 횟수면 알파벳 순으로. sort(word.begin(), word.end(..