GitHub

https://github.com/Choidongjun0830

분류 전체보기 463

[Spring] 빈 생명주기 콜백

데이터 베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 스프링 빈은 객체를 생성하고, 의존 관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업은 의존 관계 주입이 모두 완료되고 난 다음에 호출해야 한다. 그런데 개발자가 의존 관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까? → 스프링은 의존 관계 주입이 완료되면 스프링 빈에게 콜백 메소드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 “스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백”을 준다. 따라서 안전하게 종료 작업을 진행할 ..

Spring 2023.09.08

[Spring] Component Scan

지금까지는 @Bean을 이용하여 설정 정보에 직접 등록할 스프링 빈을 나열했다. 하지만 이렇게 등록해야 할 스프링 빈이 수십, 수백개가 되면 일일이 등록하기도 귀찮고, 설정 정보도 커지고, 누락하는 문제가 발생할 수 있다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 이때, 스프링 빈의 기본 이름은 클래스명을 사용하되 맨 앞글자만 소문자를 사용한다. 만약 스프링 빈의 이름을 직접 지정하고 싶으면 @Component(”…”)를 사용하면 된다. @Autowired를 사용하면 생성자에서 여러 의존관계도 한번에 주입받을 수 있다. @Component public class OrderServiceImpl implements OrderService{ pri..

Spring 2023.09.02

[Spring] Singleton Pattern

클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. → private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다. 스프링 없이. 싱글톤 패턴을 사용하지 않고 public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); //1. 조회: 호출할 때마다 객체를 생성 //-> 메모리 낭비가 심함 //-> 싱글톤 패턴을 통해 해당 객체가 1개만 생성되고, 공유하도록 설계하면 된다. MemberService memberS..

Spring 2023.08.31

[Spring] Spring Container

Spring Container Spring Beans와 그들의 생애주기를 관리하는 것. 우리가 여러개의 자바 클래스를 만들고 우리는 Configuration 파일도 만든다. 그리고 input으로 Spring Container에 넘긴다. Bean Factory : Basic Spring Container (인터페이스) Bean Factory를 직접 사용하는 경우는 거의 없으므로 일반적으로 ApplicationContext를 스프링 컨테이너라고 한다. 스프링 컨테이너의 최상위 인터페이스 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean()을 제공한다 ApplicationContext : Advanced Spring Container with enterprise-specific features (..

Spring 2023.08.29

[Spring] Spring Bean

빈(Bean) 빈(Bean)은 스프링 컨테이너에 의해 관리되는 재사용 가능한 소프트웨어 컴포넌트이다. 즉, 스프링 컨테이너가 관리하는 자바 객체를 뜻하며, 하나 이상의 빈(Bean)을 관리한다. 빈은 인스턴스화된 객체를 의미하며, 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다. @Bean 어노테이션을 통해 메서드로부터 반환된 객체를 스프링 컨테이너에 등록한다. 스프링컨테이너에는 메서드 이름이 자동으로 등록된다. 이렇게 등록된 객체를 스프링 빈이라 한다. 물론 메서드가 등록되는 이름을 바꿀 수 있다. 빈은 클래스의 등록 정보, Getter/Setter 메서드를 포함하며, 컨테이너에 사용되는 설정 메타데이터로 생성된다. 설정 메타데이터 : XML 또는 자바 어노테이션, 자바 코드로 표현하며, 컨테이너..

Spring 2023.08.28

객체 지향 프로그래밍

객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 “객체”들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메세지를 주고 받고, 데이터를 처리할 수 있다. 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 객체 지향 특징 추상화 캡슐화 상속 다형성: 역할 = 인터페이스, 구현 = 인터페이스를 구현한 클래스, 구현 객체. 객체를 설계할 때 역할과 구현을 명확히 분리 객체 설계시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들기 혼자 있는 객체는 없다. 수 많은 객체 클라이언트(요청)와 객체 서버(응답)는 서로 협력 관계를 가진다. 인터페이스를 구현한 객체 인스..

Spring 2023.08.25

[Spring] Dependency Injection

의존관계 주입 외부에서 두 객체 간의 관계(의존성)를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다. 필드 주입 @Component class YourBusinessClass { @Autowired Dependency1 dependency1; @Autowired Dependency2 dependency2; public String toString() { return "Using " + dependency1 + " and " + dependency2; } } @Component class Dependency1{ } @Component class Dependency2..

Spring 2023.08.21

[Spring]@Primary vs @Qualifier

자동 의존관계 주입시 여러개의 빈을 찾으면 오류가 발생한다. 스프링은 여러개의 빈들 중 어떤 것을 가져올지의 기준이 없기 때문이다. @Primary: Bean은 여러개의 후보들이 Qualified일 때 우선권이 주어다. 5개의 Bean이 주어지고, 만약 그것들 중 하나가 Primary가 주어지면, 그것이 우선이 된다. @Qualifier: Auto-wired가 되는 특정한 Bean을 설정하는 것이다. Bean의 이름을 Qualifier로 사용할 수 있다. Qualifier가 Primary보다 더 높은 우선 순위를 갖고 있다.

Spring 2023.08.21

[Java] 배열 안 정수 중에서 짝수인 가장 큰 수 구하기

import java.util.List; import java.util.Optional; public class FunctionalProgrammingMagic { public static int findMaxEvenNumber(List numbers) { // Write your code here if(numbers == null) { return 0; } Optional maxEven = numbers.stream() .filter(n -> n % 2 == 0) .max(Integer::compare); return maxEven.orElse(0); } } 'max(Integer.compare)'에서 Optional를 리턴한다. Optional은 배열이 비어있을 경우도 다루기 때문에 numbers에 ..

Java 2023.08.16
728x90