SPRING/Spring Basic 15

[Spring] Bean 생명주기 콜백 ( @PostConstruct, @PreDestory )

Bean은 [ 객체 생성 -> 의존관계 주입 -> 스프링 컨테이너 상주 -> 소멸 ] 의 과정을 거친다. Bean은 스프링이 대신 생성해주므로, 초기화 작업과 종료 작업이 원할히 진행 될 수 있도록, 스프링은 의존관계 주입 된 이후와 소멸되기 직전에 개발자가 특정한 로직을 수행시킬 수 있도록 '콜백(CallBack)'을 제공한다. 초기화 작업은 생성자 로직에 포함시킬 수는 있지만 초기화 과정이 무거운 경우, 객체 생성과 초기화 작업을 분리하는 것이 좋다. 이 경우, Spring이 제공하는 초기화 콜백을 사용하는 것이 좋다. 콜백을 제공하는 방식은 3가지가 있다. 1) InitializingBean, DisposableBean 인터페이스 2) @Bean(initMethod = "init", destroyM..

SPRING/Spring Basic 2024.02.06

[Spring] Bean 자동등록 VS Bean 수동등록

어노테이션으로 스프링 컨테이너에 Bean을 등록하는 방법은 2가지가 있다. 1) 컴포넌트 스캔으로 자동등록 ( @Component, @Service, @Repository ... ) 2) @Configuration 클래스에 수동등록 ( @Bean ) 두 가지 방식은 언제 어떻게 사용하는 것이 좋을까? 1) 업무로직 VS 기술지원 자동방식은 컴포넌트 스캔으로 @Component로 선언된 클래스를 자동으로 Bean으로 등록하니 편하다. 그러나 @Component가 여기저기 퍼져 있어 추적이 힘들다. 수동방식은 @Configuration 클래스를 생성하고 Bean을 하나하나 정의해야 하는 번거로움이 있지만 하나의 클래스에 Bean이 모여 있다보니 관리가 쉽다. 그러므로 자동등록 방식은 업무로직 Bean에 사용..

SPRING/Spring Basic 2024.02.06

[Spring] 스프링 컨테이너와 싱글톤 패턴

싱글톤 패턴 가장 단순한 방식으로 싱글톤 패턴이 적용된 클래스는 다음과 같다. 1. Static 영역에 상수로 인스턴스가 생성되어야 한다. 2. 생성자는 private 접근자로 막아놓는다. 3. 인스턴스는 static 메소드로만 외부 접근을 허용한다. public class Box { // 1. statice 영역에 상수로 객체를 생성한다. private static final Box instance = new Box(); // 2. 생성자는 private 접근자로 막아놓는다. private Box(){ } // 3. 인스턴스는 static 메소드로 조회한다. public static Box getBox(){ return instance; } } 웹에서 싱글톤 객체가 중요한 이유는 수많은 Request가..

SPRING/Spring Basic 2024.02.05

[Spring] 스프링을 사용하는 이유

스프링(Spring)을 사용하는 이유 스프링을 사용하는 이유는 객체(Bean) 생성과 의존관계 주입(DI)을 대신 해주기 때문이다. ( IOC, 제어의 역전 ) 그렇다면, 개발에서 객체생성과 의존관계 주입을 대신 해주는 프레임워크가 필요한 이유는 무엇일까? Spring은 객체지향개발을 도와주는 프레임워크이다. 객체지향개발에서 핵심은 객체 간 결합도를 줄이는 것이다. public class Computer { MouseA mouseA = new MouseA(); // MouseA에 의존, 결합도 증가 public void click(){ mouseA.click(); // MouseA에 의존 } } 컴퓨터 객체가 마우스 객체를 참조하면 클릭 기능을 사용할 수 있다. 그러나 위 코드와 같이, 컴퓨터가 특정 마..

SPRING/Spring Basic 2024.02.01

[Spring] 필드주입방식이 권고되지 않는 이유

https://lordofkangs.tistory.com/406 [Spring] 의존성 주입이란? ( Dependency Injection ) Spring의 핵심개념은 의존성 주입(DI)이다. 의존이란,A의 기능이 동작하려면 객체B가 존재해야 함을 의미한다. 예를들어, Controller는 웹화면을 구성하는 역할을 한다. 화면을 구성하려면 서비스에 lordofkangs.tistory.com 지난 포스팅에서 의존성 주입에 대해서 알아보았다. 의존성 주입(DI)은 세가지 방식으로 이루어진다. 1) 생성자 주입방식 ( final ) 2) 필드 주입방식 ( @Autowired ) 3) 수정자 주입방식 ( Setter ) 세가지 방식 중 '필드주입방식'은 권고되지 않는다. 권고되지 않는 이유를 생성자,수정자 주입..

SPRING/Spring Basic 2023.06.23

[Spring] 의존성 주입이란? ( Dependency Injection )

Spring의 핵심개념은 의존성 주입(DI)이다. 의존이란,A의 기능이 동작하려면 객체B가 존재해야 함을 의미한다. 예를들어, Controller는 웹화면을 구성하는 역할을 한다. 화면을 구성하려면 서비스에 맞는 데이터를 전달 받아야 한다. 그러므로 Controller는 데이터를 서비스에 맞게 처리하는 로직을 가지고 있는 Service에 의존한다. Service는 데이터가 필요하므로 데이터를 가져오는 기능을 갖는 Repository에 의존한다. 이처럼, 객체지향구조는 서로 '의존'하고 있는 구조이다. 그러나 의존을 주입하는 코드를 개발자가 직접 구현하면 객체를 직접 관리해야 하고 객체간 결합도가 증가시킬 수 있다. Spring 프레임워크 존재 이유는 여기에 있다. Spring은 컨테이너라는 공간이 있다...

SPRING/Spring Basic 2023.06.20

[스프링] 제어의 역전(IOC)이란?

스프링의 핵심 개념인 제어의 역전(IOC)에 대해서 알아보겠다. 제어의 역전(Inversion of Control) 제어(Control)란 무엇일까? 아래 코드를 살펴보자. public class A { B b = new B(); // B 객체 생성 } 1. 생성할 권리 new 연산자로 객체 B를 생성했다. 이는 생성할 권리이다. 2. 접근할 권리 A클래스는 B객체가 저장된 Heap 메모리 주소를 b 참조변수(멤버변수)로 갖는다. 고로, A 클래스의 객체는 B객체에 접근할 권리를 갖는다. 이렇듯, 생성할 권리와 접근할 권리를 통틀어 '제어(Control)'이라 부른다. A는 B를 생성하고 접근할 권리를 갖는다. 그러나 여기서 한 가지 문제점이 발생한다. B는 오로지 A가 있어야 존재하고 A만 접근 가능하..

SPRING/Spring Basic 2022.02.15

[스프링] 스프링 라이브러리 설치하기 ( Maven )

[스프링] 어플리케이션 컨텍스트 ( Application Context ) [스프링] 프레임워크란 무엇인가? ( 제어의 역전 (IOC) ) 스프링은 '프레임워크(FrameWork)'이다. 프레임워크가 개발자의 작업을 도와준다는 말을 많이 들어봤을 것이다. 어떻게 도와준다는 말일까? ' lordofkangs.tistory.com 지난 포스팅에서 프레임워크의 핵심 원리인 '제어의 역전(IoC)'을 구현하는 어플리케이션 컨텍스트에 대해서 알아보았다. 그럼 이번 포스팅에서는 Maven으로 Spring 라이브러리를 추가한 후, 어플리케이션 컨텍스트를 실제로 생성해보겠다. Maven으로 Spring 라이브러리 추가하기 어플리케이션 컨텍스트를 사용하려면 어플리케이션 컨텍스트 기능이 담긴 인터페이스가 필요하다. 표준 ..

SPRING/Spring Basic 2021.08.12

[스프링] 어플리케이션 컨텍스트 ( Application Context )

[스프링] 프레임워크란 무엇인가? ( 제어의 역전 (IOC) ) 스프링은 '프레임워크(FrameWork)'이다. 프레임워크가 개발자의 작업을 도와준다는 말을 많이 들어봤을 것이다. 어떻게 도와준다는 말일까? '프레임워크'란 무엇인가? 프레임워크를 사용하지 않으 lordofkangs.tistory.com 지난 포스팅에서 프레임워크(Framework)란 무엇인가 알아보았다. 간단히 요약하면 프레임워크는 객체의 생성 및 관계 설정 권한을 소스코드로부터 완전히 가져오는 도구를 의미한다. 이를, 제어의 역전(IoC)이라 부른다. 그럼 이번 포스팅에서 구체적으로 어떤 방식으로 제어의 역전이 이루어지는지 알아보자. 어플리케이션 컨텍스트 ( Application Context ) 지난 포스팅에서 객체의 생성 및 관계 ..

SPRING/Spring Basic 2021.08.05

[스프링] 프레임워크란 무엇인가? ( 제어의 역전 (IOC) )

스프링은 '프레임워크(FrameWork)'이다. 프레임워크가 개발자의 작업을 도와준다는 말을 많이 들어봤을 것이다. 어떻게 도와준다는 말일까? '프레임워크'란 무엇인가? 프레임워크를 사용하지 않으면 개발자의 소스코드가 프로그램의 흐름을 제어한다. User user = new User("22231123l","민구","1111"); // user 객체 생성 ConnectionMaker connectionMaker = new AConnectionMaker(); // connectionMaker 객체 생성 UserDao userDao = new UserDao(connectionMaker); // userDao객체 생성 및 userDao와 connectionMaker 간의 관계설정 어떤 객체를 생성할지 어떤 객체..

SPRING/Spring Basic 2021.08.03