목록분류 전체보기 (796)
코드 그라데이션
싱글톤 방식의 주의점 상태를 유지할 경우 발생하는 문제점 예시* StatefulService public class StatefulService { private int price; //상태를 유지하는 필드 public void order(String name, int price) { System.out.println("name = " + name + " price = " + price); this.price = price; //여기가 문제! } public int getPrice() { return price; } } 상태를 유지할 경우 발생하는 문제점 예시** StatefulServiceTest 먼저 static클래스 만들어서 빈 등록 // 스태틱 클래스 만들어서 빈 등록 static class Te..
싱글톤 컨테이너 스프링 컨테이너는 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글톤(1개만 생성)으로 관리한다. 지금까지 여기서 다뤄왔던 스프링 빈이 바로 싱글톤으로 관리되는 빈이다. 싱글톤 컨테이너 스프링 컨테이너를 사용하는 테스트 코드 SingletonTest - 테스트 추가 package inflearn.spring_core.singleton; import inflearn.spring_core.config.AppConfig; import inflearn.spring_core.member.MemberService; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframew..
스프링 입문 핵심 원리 테스트 코드 공부하다가 두 개를 각각 써봤는데 다 통과해서, 한 번 찾아보았다. 1) isNotSameAs 이 메서드는 두 개의 객체가 물리적으로 동일한 객체가 아님을 확인한다. 즉, 두 객체가 메모리 상에서 서로 다른 인스턴스를 가리키는 경우에만 성공한다. 객체의 참조(메모리 주소)를 비교하므로, 두 객체가 다른 인스턴스라면 true를 반환하고, 동일한 인스턴스라면 false를 반환. == 연산자와 유사한 기능을 수행 2) isNotEqualTo 이 메서드는 두 객체가 논리적으로 다른 값을 나타내는지 확인합니다 *논리적 동등성 객체의 equals 메서드를 사용하여 두 객체 간의 동등성을 확인 두 객체가 내용적으로 다르면 true를 반환하고, 내용이 동일하면 false를 반환 따라..
싱글톤 패턴 SingletonService package inflearn.spring_core.singleton; public class SingletonService { //1. static 영역에 객체를 딱 1개만 생성해둔다. // 자기자신을 내부에 딱 하나 가지고 있는 상황인 것. (); 이거까지 한 번에 입력됨 */ @DisplayName("스프링 없는 순수한 DI 컨테이너") @Test void pureContainer() { AppConfig appConfig = new AppConfig(); //1. 조회: 호출할 때마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); //2. 조회: 호출할 때마다 객체를 생성 MemberS..
웹 애플리케이션과 싱글톤 # 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. # 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 애플리케이션 개발도 얼마든지 개발할 수 있다. # 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 스프링 없는 순수한 DI 컨테이너 테스트 SingletonTest (test 패키지) package inflearn.spring_core.singleton; import inflearn.spring_core.config.AppConfig; import inflearn.spring_core.member.MemberService; import org.junit.jupiter.api.DisplayName; import org.junit...
스프링 빈 설정 메타 정보 - BeanDefinition 코드 레벨로 더 깊이 들어가서 보면 BeanDefinition 살펴보기 BeanDefinition 정보 => 이 메타정보를 기반으로 실제 인스턴스를 생성할 수가 있음 package inflearn.spring_core.beandefinition; import inflearn.spring_core.config.AppConfig; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annota..
다양한 설정 형식 지원 - 자바 코드, XML 스프링 컨테이너는 다양한 형식의 설정 정보를 받아드릴 수 있게 유연하게 설계되어 있다. ex) 자바 코드, XML, Groovy 등 구조도 1. 애노테이션 기반 자바 코드 설정 사용 지금까지 했던 것 new AnnotationConfigApplicationContext(AppConfig.class) `AnnotationConfigApplicationContext` 클래스를 사용하면서 자바 코드로된 설정 정보를 넘기면 된다. 2. XML 설정 사용 최근에는 스프링 부트를 많이 사용하면서 XML기반의 설정은 잘 사용하지 않는다. 아직 많은 레거시 프로젝트 들이 XML로 되어 있고, 또 XML을 사용하면 컴파일 없이 빈 설정 정보를 변경할 수 있는 장점도 있으므로..
그림 BeanFactory ApplicationContext **ApplicatonContext가 제공하는 부가기능 ctrl +클릭 눌러보면 정리 ApplicationContext는 BeanFactory의 기능을 상속받는다. ApplicationContext는 빈 관리기능 + 편리한 부가 기능을 제공한다. BeanFactory를 직접 사용할 일은 거의 없다. 부가기능이 포함된 ApplicationContext를 사용한다. BeanFactory나 ApplicationContext를 스프링 컨테이너라 한다.