Spring
-
[Spring][Kotlin] 빈 스코프Spring 2022. 5. 21. 15:44
빈 스코프란? 빈 스코프는 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다양한 스코프를 지원한다. 싱글톤 : 기본 스코프. 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프 웹 스코프 request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프 application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프 빈 스코프는 다음과 같이 지정 가능하다 [컴포넌트 스캔 자동 등록] @Scope("prototype") @Component class HelloBean{...} [수동..
-
[Spring][Kotlin] 빈 생명주기 콜백Spring 2022. 5. 21. 14:18
빈 생명주기 콜백 시작 빈 생명주기 콜백은 빈이 생성될 때와 소멸하기 직전에 안전하게 처리될 수 있도록 호출하는 콜백이다. DB 커넥션 풀이나 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화 + 종료 작업이 필요하다 서버 뜰 때 애플리케이션이랑 DB를 미리 10~100개정도 연결해놓는다. 고객 요청이 올 때 연결해놓을 걸 재활용할 수 있다. 스프링 빈은 간단하게 다음과 같은 lifeCycle을 가진다 객체 생성 -> 의존관계 주입 (예외 : 생성자 주입) 스프링 빈은 객체 생성 후 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다 -> 스프링은 의존관계 주입이 완료되면 스..
-
[Spring][Kotlin]의존관계 자동 주입Spring 2022. 5. 21. 13:26
다양한 의존관계 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 : 생성자를 통해서 의존관계를 주입받는 방법이다. [특징] 생성자 호출 시점에 딱 한번만 호출되는 것이 보장 -> 그때 값 세팅하고 그 후 세팅 못하게 막기 가능하다 불변, 필수 의존관계에 사용 생성자가 딱 하나 있다면 @Autowired 생략 가능하다. (스프링 빈인 경우) @Component class OrderServiceImpl: OrderService{ val memberRepository: MemberRepository val discountPolicy: DiscountPolicy @Autowired constructor(memberRepository: MemberRepository..
-
[Spring][Kotlin]컴포넌트 스캔Spring 2022. 5. 19. 00:44
컴포넌트 스캔과 의존관계 자동 주입 스프링은 설정 정보 없이도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. + 의존관계 자동으로 주입하는 @Autowired 기능도 제공한다. 컴포넌트 스캔 @ComponentScan을 설정정보에 붙여주면 된다. 컴포넌트 스캔은 @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다. Autowired 의존관계 자동 주입 이전에는 설정정보 클래스에서 @Bean으로 직접 설정 정보를 작성했고 의존관계도 명시했다. 하지만 컴포넌트 스캔을 사용하면 이런 설정 정보 자체가 없기 때문에 의존관계 주입도 @Autowired를 통해서 해주어야한다. @Autowired를 사용하면 생성자에서 여러 의존관계도 한번에 주입받을 수 있다. @Aut..
-
[Spring][Kotlin] 싱글톤 컨테이너Spring 2022. 5. 18. 19:19
스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 그리고 대부분 스프링 애플리케이션은 웹 애플리케이션이다. 웹앱은 보통 여러 고객이 동시에 요청한다. Problem] Request 마다 객체 생성하면 메모리 낭비가 매우 심하다. Sol) 해당 객체를 1개만 생성하고 공유하도록 하면 된다. (사실 요즘 GC가 좋아서 초당 100최 정도는 괜찮지만 효율적이면 좋으니까) 싱글톤 패턴 : 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. -> 객체 인스턴스가 2개 이상 생성 못하도록 막야야 한다. 싱글톤 구현 방법은 많다. 그 중 하나의 방법은 private 생성자를 사용해서 생성자를 사용하지 못하도록 막는 것이다. Kotlin에서는 object 키워드를 붙이면 싱글톤 클래스 ..
-
[Spring][Kotlin] 제어의 역전(Ioc)과 의존관계 주입(DI)Spring 2022. 4. 13. 01:08
제어의 역전 IoC (Inversion of Control) : 구현 객체가 제어 흐름을 스스로 조종하지 않고 외부에서 관리하는 것을 말한다. 앞 포스팅에서의 코드에서 class MemberServiceImpl: MemberService(){ val memberRepository = MemoryMemberRepository() //생략 } 위의 코드는 MemberServiceImpl 객체가 스스로 필요한 서버 구현 객체를 생성하고 연결하고 실행한다. 즉 구현 객체가 프로그램의 제어 흐름을 조종한다. class AppConfig{ fun memberRepository() = MemoryMemberRepository() fun memberService() = MemberServiceImpl(memberRep..
-
[Spring][Kotlin] 좋은 객체지향 설계 5가지 원칙 SOLID와 스프링Spring 2022. 4. 12. 17:39
클린코드로 유명한 로버트 마틴은 좋은 객체지향 설계의 5가지 원칙을 정리하였다. 1. SRP 단일 책임 원칙 Single Responsibility Principle : 한 클래스는 하나의 책임만 가져야 한다. 변경이 있을 때 파급이 적으면 SRP 잘 따른 것이다. 2. OCP 개방 - 폐쇄 원칙 Open/Close Principle : 확장에는 열려 있으나 변경에는 닫혀 있어야한다.(다형성 활용)(중요함) 그러나 Problem] 클라이언트가 구현체 선택하는 과정에서 코드 변경을 해야한다. class MemberService{ ... //val memberRepository: MemberRepository = MemoryMemberRepository() val memberRepository: Member..
-
[Spring] 객체지향 특징과 다형성과 스프링Spring 2022. 4. 11. 17:49
스프링은 좋은 객체지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크이다. 스프링에 대해 잘 이해하기 위해 이 객체지향에 대해 알아보자. 객체지향의 특징에는 추상화 캡슐화 상속 다형성 이 있다. 이러한 특징을 갖고 있는 객체지향프로그래밍은 유연하고 변경에 용이하다. = 컴포넌트를 유연하게 변경하면서 개발 가능하다 = 클라이언트에게 영향을 안주고 계속 기능 확장이 가능하다. 이 중 다형성이 특히 중요하므로 다형성이 대해 알아보자. 다형성 다형성은 역할과 구현으로 세상을 구분한다고 생각하면 좋다. 위의 그림처럼 자동차역할이 있고 그 역할의 구현이 되는 여러 자동차 모델들이 있는것 처럼 말이다. 위 사진은 다형성에서 역할과 구현의 또 다른 예시이다. 장점 이러한 구분은 단순하고 유연하고 변경에 편리하다. ..