본문 바로가기

개발

자바를 배우고 싶은가?(2) 1장 변수, 데이터형 자바에서 사용할 수 있는 변수에는 몇가지 종류가 있는지 알고 있는가? 여러분은 당연히 알고 있을 것이다. 그렇다면 그 변수들의 유효 범위가 어떻게 되는지, 어떤 변수의 속도가 더 빠른지도 알고 있는가? 아마 시원스레 답하지 못하는 사람이 많을 것 같다. 이것이 필자만의 우려라면 좋겠지만 필자의 주변에는 코드를 작성하면서도 왜 그렇게 사용하는지에 대해서 생각해보지 않은 개발자가 많았으며, 알아야 할 필요성 자체도 느끼지 못한 경우도 많았다. 하지만 우리의 목적은 자바를 좀 더 자바답게 사용하기 위한 것이 아닌가? 좀 더 나은 코드를 작성할 수도 있도록 말이다. 이 장에서는 자바 프로그램을 하기 위해 필요한 가장 기초적인 변수와 데이터형에 대해서 살펴보도록 하겠다.1. 가장 빠른 변수는.. 더보기
자바를 배우고 싶은가? 여러분은 자바를 배우고 싶은가?자바는 1995년 이후로 계속적인 인기를 얻어 많은 개발자들이 사용하고 있는 프로그래밍 언어가 되었다. 현재 대부분의 프로젝트가 자바로 진행되고 있을 만큼 그 인기는 계속되고 있으며 특히 웹 솔루션에 있어서 자바는 다른 언어보다 가장 선호되는 언어이다. 또한 자바는 많은 사람들이 쉽게 배울 수 있는 언어이고 객체지향 프로그래밍인OOP(Object Oriented Programming)를 배울 수 있는 가장 대표적인 언어이기도 하다. 그래서 많은 학원과 학교에서 교육용으로 사용되고 있다.이러한 여러 이유로 인해 자바는 프로그래밍에 입문하는 사람들에게 지속적인 관심을 받고 있다. 하지만 모든 프로그래밍 언어가 그렇듯이 꾸준한 관심과 노력 없이는 흥미를 얻을 수도 없을 뿐만 아니.. 더보기
IoC 컨테이너 12장 이 문서는 개인적인 목적이나 배포하기 위해서 복사할 수 있다. 출력물이든 디지털 문서든 각 복사본에 어떤 비용도 청구할 수 없고 모든 복사본에는 이 카피라이트 문구가 있어야 한다. 4.13 LoadTimeWeaver 등록하기 스프링 2.5에서 도입된 context 네임스페이스는 load-time-weaver 요소를 제공한다.? 1 2 3 4 5 XML기반 스프링 설정파일에 이 요소를 추가하면 ApplicationContext에 대한 스프링 LoadTimeWeaver가 활성화된다. 해당 ApplicationContext내의 어떤 빈도 LoadTimeWeaverAware를 구현할 수 있기 때문에 로드타임 위버(load-time weaver) 인스턴스에 대한 참조를 받는다. 이는 JPA 클래스 변환때문에 로드.. 더보기
Ioc 컨테이너 11장 이 문서는 개인적인 목적이나 배포하기 위해서 복사할 수 있다. 출력물이든 디지털 문서든 각 복사본에 어떤 비용도 청구할 수 없고 모든 복사본에는 이 카피라이트 문구가 있어야 한다. 4.11 JSR 330 표준 어노테이션 사용 스프링 3.0부터는 JSR-330 표준 어노테이션 (의존성 주입)을 지원한다. 이러한 어노테이션들은 스프링 어노테이션과 같은 방법으로 스캔한다. 클래스패스에 적절한 jar를 두기만 하면 된다. Note메이븐을 사용한다면 표준 메이븐 저장소(http://repo1.maven.org/maven2/javax/inject/javax.inject/1/)에서 javax.inject artifact를 사용할 수 있다. pom.xml 파일에 다음 의존성을 추가할 수 있다.? 1 2 3 4 5 ja.. 더보기
IoC 컨테이너 10장 이 문서는 개인적인 목적이나 배포하기 위해서 복사할 수 있다. 출력물이든 디지털 문서든 각 복사본에 어떤 비용도 청구할 수 없고 모든 복사본에는 이 카피라이트 문구가 있어야 한다. 4.10 클래스패스 스캔과 관리된 컨포넌트 이 챕터의 예제 대부분은 스프링 컨테이너에서 각 BeanDefinition를 만드는 설정메타데이터로 XML을 사용한다. 이전 섹션(Section 4.9, “어노테이션기반의 컨테이너 설정”)에서 소스레벨의 어노테이션으로 어떻게 설정 메타데이터를 사용할 수 있는지 보여주었다. 어노테이션을 사용하는 예제에서도 "base" 빈 정의는 명시적으로 XML파일에 정의하고 어노테이션은 의존성 주입에만 사용한다. 이번 섹션은 클래스패스를 스캔해서 후보 컴포넌트들을 암묵적으로 찾아내는 옵션을 설명한다... 더보기
IoC 컨테이너 9장 이 문서는 개인적인 목적이나 배포하기 위해서 복사할 수 있다. 출력물이든 디지털 문서든 각 복사본에 어떤 비용도 청구할 수 없고 모든 복사본에는 이 카피라이트 문구가 있어야 한다. 4.9 어노테이션기반의 컨테이너 설정 꺽쇄괄호()를 사용한 선언 대신 컴포넌트를 연결하기 위해 바이트코드 메타데이터에 의존하는 어노테이션 기반의 설정을 XML 설정의 대안으로 제공한다. 개발자들은 빈 연결을 나타내려고 XML을 사용하는 대신 적절한 클래스, 메서드 필스 선언에 어노테이션을 사용해서 선언을 컴포넌트 클래스로 옮겼다. Section 4.8.1.2, “예제 : RequiredAnnotationBeanPostProcessor”에서 말했듯이 BeanPostProcessor에 어노테이션을 사용해서 스프링 IoC 컨테.. 더보기
IoC 컨테이너 8장 이 문서는 개인적인 목적이나 배포하기 위해서 복사할 수 있다. 출력물이든 디지털 문서든 각 복사본에 어떤 비용도 청구할 수 없고 모든 복사본에는 이 카피라이트 문구가 있어야 한다. 4.8 컨테이너 확장점(Extension Points) 보통 어플리케이션 개발자는 ApplicationContext 구현 클래스들의 서브클래스를 만들 필요가 없다. 대신 특수한 통합 인터페이스의 구현을 연결해서 스프링 IoC 컨테이너를 확장할 수 있다. 4.8.1 BeanPostProcessor를 사용한 빈 커스터마이징BeanPostProcessor 인터페이스는 개발자가 원하는(또는 컨테이너의 기본로직을 오버라이드하는) 인스턴스화 로직, 의존성 처리로직 등을 구현할 수 있는 callback methods를 정의한다. 스프링 컨.. 더보기
IoC 컨테이너 7장 이 문서는 개인적인 목적이나 배포하기 위해서 복사할 수 있다. 출력물이든 디지털 문서든 각 복사본에 어떤 비용도 청구할 수 없고 모든 복사본에는 이 카피라이트 문구가 있어야 한다. 4.6 빈의 특성 커스터마이징하기 4.6.1 라이프사이클 콜백 컨테이너의 빈 라이프사이클 관리와 상호작용하기 위해 스프링의 InitializingBean과 DisposableBean을 구현할 수 있다. 빈의 생성과 소멸에서 어떤 행동을 하도록 컨테이너는 InitializingBean에 대해서 afterPropertiesSet()를 호출하고 DisposableBean에 대해서 destroy()를 호출한다. 초기화 메서드와 소멸 메서드의 객체 정의 메타데이터를 사용하면 클래스가 스프링 인터페이스와 커플링을 갖지 않으면서 이와 동일.. 더보기
IoC 컨테이너 6장 이 문서는 개인적인 목적이나 배포하기 위해서 복사할 수 있다. 출력물이든 디지털 문서든 각 복사본에 어떤 비용도 청구할 수 없고 모든 복사본에는 이 카피라이트 문구가 있어야 한다. 4.5 빈(Bean) 범위 빈 정의를 생성할 때 빈 정의로 정의한 클래스의 실제 인스턴스를 생성하기 위해 레시피를 만든다. 클래스처럼 하나의 레시피에서 많은 객체 인스턴스를 생성할 수 있다는 것을 의미하기 때문에 빈 정의가 레시피라는 개념은 중요하다. 특정 빈 정의로 생성한 객체에 연결할 다양한 의존성과 설정값뿐만 아니라 생성된 객체의 범위도 제어할 수 있다. 이 접근방법은 자바 클래스 레벨에서 객체의 범위를 생성하는 대신에 설정을 통해서 생성한 객체들의 범위를 선택할 수 있으므로 강력하고 유연하다. 빈을 여러 가지 범위 중 .. 더보기
IoC 컨테이너 5장 이 문서는 개인적인 목적이나 배포하기 위해서 복사할 수 있다. 출력물이든 디지털 문서든 각 복사본에 어떤 비용도 청구할 수 없고 모든 복사본에는 이 카피라이트 문구가 있어야 한다. 4.4.3 depends-on의 사용 빈 이 다른 빈의 의존성이 있다면 보통 빈은 다른 빈의 프로퍼티로 설정된다는 것을 의미한다. 일반적으로 이는 XML 기반의 설정 메타데이터에서 요소로 설정한다. 하지만 종종 빈들 사이의 의존성은 직접적이지 않을 수 있다. 예를 들어 데이터베이스 드라이버 등록같은 클래스의 정적 초기화(static initializer)는 실행될 필요가 있다. depends-on 속성은 요소로 빈을 초기화하기 전에 명시적으로 하나 이상의 빈을 강제적으로 초기화한다. 다음 예제는 하나의 빈의 의존성을 나타내려고.. 더보기