본문 바로가기

분류 전체보기

(80)
빈 초기화 콜백, 소멸전 콜백 스프링 컨테이너, 빈 생명주기 ​ 스프링 컨테이너의 생명주기 스프링 컨테이너 생성 => 스프링 빈 생성 => 사용 => 소멸 ​ 빈의 생명주기 스프링 컨테이너 생성 => 스프링 빈 생성 => 의존관계 주입 => 초기화 콜백 => 사용 => 소멸전 콜백 => 스프링 컨테이너 종료 ​ 지금까지 스프링 컨테이너 생성, 빈 생성, 의존관계 주입, 사용, 스프링 컨테이너 종료에 대해서는 알아보았는데 초기화 콜백과 소멸전 콜백 즉, 콜백에 대해서는 알아본 적이 없다. 실제로 우리가 콜백을 사용해야할 때 콜백을 어떻게 사용해야하는지 알아보자. 콜백을 이용할 수 있는 방법은 총 3가지인데 각각에 대해 알아보자 ​ 1. 인터페이스 (InitializingBean, DisposalBean) 첫번째는 Initializing..
같은 타입의 빈 등록(중복) 시작하기에 앞서, 스프링에서 연관관계를 주입할 때 해당 타입으로 된 객체가 많을 때 어떻게 처리할까? 예를 들자면, A 인터페이스에 구현체가 B, C라고 하자. 그리고 D라는 인터페이스를 구현한 E 객체가 B를 주입받고자 하는데, DIP를 준수하여 A를 주입받으려 한다. 하지만, A라는 인터페이스에는 B, C 두 개가 있고 스프링은 scan하면서 두 개를 발견하게 되어 문제가 생길 것이다. 이럴 때 어떻게 해결 할 수 있을까? 빈 2개 이상 살펴보기에 앞서, 다음과 같은 예제를 살펴보자 public interface EmployeeRepository { void save(Employee employee); Employee findById(Long employeeId); List findAll(); } @..
수동 빈 등록, 자동 빈 등록 시작하기에 앞서, 앞서 설명한 것처럼 스프링은 스프링 컨테이너가 자바 객체를 빈(Bean)으로 만들어 관리해준다. 이전과 같은 예제를 통해 스프링 컨테이너와, 빈에 대해 간단하게 리뷰 해보자. ​ public interface EmployeeRepository { void save(Employee employee); Employee findById(Long employeeId); List findAll(); } ​ public class EmployeeRepositoryImplement implements EmployeeRepository { private static Long sequence = 0L; private Map store = new HashMap(); @Override public void..
스프링 컨테이너, 빈 스프링 컨테이너, 빈 스프링은 여러 가지 SOLID 원칙을 준수하기 위해 IoC, DI 등을 핵심으로 삼고 있다. 이를 위해 스프링 컨테이너가 존재한다. 스프링 컨테이너는 위의 목적을 달성하기 위해 자바 객체를 컨테이너에 스프링이 직접 관리하게된다. 관리하는 이 자바 객체를 빈이라고 하고 이름과 객체 한 묶음으로 함께 저장한다. 쉽게 이해하기 위해 그림으로 표현하면 다음과 같다. ​
스택, 큐, 덱 스택, 큐, 덱 스택 (stack) 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조(LIFO - Last In First Out)으로 되어 있다. 데이터를 삽입하는 것을 흔히 Push, 데이터를 빼내는 것을 Pop이라고 하며 위에서 LIFO - Last In First Out라는 말에서 알 수 있듯이 가장 늦게 Push된 값이 Pop할 때 나오게 된다는 것이다. 그림으로 간단하게 살펴보자. ​ [스택] ​ 다음 그림과 같이 넣을 때는 가장 위에 Push가 되고 뺄 때는 가장 위에 있는 것이 Pop된다. 이러한 자료구조를 스택이라고하는데 파이썬으로 이를 살펴보면 다음과 같이 List로 쉽게 구현이 가능하다. stack = [] for i in range(1, 6): stack.append(i) res..
스프링의 핵심 시작하기에 앞서, 나는 스프링을 공부하기에 앞서 스프링의 핵심이 되는 3가지에 대해 먼저 알아보았다. ​ IoC (Inversion of Control) IoC란 제어의 역전이다 프로그램의 제어권은 보통 개발되는 애플리케이션에 존재하였는데 스프링에서는 DI 컨테이너가 객체의 생성, 초기화 서비스 소멸에 관한 모든 권한을 가지면서 객체의 생명주기를 관리한다. 이처럼 제어권한을 프레임워크가 소유한다는 것이 제어의 역전이다. ​ DI (Dependency Injection) DI란 말을 해석해보면 의존성 주입이다. 이는 IoC의 연장선이라고 볼 수 있는데, 원래 프로그램의 제어권을 애플리케이션이 들고있어 의존관계를 직접 관리했지만 스프링에서 제어권한이 프레임워크에게 넘어감으로써 필요한 의존관계를 DI 컨테이너..
객체지향이란? 시작하기에 앞서, 객체 지향 프로그래밍(Obejct Oriented Programming)이란, 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다. 그렇다면 자세히 객체지향의 핵심은 무엇일까? ​ ​ 객체지향 핵심 객체지향의 핵심이라 할 수 있는 4가지를 설명하자면 다음과 같다. ​ 추상화 캡슐화 상속 다형성 ​ 다음에 대해서 자세히 알아보자. 다음에 대해 설명하기 위해 간단한 예시를 통해 진행하려고 한다. 우리는 어떤 게임을 즐기려고 한다. 해당 게임에서는 다양한 직업을 선택하여 플레이할 수 있다. 우리는 일정 능력치를 가지게 되고 몬스터와 싸우기 위해 계속적으로..
연결리스트 시작하기에 앞서, 연결리스트(Linked List)란, 노드의 집합으로서 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료구조이다. 여기서 말하는 노드란 무엇일까? ​ 1. 노드 노드란, 다음 노드의 주소를 저장하고 데이터를 저장하는 데이터의 묶음이라고 볼 수 있다. 다음은 단일 연결리스트에서의 노드 모습을 볼 수 있다. [노드] ​ ​ 여기서 볼 수 있듯이 우리가 실제로 필요한 데이터를 Node 안의 Data에 담고 있는 모습을 볼 수 있으며 다음의 데이터를 참조하기 위해 다음 노드의 주소를 저장하는 Next를 담고 있는 모습을 확인할 수 있다. 그렇다면 실제로 연결리스트는 이러한 노드로 어떻게 이루어져 있는지 확인해보자. ​ ​ 2. 연결리스트 [연결리스트] ..