BeanFactory 스프링 컨테이너의 최상위 인터페이스이다. 스프링 빈을 관리하고 조회하는 역할을 담당. getBean()을 제공한다. ApplicationContext BeanFactory 기능을 모두 상속받아서 제공한다. 빈을 관리하고 검색하는 기능을 BeanFactory가 제공하는데, 차이는 뭘까? 애플리케이션을 개발할 때는 빈을 관리하고 조회하는 기능은 물론!! 수 많은 부가기능이 필요하다. ApplicationContext가 제공하는 부가기능 메세지소스를 활용한 국제화 기능 ex) 메세지가 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력해준다. ex) 어떤 홈페이지를 한국어세 들어가면 한국어로 출력, 영어권에서 들어가면 영어로 출력 환경변수 ex) 로컬, 개발, 운영등을 구분해서 ..
부모 타입으로 조회하면, 자식 타입도 함께 조회된다. 모든 자바 객체의 최고 부모인 Object타입으로 조회하면, 모든 스프링 빈을 조회한다. 부모 타입 조회시 자식이 둘 이상인 경우 DiscountPolicy 타입으로 rateDiscountPolicy() 와 fixDiscountPolicy() 두개의 @Bean이 있다. 이로 인해서 스프링 컨테이너는 어떤 DiscountPolicy를 불러와야 할지 혼동되기 때문에 NoUniqueBeanDefinitionException 에러를 발생시킨다. @Configuration static class TestConfig { @Bean public DiscountPolicy rateDiscountPolicy() { return new RateDiscountPolicy..
타입으로 조회시 `동일한 타입이 둘 이상일때 NoUniqueBeanDefinitionException`이 발생한다. 이때는 빈 이름을 지정해주자!! ac.getBeansOfType()을 사용하면 해당 타입의 모든 빈을 조회 가능 package hello.core.beanfind; import hello.core.member.MemberRepository; import hello.core.member.MemoryMemberRepository; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.NoUniqueBeanDefinitionException..
접근 제어 지시자(access modifier) 클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드 private : 같은 클래스 내부에서만 접근 가능 (외부 클래스, 상속 관계의 클래스에서도 접근 불가) 가장 폐쇄적 default : 같은 패키지 내부에서만 접근 가능 (상속 관계여도 패키지가 다르면 접근 불가) protected : 같은 패키지나 다른 패키지의 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근할 수 없음 public : 클래스의 외부 어디서나 접근할 수 있음(접근 제한이 없다) public > protected > (default) > private get() / set() 메서드 사용하는 이유 외부에서 멤버변수에 직접 접근하여 값을..
실행 컨텍스트(Execution Context) / 실행문맥 실행할 코드에 제공할 환경 정보들을 모아 놓은 객체 / JS동작원리를 이해하는 중요 개념!! 소스코드를 실행하는 데 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역이다. scope, hoisting, this, function, closure 등의 동작원리를 담고 있는 자바스크립트의 핵심원리이다. 실행 컨텍스트 종류 전역 컨텍스트(Global Context) 함수 컨텍스트(Function Context) eval 컨텍스트(Eval Context) 실행 컨텍스트 3가지 객체(실행 컨텍스트가 구성되는 요소) 변수 객체 Scope Chain this JS엔진은 소스코드를 2가지 과정으로 처리 소스코드 평가 과정 소스코드 실행 과정 평..
인스턴스(instance) new 키워드를 사용하여 인스턴스를 생성 ex) Student student = new Student(); 클래스는 객체의 속성을 정의, 기능 구현을 해놓은 공간 실제 클래스 기반으로 생성된 객체(인스턴스)는 각각 다른 멤버 변수 값을 가지게 된다. ex) Student 클래스에서 생성된 각각의 인스턴스는 각자 다른 학번, 이름, 주소를 가진다. ⁋힙 메모리 생성된 인스턴스는 동적 메모리(heap memory)에 할당된다. C와 C++에서는 사용자가 free() or delete를 이용하여 사용자가 해제시켜야 한다. JAVA에서는 Gabage Collector 가 주기적으로 사용하지 않는 메모리를 수거한다. 하나의 클래스로부터 여러 개의 인스턴스가 생성되고 각각 다른 메모리 주..
함수란(function) 하나의 기능을 수행하는 일련의 코드 구현된(정의된) 함수는 호출로 사용할 수 있다. / 기능이 끝나면 원래의 코드로 제어가 반환된다. 함수로 구현된 기능을 여러 곳에서 재사용이 가능 함수 정의하기 함수는 이름, 매개변수(parameter), 함수 몸체(body)로 구성된다. // 반환이 없는 함수는 함수이름 앞에 void를 붙인다. // void add(); int add(int num1, int num2) { int result; result = num1 + num2; return result; }함수 구현하기 예제 public class FunctionTest { // 매개변수 2 개를 받아서 더하는 함수 선언 public static int addNum(int num1, i..