DI 의존관계의 설정정보는 Java 코드를 활용하는 것 뿐만 아니라 다른 방법을 사용할 수 있다. 그 중 대표적인 것은 XML방식이다. Java 코드로 DI 의존관계의 설정정보를 이용하게 되면, DI 구성이 바뀔때마다 자바 코드를 수정하고 클래스를 다시 컴파일해야 하는 단점이 발생한다. XML은 단순한 텍스트 파일이기 때문에, 컴파일과 같은 작업이 없고 다루기가 쉽다. XML 설정 Java와 XML의 설정 차이 @Confguration : @Bean : @Bean 메소드를 통해 얻을 수 있는 Bean DI 정보를 세가지로 정의할 수 있다. 빈의 이름 @Bean 메소드 이름이 빈의 이름 이며, 이 이름은 getBean()에서 사용된다. 빈의 클래스 빈 오브젝트를 어떤 클래스를 이용해서 만들지를 정의한다. ..
제어의 역전(IoC)과 의존관계 주입 스프링의 IoC만 볼 때, 서블릿 컨테이너 처럼 서버에서 동작하는 서비스 컨테이너인지 혹은 단순히 IoC 개념이 적용된 템플릿 메소드 패턴을 이용한 프레임워크인지 한 눈에 파악하기 힘들다. 그로 인해, 스프링이 제공하는 IoC 방식에 핵심을 짚어주는 의존관계 주입 이라는 좀 더 명확한 이름을 사용했다. 스프링 IoC 기능의 대표적인 동작원리는 주로 의존관계 주입이라고 불린다. -> 이런 이유로 IoC 컨테이너를 DI 컨테이너라고 불리기도 한다. 의존관계 주입, 의존성 주입, 의존 오브젝트 주입 DI는 오브젝트 레퍼런스를 외부로부터 제공받고 이를 통해 제공 받은 오브젝트와 다이나믹하게 의존관계가 만들어진다. 이 의미를 함축시켜 만든 키워드 들이 의존관계 주입, 의존성 ..
싱글톤 레지스트리와 오브젝트 스코프 DaoFactory를 직접 사용하는 것과 @Configuration을 추가해서 스프링의 애플리케이션 컨텍스트를 통해 사용하는 것은 동일한 것 같이 보인다. 그저 애플리케이션 컨텍스트에 userDao라는 이름의 빈을 요청하면 DaoFactory의 userDao() 메소드를 호출해서 그 결과를 돌려주는 것이라고 볼 수 있다. 하지만, 스프링의 애플리케이션 컨텍스트는 기존에 직접 만들었던 오브젝트 팩토리와 중요한 차이점이 있다. 오브젝트의 동일성과 동등성 동일성 두개의 오브젝트가 완전히 같은 동일한 오브젝트라고 말하는 것 동일성의 비교는 == 연산자를 사용 동등성 동일한 정보를 담고 있는 오브젝트라고 말하는 것 동등성의 비교는 오브젝트의 equals() 메소드를 사용 두 개..
스프링의 핵심을 담당하는 건, 바로 빈 팩토리 또는 애플리케이션 컨텍스트라고 불리는 것이다. 이 두 가지는 우리가 만든 DaoFactory가 하는 일을 좀 더 일반화한 것이라고 생각하면 된다. 오브젝트 팩토리를 이용한 스프링 IoC 애플리케이션 컨텍스트와 설정정보 여기서는 우리가 만든 DaoFacotry를 스프링에서 사용 가능하도록 만들어 볼 것이다. 스프링에서는 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 빈이라고 부른다. 스프링 빈은 스프링 컨테이너가 생성과 관계설정, 사용 등을 제어해주는 제어의 역전이 적용된 오브젝트를 가리키는 말이다. 스프링에서 빈의 생성과 관게설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리 혹은 애플리케이션 컨텍스트라고 부른다. 빈 팩토리와 애플리케이..
팩토리 팩토리 : 팩토리는 객체의 생성 방법을 결정하고 그렇게 만들어진 오브젝트를 돌려주는 일을 한다. 팩토리는 오브젝트를 생성하는 쪽과 생성된 오브젝트를 사용하는 쪽의 역할과 책임을 분리하려는 목적으로 사용하는 것이다. public class DaoFactory { public UserDao userDao() { //팩토리 메소드는 UserDao 타입의 오브젝트를 어떻게 만들고, 어떻게 준비시킬지를 결정한다. ConnectionMaker connectionMaker = new DConnectionMaker(); UserDao userDao = new UserDao(connectionMaker); return userDao; } } 기존 UserDaoTest의 main에서는 UserDao가 어떻게 만들어..
스프링에 들어가기 앞서, 스프링에 관련된 소스를 작성하여 스프링의 내부 구조를 살펴보자. 상속을 통한 확장 만약, 우리의 UserDao를 고객사에게 제공할 건데, UserDao의 클래스 파일만 제공하고 고객이 필요한 부분만(getConnection())을 수정해서 사용하게끔 할 수 있는가? Connection 부분을 추상메소드로 만들어 고객에게 직접 구현할 수 있게끔 한다. 즉, 상속을 통해 확장하는 것이다. 상속을 통한 확장에는 두 가지 패턴을 사용하게 된다. 템플릿 메소드 패턴 상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법이다. 서브 클래스에서 필요에 맞게 추상 메소드를 구현해서 사용하는 방법을 디자인한 것이다. 팩토리 메소드 패턴 서브클래스에서 구체적인 오브젝트 생성 방법을..
Bean 등록에 필요한 어노테이션 @Component : 태그와 동일한 역할 @Repository : 퍼시스턴스 레이어, 데이터베이스 관련 클래스 @Service : 비즈니스 로직을 가진 클래스 @Controller : 웹 요청과 응답을 처리하는 클래스 Bean 의존관계 주입 어노테이션 @Autowired Spring DI 컨테이너에서 주입하고자 하는 Bean을 불러온다. Setter 메소드, 필드, 생성자에 적용할 수 있다. Bean 검색 할 때 우선순위는 1. byType, 2. byName 이다. 주입 받아올 Bean을 명시할 수 있다. @Autowired @Qualifier("CustService") //Type 다음 Name(변수명) @Resource Spring이 아닌 Java에서 객체에 주입..
IoC의 개념 Inversion of Control의 약자로서, 객체의 생성과 생명주기에 대한 권한이 역전되는 것을 말한다. IoC 컨테이너 객체의 생성과 생명주기를 관리하고, POJO의 생성과 초기화, 서비스, 소멸에 대한 권하을 가진다. DI의 개념 Dependency Injection의 약자로서, Bean 설정 정보를 바탕으로 객체간의 의존 관계를 연결해주는 것을 말한다. 빈 설정 방법 xml로 설정 //1. 객체마다 Bean 설정 //2. 패키지로 Bean 설저 CustService와 CustRepository를 Bean으로 등록한다. CustService와 CustRepoistory는 서로 의존 관계를 갖는다. mesung.springKeyTech 하위에 있는 모든 객체를 Bean으로 등록한다...
- Total
- Today
- Yesterday
- try catch finally
- 이펙티브 자바
- mustache
- flatMap
- junit
- effectivejava
- 빌더 패턴
- 연관관계
- 자바8
- @Lazy
- 정적팩터리메서드
- try with resources
- Effective Java
- jdk버전
- java8
- 이펙티브자바
- 인프런
- 생성자
- 스프링부트
- 점층적 생성 패턴
- 팩토리 메소드 패턴
- 복사 팩토리
- java
- package-private
- springboot
- ifPresent
- 김영한
- Spring
- 빈 순환 참조
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |