본문 바로가기

교재 실습261

144. 빈의 범위 설정 이번 절에서는 빈의 범위(bean scope)를 설정하는 방법을 배운다. 스프링 IoC 컨테이너는 빈을 생성할 때 기본으로 한 개만 생성한다. getBean() 메서드를 호출하면 계속 동일한 객체를 반환한다. 그러나 설정을 통해 이런 빈의 생성 방식을 조정할 수 있다. 다음은 스프링에서 설정 가능한 빈의 범위를 정리한 표이다. 범위 설명 싱글톤(singleton) 오직 하나의 빈만 생성한다(기본 설정). 프로토타입(prototype) getBean() 메서드를 호출할 때마다 빈을 생성한다. 요청(request) HTTP 요청이 발생할 때마다 생성되며, 웹 애플리케이션에서만 이 범위를 설정할 수 있다. 세션(session) HTTP 세션이 생성될 때마다 빈이 생성되며, 웹 애플리케이션에서만 이 범위를 설정.. 2022. 11. 7.
143. 팩토리 메서드와 팩토리 빈 (2) 2. 인스턴스 팩토리 메서드를 이용한 간접 객체 생성 이번 실습에서는 인스턴스 팩토리 메서드를 정의하고 사용하는 방법을 배워본다. - 실습 패키지 생성 exam 패키지 아래에 test12 패키지를 생성한다. test11 패키지의 모든 파일을 복사해온다. - 팩토리 클래스 생성 exam.test12 패키지에 복사해 온 TireFactory 클래스에서 모든 메서드의 static 선언을 제거한다. 즉 모든 메서드를 인스턴스 메서드로 만든다. package exam.test12; import java.text.SimpleDateFormat; import java.util.Properties; public class TireFactory { /** * 팩토리 메서드 * @param maker * @return c.. 2022. 11. 6.
142. 팩토리 메서드와 팩토리 빈 (1) 객체 지향 설계 기법 중에서 팩토리 메서드(factory method) 패턴과 빌더(Builder) 패턴이 있다. 공장 역할을 하는 객체를 통해 필요한 인스턴스를 간접적으로 얻는 방식이다. 이번 절에서는 공장 역할을 하는 객체를 통해 인스턴스를 얻는 빈 설정 방법을 배워본다. 인스턴스를 생성하는 일반적인 방법은 new 명령을 사용하는 것이다. new 명령을 통해 클래스와 생성자를 지정하면 해당 클래스의 인스턴스가 생성되고 초기화된다(그림 1). 문제는 인스턴스 생성 작업이 복잡한 경우이다. 매번 인스턴스를 생성할 때마다 복잡한 과정을 거쳐야 한다면 코딩할 때 부담이 된다. 이를 해결하기 위해 나온 것이 팩토리 메서드 패턴과 빌더 패턴이다. 팩토리 클래스는 인스턴스 생성 과정을 캡슐화한다. 즉 인스턴스를 .. 2022. 10. 31.
141. 컬렉션 값 주입 (2) 2. Map과 Properties 값 주입 빈 프로퍼티 타입이 java.util.Map이나 java.util.Properties인 경우, 식별자(key)와 값(value)을 한 쌍으로 묶어서 저장한다. 이 타입의 프로퍼티 값은 어떻게 설정하는지 알아본다. - 실습 패키지 생성 exam 패키지 아래에 test10 패키지를 생성한다. test09 패키지의 모든 파일을 복사해온다. - 실습 클래스 변경 Map 객체와 Properties 객체를 실습할 수 있도록 기존 클래스에 프로퍼티를 추가한다. Tire 클래스는 타이어 규격을 표현하는 spec 프로퍼티의 타입을 java.lang.String에서 java.util.Properties로 변경한다. 또한, toString() 메서드도 그에 맞추어 변경한다. Car.. 2022. 10. 26.
140. 컬렉션 값 주입 (1) 자바에서는 배열이나 List와 같이 여러 개의 값을 저장하고 다루는 객체를 컬렉션(collection)이라 부른다. 이번 절에서는 자주 사용하는 컬렉션 타입인 배열, List, Set, Map, Properties의 값을 설정하는 방법을 알아본다. 1. 배열 프로퍼티의 값 주입 먼저 빈의 프로퍼티가 배열이나, List, Set 타입인 경우, 어떻게 값을 설정하는지 배워본다. - 실습 패키지 생성 exam 패키지 아래에 test09 패키지를 생성한다. test08 패키지의 모든 파일을 복사해온다. - beans.xml 빈 설정 파일 exam/test09/beans.xml 파일을 열고 다음과 같이 편집한다. ... ▶ 자바 코드로 표현하면? Engine temp new Engine(); temp.setMak.. 2022. 10. 25.
139. 의존 객체 주입 (2) 2. 개별 인스턴스 주입하기 이번 실습에서는 프로퍼티에 의존 객체를 주입할 때 이미 존재하는 빈을 주입하는 것이 아닌, 새로 빈을 만들어 주입하는 방법을 알아본다. - 실습 패키지 생성 exam 패키지 아래에 test08 패키지를 생성한다. test07 패키지의 모든 파일을 복사해온다. - beans.xml 빈 설정 파일 exam/test08/beans.xml 파일을 열고 다음과 같이 편집한다. ▶ 자바 코드로 표현하면? Engine temp = new Engine(); temp.setMaker("Hyundai"); temp.setCc(1495); Car car1 = new Car("Avante", temp); 생성자 매개변수를 설정할 때 새로 빈을 생성하여 할당하고 싶다면 태그의 자식 태그로 태그를 선.. 2022. 10. 24.
138. 의존 객체 주입 (1) 어떤 객체가 작업을 수행하기 위해 다른 객체를 지속적으로 사용한다면 그 사용되는 객체를 의존 객체(depencencies)라 부른다. 보통 지속적으로 사용할 객체는 프로퍼티에 보관한다. 이번 절에서는 바로 이 프로퍼티 값으로 의존 객체를 주입하는 방법을 배운다. 1. 의존 객체 설정하기 지금까지는 프로퍼티 값으로 문자열 또는 숫자를 설정하였다. 이번에는 프로퍼티 값으로 객체를 지정하는 방법을 알아본다. 의존 객체 사용과 설정에 대한 이해를 돕기 위해 특별한 구조의 클래스를 준비할 것이다. 다음은 실습 클래스의 관계도이다(그림 1). Car 객체는 Engine 객체와 Tire 객체를 필요로 한다. 특히 Tire 객체는 여러 개를 갖는다. - 실습 패키지 생성 exam 패키지 아래에 test07 패키지를 생.. 2022. 10. 23.
137. 생성자와 프로퍼티 설정 (3) 3. 의 속성을 이용하여 생성자 및 프로퍼티 설정하기 스프링은 태그를 사용하지 않고 프로퍼티 값을 설정하는 방법을 제공한다. 또한 태그를 사용하는 대신 더 간단히 생성자의 매개변수 값을 설정하는 방법도 제공한다. 태그의 속성을 통해 프로퍼티나 생성자의 매개변수 값을 설정하는 방법이다. 실습을 통해 자세히 알아본다. - 실습 패키지 생성 exam 패키지 아래에 test06 패키지를 생성한다. test05 패키지의 모든 파일을 test06 패키지에 복사한다. - beans.xml 빈 설정 파일 exam/test06/beans.xml 파일을 열고 다음과 같이 편집한다. xmlns:p="http://www.springframework.org/schema/p" 태그의 속성을 통해 프로퍼티 값을 설정하려면, 먼저 .. 2022. 10. 21.
136. 생성자와 프로퍼티 설정 (2) - 빈 컨테이너 테스트 생성자 호출을 테스트하는 exam.test04.Test 클래스를 다음과 같이 편집한다. package exam.test04; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { //IoC 컨테이너 준비하여 빈 생성 ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("exam/test04/beans.xml"); Score score1 = (Score)ctx.getBean("score1"); System.out.prin.. 2022. 10. 20.