빈 생명주기 콜백 스프링 프레임워크는 애플리케이션의 시작과 종료 시점에 라이프사이클 콜백을 제공한다. 이러한 기능을 통해 애플리케이션에서 사용하는 외부 리소스나 연결을 관리할 수 있다. 예를 들어, 데이터베이스 커넥션 풀이나 네트워크 소켓 같은 리소스를 애플리케이션 시작 시점에 미리 연결하고, 애플리케이션 종료 시점에 해제하는 작업을 할 수 있다. public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect(); call("초기화 연결 메시지"); } public void setUrl(String url) { this.url = url; } ..
다앙한 의존관계 주입 방법 의존관계 주입 4가지 방법 생성자 주입 수정자 주입(Setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 생성자 주입은 객체를 생성할 때 생성자를 통해 의존성을 주입하는 방법을 말한다. 객체의 생성과 동시에 필요한 의존성을 제공하여 객체가 정상적으로 동작할 수 있도록 한다. 생성자 주입 특징 단 한 번의 호출 보장 : 생성자는 객체 생성 시점에 딱 한 번만 호출되므로, 의존성도 한 번만 주입된다. 이로 인해 여러 번의 변경 없이 한 번 설정된 의존성이 유지되는 것이 보장된다. 불변성 : 생성자를 통해 주입된 의존성은 변경될 수 없다. 이를 통해 객체의 안정성을 보장할 수 있다. 필수 의존관계 : 생성자 주입은 필수적으로 파라미터값이 존재해야 한다. 더보기 @Autowir..
컴포넌트 스캔과 의존관계 자동 주입 컴포넌트 스캔이란? @ComponentScan 은 설정 파일에 사용되며, 이 어노테이션을 사용하면 해당 패키지 하위 모든 클래스 중 @Component 가 붙은 클래스를 스캔하여 스프링 빈으로 자동 등록 한다. 지금까지 예제처럼 스프링 빈을 등록할 때 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 스프링 빈을 등록 한다면, 등록해야 할 스프링 빈이 수십, 수백개가 되면 설정 정보가 커지고, 누락하는 문제도 발생하게 된다. 그래서 스프링은 설정 정보없이도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 또한 의존관계도 자동으로 주입하는 @Autowired 기능도 제공한다. AutoAppConfig.java 더보기 package he..
웹 애플리케이션과 싱글톤 스프링은 기업용 온라인 서비스를 지원하기 위해 탄생했으며, 대다수의 스프링 애플리케이션은 웹 기반이다. 웹 애플리케이션의 특성상, 여러 사용자가 동시에 서비스에 접근하게 된다. 스프링 없는 순수한 DI컨테이너 테스트 더보기 package hello.core.Singleton; import hello.core.AppConfig; import hello.core.member.MemberService; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; public class SingletonTest { @Test @Display..
이전 예제 스프링 핵심원리 기본편 - 회원,주문 도메인 설계 스프링 컨테이너 생성 스프링 컨테이너가 생성되는 과정 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext : 스프링 컨테이너의 인터페이스로, 애플리케이션의 빈 설정과 라이프사이클을 관리한다. 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. AnnotationConfigApplicationContext : "ApplicationContext" 인터페이스의 구현체 중 하나로, 애노테이션 기반의 자바 설정 클래스를 처리한다. BeamFact..
애자일 선언문 모든 일은 유타 주에 있는 로지 앳 스노버드 스키 리조트에서 시작되었다. 서로 다른 개발 방법론을 입안한 이들과 업계 선두주자 몇명이 모여서 소프트웨어 개발이 어떤 방식으로 이루어져야 하는지에 대해 논의하던 중 "애자일 선언문"을 만들었다. 1. 프로세스와 도구보다 개인과 상호 작용을 중시한다. 2. 방대한 문서 작업보다 작동하는 소프트웨어를 중시한다. 3. 계약 협상보다 고객과 협력을 중시한다. 4. 계획을 따르기보다 변화에 대응한다. 먼저 언급한 것도 가치가 있지만, 뒤에 언급한 것에 더 높은 가치를 둔다는 뜻이다. 애자일 소프트웨어 개발 12가지 원칙 1. 우리는 가치 있는 소프트웨어를 빠르게 그리고 지속적으로 제공해서 고객을 만족시키는 것을 가장 중요하게 생각한다. 2. 개발의 후반..
비즈니스 요구사항과 설계 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고,외부 시스템과 연동할 수 있다.(미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라.(나중에 변경 될수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했다. 회원 도메인 설계 회원 클래스 다이어그램 회원 도메인 개발 Member Entity 더보기 회원 등급 package hello.core.member; public enum Grade { BASIC, VIP } 회원 엔티티 packag..
1. SRP (Single Responsibility Principle : 단일 책임 원칙) 정의 : 한 클래스는 오직 하나의 책임만을 가져야 한다. 중요성 : 한 클래스가 여러 책임을 가지게되면, 해당 클래스는 변화의 이유가 여러 가지가 될 수 있다. 이는 유지보수를 복잡하게 만든다. SRP를 지키면 클래스의 변경 이유가 명확해지며, 코드의 가독성이 향상된다. 예제 : "UserManager" 크래스는 사용자 정보를 관리하는 책임만 가져야 하며, 로그 기록이나 UI표시와 같은다른 책임을 가지면 안된다. 2. OCP (Open/Closed Principle : 개방 - 폐쇄 원칙) 정의 : 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다. 중요성 : ..