스프링에는 4가지 정도의 의존관계 주입 방법이 있다. 생성자 주입 수정자 주입 필드 주입 일반 메서드 주입 일반 메서드 주입은 잘 사용하지 않기 때문에 위 세가지만 다뤄보자. 생성자 주입 대다수 개발자가 가장 선호하는 의존관계 주입 방법일 것이다. 객체 의존관계의 불변성을 보장받을 수 있고 테스트 코드를 작성할 때 객체 의존관계를 설정하기 편리하다. 또한 필드에 final 키워드를 추가하면, 생성자 주입을 이용할 때 필요한 의존 객체를 전달받지 못했을 경우 컴파일 에러가 발생하게끔 유도할 수 있다. 롬복에서는 @RequiredArgsConstructor 어노테이션을 사용하면 final 필드를 이용한 생성자를 생성해준다. @RequiredArgsConstructor 또는 @AllArgsConstructor..
분류 전체보기

특정 정점을 제거했을 때 트리의 수가 증가한다면, 해당 정점을 단절점이라고 표현한다. 단절점을 구하기 전에 먼저 해야 할 일이 있다. 위와 같은 트리가 주어졌다고 했을 때 우리는 DFS를 수행하면서 방문 순서를 기록해야 한다. 방문 순서를 확인하면 단절점의 특징을 찾을 수 있다. 1번 노드는 루트 노드이고 자식 노드가 두 개 이상이다. 또한 1번 노드는 단절점이다. 2번 노드의 자식 노드들(3, 4)은 2번 노드를 거치지 않고 1번 노드로 갈 수 없다. 또한 2번 노드는 단절점이다. 5번 노드의 자식 노드들(6, 7)은 5번 노드를 거치지 않고 1번 노드로 갈 수 없다. 또한 5번 노드는 단절점이다. 정리해보면 루트 노드는 자식 노드가 둘 이상이면 무조건 단절점이다. 특정 노드의 자식 노드들이 해당 노드..
스프링의 빈을 등록하려면 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열해야 한다. 그런데 만약 빈의 개수가 많아지면 일일이 하기 귀찮아진다. 그래서 스프링은 설정 정보가 없어도 빈을 등록할 수 있는 컴포넌트 스캔이라는 기능을 제공한다. 말 그대로 전체 파일을 스캔해서 빈을 등록하는 것으로, 스캔 범위를 제한하거나 스캔에서 제외하고 싶은 대상을 특정할 수도 있다. 이전의 AppConfig가 아닌 컴포넌트 스캔을 이용한 AutoAppConfig 클래스를 작성해보자. @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.cl..

싱글톤을 이용하면 시스템 내에서 객체 인스턴스의 유일함을 보장할 수 있고 객체 생성 비용이 절약되며, 자원을 공유하기 좋다. 이러한 장점 때문에 싱글톤은 자주 언급되고 유명한 디자인 패턴이기도 하다. 하지만 싱글톤 패턴도 단점이 있다. 다음과 같이 싱글톤을 구현했다고 가정해보자. public class SingletonService { private static final SingletonService instance = new SingletonService(); private SingletonService() {} public static SingletonService getInstance() { return instance; } } 이런 싱글톤 패턴은 생각보다 많은 단점이 있는데 싱글톤 패턴을 구현하..
개 킹 받는 매개변수 탐색 문제 풀이를 자세하게 작성해보았다. 문제 도현이의 집 N개가 수직선 위에 있다. 각각의 집의 좌표는 x1, ..., xN이고, 집 여러 개가 같은 좌표를 가지는 일은 없다. 도현이는 언제 어디서나 와이파이를 즐기기 위해서 집에 공유기 C개를 설치하려고 한다. 최대한 많은 곳에서 와이파이를 사용하려고 하기 때문에, 한 집에는 공유기를 하나만 설치할 수 있고, 가장 인접한 두 공유기 사이의 거리를 가능한 크게 하여 설치하려고 한다. C개의 공유기를 N개의 집에 적당히 설치해서, 가장 인접한 두 공유기 사이의 거리를 최대로 하는 프로그램을 작성하시오. 입력 첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈칸을 사이에 ..