- [ 공부/Spring ][Spring] 스프링 핵심 원리 기본편 8) 빈 생명주기 콜백2023-10-27 09:47:16스프링 핵심 원리 - 기본편 Session 8 빈 생명주기 콜백 1. 빈 생명주기 콜백 시작 데이터베이스 커넥션 풀이나 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 것을 미리 연결하고 종료시점 연결을 모두 종료하려면 객체의 초기화와 종료 작업이 필요하다. 1) NetworkClient 작성 애플리케이션 시작 시점에 connect()를 호출해서 연결을 맺어두고, 종료되면 disConnect() 호출해서 연결을 끊어야 한다. 2) 테스트 코드 작성 ac.close() ▶ 스프링 컨테이너를 종료, ConfigurableApplicationContext 필요 3) 테스트 실행 생성자 호출, url = null connect: null call: null message = 초기화 연결 메시지 생성자 부분을 ..
- [ 공부/Spring ][Spring] 스프링 핵심 원리 기본편 7) 의존관계 자동 주입2023-10-26 09:21:35스프링 핵심 원리 - 기본편 Session 7 의존관계 자동 주입 1. 다양한 의존 관계 주입 방법 1) 의존관계 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 2) 생성자 주입 생성자를 통해서 의존 관계를 주입받는 방법 생성자 호출 시점에 딱 1번만 호출되는 것이 보장됨, 불변, 필수 의존 관계에 사용 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입된다 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Auto..
- [ 공부/Spring ][Spring] 스프링 핵심 원리 기본편 6) 컴포넌트 스캔2023-10-23 10:51:24스프링 핵심 원리 - 기본편 Session 6 컴포넌트 스캔 1. 컴포넌트 스캔과 의존관계 자동 주입 시작하기 1) 컴포넌트 스캔 @Bean이나 XML의 등을 통해 설정 정보에 직접 스프링 빈을 나열했다 → 스프링 빈이 수백개가 되면 설정 정보도 커지고 누락 등의 문제가 생김 스프링은 자동으로 스프링 빈을 등록해주는 컴포넌트 스캔이라는 기능을 제공해주고 의존관계도 자동으로 주입해주는 @Autowired라는 기능도 제공한다. 2) AutoAppConfig 생성 @Configuration @ComponentScan(excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppCo..
- [ 공부/Spring ][Spring] 스프링 핵심 원리 기본편 5) 싱글톤 컨테이너2023-10-22 13:43:42스프링 핵심 원리 - 기본편 Session 5 싱글톤 컨테이너 1. 웹 애플리케이션과 싱글톤 1) 스프링이 없는 순수한 DI 컨테이너 웹 애플리케이션은 보통 여러 고객이 동시에 요청한다. 요청할 때마다 객체가 생성해 메모리 낭비가 심한 문제점이 있다. 객체 하나만 생성되고 공유하도록 설계해야 한다. ▶ 싱글톤 패턴 2) 순수한 DI컨테이너 테스트 // 구성정보 클래스인 AppConfig에서 객체를 가져온다. AppConfig appConfig = new AppConfig(); //1. 조회: 호출할 때 마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); MemberService memberService2 = appConfig.membe..
- [ 공부/Spring ][Spring] 스프링 핵심 원리 기본편 4) 스프링 컨테이너와 스프링 빈2023-10-21 15:53:17스프링 핵심 원리 - 기본편 Session 4 스프링 컨테이너와 스프링 빈 1. 스프링 컨테이너 생성 1) 스프링 컨테이너 생성 ApplicationContext appllicationContext = new AnnotaionConfigApplicationContext(AppConfig.class); ApplicationContext : 스프링 컨테이너라고 하고 인터페이스임 AppConfig에 @Configuration 붙여서 만든 것이 애노테이션 기반의 설정 클래스를 만들어 스프링 컨테이너를 만든 것 2) 스프링 컨테이너 생성과정 new AnnotationConfigApplicationContext(AppConfig.class)로 스프링 컨테이너 생성 매개변수로 구성정보를 지정해줌 스프링 컨테이너는 매..
- [ 공부/Spring ][Spring] 스프링 핵심 원리 기본편 3) 스프링 핵심 원리 이해2 - 객체 지향 원리 적용2023-10-18 18:21:27스프링 핵심 원리 - 기본편 Session 3 스프링 핵심 원리 이해 2 - 객체 지향 원리 적용 1. 새로운 할인 정책 개발 1) 새로운 할인 정책 정액 할인에서 정률 % 할인 정책으로 변경 회원 등급이 VIP인 경우 10% 할인 FixDiscountPolicy에서 RateDiscountPolicy로 변경 2. 새로운 할인 정책 적용과 문제점 1) 문제점 역할과 구현을 충실하게 분리, 다형성도 활용하고 인터페이스와 구현 객체도 분리했으나 DIP, OCP 같은 객체 지향 설계 원칙을 위배 DIP : 주문 서비스 클라이언트는 추상(인터페이스)뿐만 아니아 구현 클래스에도 의존 OCP : 기능을 확장해서 변경하면 클라이언트 코드에 영향 있음 public class OrderServiceImpl implemen..
- [ 공부/Spring ][Spring] 스프링 핵심 원리 기본편 2) 스프링 핵심 원리 이해12023-10-18 12:04:00스프링 핵심 원리 - 기본편 Session 2 스프링 핵심 원리 이해 1 - 예제 만들기 1. 비즈니스 요구사항과 설계 1) 회원 회원 가입하고 조회가능 회원 등급은 일반과 VIP 두 가지 회원 데이터는 자체 DB 구축할 수 있고, 외부 시스템과 연동할 수 있다(미확정) 2) 주문과 할인 정책 회원은 상품 주문 가능 회원 등급에 따라 할인 정책 적용 가능 할인 정책은 VIP는 1000원 할인해 주는 고정 금액 할인 적용(나중에 변경될 수 있음) 할인 정책은 변경 가능성 높음, 기본 할인정책 미정상태고 최악의 경우 할인을 적용하지 않을 수도 있음 ▶ 할인 정책이 미정이기 때문에 인터페이스를 만들고 구현체로 언제든지 변경 가능하게 설계 2. 회원 도메인 설계 1) 회원 도메인 요구사항 회원 가입하고 조회가능..
- [ 공부/Java ][JAVA] 문자열 곱하기 repeat메서드2023-10-16 09:47:03자바 11에 새로 추가된 String 메서드 문자열을 파라미터만큼 반복하여 반환해준다. 내부적으로 Arrays.fill()과 System.arraycopy() 메서드를 호출한다. 0 → 빈 문자열 음수 → IllegalArgumentException 예외 발생 String str = "abc"; int count = 3; System.out.println(str.repeat(count)); // 출력결과 abcabcabc