스프링 12

12. 빈 스코프

빈스코프란?- 빈이 존재할 수 있는 범위 스코프 종류싱글톤 : 기본 스코프로 스프링 컨테이너가 시작하고 종료까지 유지되는 가장 넓은 범위의 스코프프로토타입 : 스프링컨테이너가 프로토타입 빈의 생성과 의존관계 주입 까지만 관여하고 이후는 관리하지 않는 범위 스코프 웹관련 스코프 참고 - request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 (고객 reponse요청에 사용) - sesstion : 웹 세션이 생성되고 종료될때 까지 유지되는 스코프 (로그인에 많이 사용) - application : 웹 서블릿 컨텍스와 같은 범위로 유지되는 스코프 프로토타입 스코프싱글톤 스코프 빈의 경우 조회하면 모두 같은 빈을 반환한다. 반면 프로토 타입 스코프는 항상 새로운 인스턴스를 생성해서 반환한다. 싱글톤..

스프링 2024.10.19

10-2. 다양한 의존관계 주입방법 (애노테이션을 만들기, List Map으로 받기

애노테이션 만들어서 의존관계 주입하기필요이유의존 관계 주입 방식 중 @Qqualifier의 단점을 보면 OrderServiceImpl.java RateDiscountPolicy.java- 해당 하는 Qualifier안에 들어가는 문자는 타입으로 조회하기 때문에 오타가 날 수 있다. 즉 아래와 같이 오타가 날수 있는데 실행시 이름이 일치 하지않아 UnsatisfiedDependencyException에러가 나는데 이런 실수는 자주 있을수 있다. 만들어보기MainDiscountPolicy.java- 클래스에 있는 애노테이션은 Qqualifier.java파일에 그대로 가져왔다.- @Qualifier 부분은 추가한 것인데 해당 애노테이션을 쓰면 해당 부분이 적용된다. 적용OrderServiceImpl.java ..

스프링 2024.10.19

11. 스프링 빈 생명주기 콜백

객체 초기화 작업의 필요성네트워크 커넥션 풀, 네트워크 소켓 처럼 시작시점에 미리 필요한 연결을 하고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 하려면 객체 초기화 작업이 필요하다. 스프링 빈 콜백 기능- 빈 객체를 생성하고 의존관계가 완료될 때 초기화 시점을 알려주는 초기화 콜백 기능 제공- 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 스프링 빈 life cycle 참고컨테이너 생성 > 스프링 빈생성 > 의존관계 주입 > 초기화 콜백 > 사용 > 소멸전 콜백 > 스프링 종료  초기화  콜백  메서드 사용말고 생성자에 다 설정하면 되지 않을까?- 각각의 역할에 초점을 맞추어 생성과 초기화는 분리하는게 좋다.- 생성자는 필수정보를 받아 메모리 할당해 객체 생성하는 역할 - 초기화는 생..

스프링 2024.10.13

10. 다양한 의존관계 주입방법

의존관계 주입 방법1. 생성자 주입 - 생성자를 통한 의존관계 주입방법 (빈이 생성될때 의존관계 설정됨) - 특징: 1번만 호출되도록 보장된다 -> 불변(1번만 호출할수 있어 변경이 없음) , 필수 의존관계에 사용 - 생성자 가 1개만 있으면 @Autowired 생략 가능하다. 2. 수정자 주입 (setter 주입) - setter 메서드를 통한 의존관계 주입 (빈생성 수 의존관계 주입할때 설정됨) - 특징 : 선택, 변경의 가능성이 있는 의존관계에 사용한다. 3. 필드 주입 - 객체 필드에 바로 주입하는 방식 - 외부에서 변경이 불가능(private라서)해서 테스트 하기 힘들다. (순수한 Java로 테스트 코드를 짜려면 setter메서드가 있어야함)  - 애플리케이션과 관계없는 테스트 코드나 @Conf..

스프링 2024.10.07

9. 컴포넌트 스캔과 의존관계 자동 주입

- 1~8 번까지는 Annotaion으로 AppConfig.java파일을 만들거나 xml파일로 스프링빈, 의존관계를 정리했다.- 스프링은 설정 파일이 없어도 자동으로 빈을 등록하는 컴포넌트 스캔 기능이 있다.- 의존관계 자동주입 기능은 @Autowired 애노테이션을 사용한다 @ComponentScan- 클래스 설정정보에 붙여줌, @Bean으로 클래스 등록 안함- @Component 애노테이션이 붙은 클래스 모두 스프링빈으로 등록해줌 -> 빈이름은 맨 앞글자만 소문자로 넣어 사용한다. - @Configuration 애노테이션이 붙은것도 대상이 되는데 아래 소스 코드를 보면 @Component가 있음 빈등록 그림 @Autowired- 사용할 빈에 @Component 붙였다면 해당 빈의 의존관계 주입을 해야..

스프링 2024.10.05

8. BeanFactory, ApplicationContext 의 이해 (BeanDefinition포함)

상속 구조 BeanFactory- 스프링 컨테이너의 최상위 인터페이스- 스프링빈을 관리한다. -> getBean() 제공 ApplicationContext- BeanFactory를 상속 받아 제공- 애플레케이션 개발시 빈관리 조회 외에 부가기능 담당 부가기능MessageSource- 언어에 따른 메시지 제공 EnvironmentCapable - 개발환경 구성에따른 환경변수 제공 (DEV, TST, STG, PRD환경에 따른 DB환경 설정 등) ApplicationEbentPublisher- 이벤트를 발행하고 구독하는 모델지원 ResourceLoader - 파일, 클래스패스, 외부 등 리소스를 편리하게 조회 실제 소스- ListableBeanFactory, HierarchicalBeanFactory는 B..

스프링 2024.09.24

7. 스프링 컨테이너, 빈

ApplicationContext - 스프링 컨테이너로 객체를 생성하고 DI를 해준다.- @Configuration이 붙은 클래스를 설정 정보로 이용하고 @Bean이 붙은 매서드를 모두 호출해 반환된 객체를 스프링 컨테이너에 등록한다. (등록된 객체를 스프링 빈이라고 한다.)- 스프링빈은 @Bean이 붙은 메서드 명을 빈의 이름으로 사용한다.- 개발자는 필요한 객체를 applicationContext.getBean() 메서드를 사용해 찾는다. => 스프링 컨테이너에 객체를 스프링 빈으로 등록하고, 스프링 컨테이너에서 빈을 찾아 사용함 스프링컨테이너 생성ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConf..

스프링 2024.09.22

5. IoC, DI, 컨테이너

Ioc (Inversion of Control) 제어의 역전기존은 클라이언트가 스스로 필요한 객체를 생성, 연결, 실행함 -> AppConfig에서 구현 객체를 관리해서객체를 사용자가 직접 호출하는게 아니라 프레임 워크에서 호출, 관리 하도록함프로그램의 제어 흐름을 클라이언트 소스에서 하는것이 아닌 외부인 프레임워크에서 관리히는 것 프레임워크 VS 라이브러리프레임워크는 개발자가 작성한 코드를 제어, 실행시킴라이브러리는 개발자가 작성한 코드가 직접 생성 실행시킴DI(Dependency Injection) 의존관계 주입스프링은 클라이언트 소스에서 추상화 인터페이스에만 의존하고 실제 구현객체는 AppConfig에서 담당한다.애플리케이션 실행시점에 프레임워크에서 실제 구현객체를 생성하고 클라이언트에 전달애서 클..

스프링 2024.09.22

4. [SOLID] 객체 지향 설계 5가지 원칙

클린코드로 유명한 로버트 마틴의 좋은 객체지향 설계의 5가지 원칙 1. SRP(Single Responsibility principle) 단일 책임 원칙한가지 클래스는 하나의 책임만 가져야 한다.-> 수정이 있을때 변경  하나의 책임?   - 규모는 다를수 있음  - 문맥과 상황에 따라 다름 기준 변경이 있을 때 파급 효과가 적으면 해당 원칙을 잘 따른것 예) 한 파일 소스에 DB접근, View, 중요 로직이 한꺼번에 있다면 한가지 수정이 있을때 모든 로직이 있는 파일을 수정해야 한다.따라서 각각 목적에 맞게 파일을 분리해서 변경이 있을때 영향 범위에 맞는 파일만 수정 하도록 하는게 수정에 있어 파급효과가 적다. 2. [중요] OCP(Open/closed Princile) 개발-폐쇄 원칙소프트웨어 요소는..

스프링 2024.09.13

3. 객체지향 프로그래밍이란? (java)

뜻 (위키백과)컴퓨터 프로그램을 명령어의 목록으로 보는 시각에 벗어나 여러개의 독립된 단위, 객체들의 모임으로 파악하고자 하는것.각각의 객체는 메시지를 주고받고 데이터 처리 가능하다.유연하고 변경 용이하여 대규모 소프트웨어 개발에 사용한다. (컴포넌트를 쉽고 유연하게 변경하면서 개발) 객체 지향의 특징1. 추상화- 객체의 공통적인 속성과 기능을 추출해서 정의 하는것- 인터페이스로 객체의 역할을 기술하고 실질적인 구현은 클래스에서 만듬 2. 상속- 기존 클래스를 상속 받아 부모의 기능, 속성을 이용할수 있게 하는 기능이다.- 여러 클래스간 공유하는 속성과 기능을 부모 클래스에 정의해두고 상속받아서 사용한다.- 클래스의 반복되는 소스를 최소화 하고 공유하는 속성, 기능을 쉽게 접근하고 수정이 있을때 부모클..

스프링 2024.09.12