전체 글
[Java] 백준 1967번 - 트리의 지름
https://www.acmicpc.net/problem/1967 1967번: 트리의 지름 파일의 첫 번째 줄은 노드의 개수 n(1 ≤ n ≤ 10,000)이다. 둘째 줄부터 n-1개의 줄에 각 간선에 대한 정보가 들어온다. 간선에 대한 정보는 세 개의 정수로 이루어져 있다. 첫 번째 정수는 간선이 연 www.acmicpc.net [ 1 ] 풀이 및 소스코드 - 트리의 지름은 모든 노드에 대해 DFS를 하여 트리에 존재하는 모든 경로 중 가장 긴 것(가중치가 큰 경로)을 찾음으로써 구할 수 있다. - 각 노드마다 DFS를 통해 연결된 노드들의 가중치를 더해가며 distance를 구하고, max를 업데이트 해 준다. - 모든 노드에 대해 DFS를 실행한 후의 max 값이 트리의 지름이 된다. - 각 노드와..

[Spring] 여러가지 DI 방법, 의존관계 자동 주입(@Autowired)
※ 본문은 인프런 김영한님의 스프링 강의를 바탕으로 학습한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] 여러가지 DI 방법 (1) 생성자 주입 - 생성자 호출 시점에 딱 1번만 호출되는 것이 보장되므로 불변, 필수 의존관계에 사용하는 것이 좋다. - 생성자가 1개만 있다면 @Autowired 를 생략할 수 있다. [ Config에서 DI ] @Bean public MemberRepository memberRepository() { return new MemberRepository(); } @Bean public MemberService memberService() { return new MemberService(memberRepository()); } [ 의존 자동주입 ] @C..

[Spring] 컴포넌트 스캔
※ 본문은 인프런 김영한님의 스프링 강의를 바탕으로 학습한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] 컴포넌트 스캔이란? 스프링 빈은 자바 설정 클래스에서 @Bean으로, 혹은 XML에서 으로 등록할 수 있다. 하지만, 등록해야 할 스프링 빈이 수십, 수백개가 된다면 수동으로 관리하기 힘들 것이다. 그래서 스프링은 설정 정보(@Bean, 등) 없이도 자동으로 스프링 빈을 등록해주는 '컴포넌트 스캔' 기능을 제공한다. 다음은 컴포넌트 스캔을 하는 방법이다. (1) 컴포넌트 스캔을 사용하기 위해서는 스프링 설정 클래스(AppConfig.java라고 가정)에 @ComponentScan 애노테이션을 붙여준다. (2) 컴포넌트 스캔은 @Component 애노테이션이 붙은 클래스를 스캔..

[Spring] 싱글톤 컨테이너
※ 본문은 인프런 김영한님의 스프링 강의를 바탕으로 학습한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! 스프링 컨테이너가 아닌, 순수한 DI 컨테이너 AppConfig(DI를 설정한 자바 클래스라고 가정)는 클라이언트가 요청을 할 때마다 새로운 객체를 생성하여 DI를 수행한다. 즉, 초당 1000개의 요청이 있다면 1000개의 객체가 생성된 후 소멸되며, 이는 결국 메모리 낭비를 유발한다. 이를 해결하기 위해 무수히 많은 요청이 있더라도 객체를 딱 1개만 생성한 후 해당 객체를 공유하도록 설계하는 싱글톤 패턴을 활용할 수 있다. [ 1 ] 싱글톤 패턴이란? 싱글톤 패턴은 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 즉, 자바에서는 하나의 JVM에 특정 객체의 인..

[Spring] 스프링 컨테이너(Spring Container)
※ 본문은 인프런 김영한님의 스프링 강의를 바탕으로 학습한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 1 ] 스프링 컨테이너란? 스프링 컨테이너는 애노테이션 기반의 자바 설정 클래스(@Configuration)나 XML을 기반으로 만들어지며 스프링 빈을 등록, 관리, 조회하는 기능을 제공한다. 스프링 컨테이너는 ApplicationContext 인터페이스로 만들 수 있으며 애노테이션 기반의 자바 설정 클래스를 사용한다면 AnnotationConfigApplicationContext 구현 클래스를, XML 기반이라면 GenericXmlApplicationContext 구현 클래스를 사용하면 된다. ※ 최근에는 XML 보다 스프링부트를 사용하여 애노테이션 기반의 자바 설정 클래스를 주로..

[Java] Set Interface - HashSet
※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! Java의 Set 인터페이스는 중복된 요소를 저장하지 않는 컬렉션이며, Set 인터페이스를 구현한 대표적인 클래스로는 HashSet이 있다. [ 1 ] HashSet HashSet은 내부적으로 HashMap을 이용해서 만들었으며, 해시 테이블 관련 내용은 해당 게시물을 참고하자. HashSet에 새로운 요소를 추가할 때에는 add() 나 addAll()을 사용하는데, 만약 set에 저장되어 있는 요소와 같은 요소를 저장하려고 시도하면 해당 메서드는 false를 반환하며 중복된 요소를 저장하지 않는다. List 인터페이스와 달리 HashSet은 내부적으로 HashMap을 이용하고 있어 저장순서를 유지하지 않으므로 저장순서를..

[용어 사전] 객체 지향 프로그래밍 - 추상화, 상속, 다형성, 캡슐화
※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! [ 0 ] 절차 지향 프로그래밍 절차 지향 프로그래밍(Procedural Programming)이란, 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되는 프로그래밍 기법이다. 절차 지향 프로그래밍은 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체 지향 프로그래밍에 비해 프로그램의 실행 속도가 빠르다는 장점이 있다. 하지만, 유지보수가 어렵고, 실행 순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 보장하기 어렵다는 단점이 있다. 대표적인 절차 지향 프로그래밍 언어로는 C언어가 있다. [ 1 ] 객체 지향 프로그래밍 객체 지향 프로그래밍(Object-Oriented Pr..

[Java] 스택(Stack)과, 큐(Queue)
※ 본문은 혼자 공부한 내용을 기록한 글입니다. 오개념이 있다면 댓글로 알려주세요! Stack과 Queue는 자료구조의 한 종류이다. Stack은 마지막에 저장한 데이터를 가장 먼저 꺼내는 LIFO(Last In First Out)구조로 되어 있고, Queue는 처음에 저장한 데이터를 가장 먼저 꺼내는 FIFO(First In First Out)구조로 되어 있다. 자바는 Stack과 Queue를 제공하고 있으며 Stack은 Vector를 상속받는 클래스이고, Queue는 Collection을 상속받는 인터페이스이다. [ 1 ] Stack 클래스 Stack은 마지막에 저장한 데이터를 가장 먼저 꺼내는 구조이므로 ArrayList와 같은 배열기반의 컬렉션 클래스로 구현하는 것이 적합하다. 배열에 순차적으로 ..