본문 바로가기

JAVA

(133)
스프링3 XML를 이용한 설정 XML을 이용한 설정DaoFactory는 그 DI의 동작원리를 잘 활용한 독립적인 오브젝트 팩토리 클래스로 시작했지만, DI컨테이너인 스프링을 도입하면서부터 애노테이션을 추가해서 DI 갖업에 참고하는 일종의 참고정보로 사용되고 있다.본격적인 범용 DI컨테이너를 사용하면서 오브젝트 사이의 의존정보는 일일이 자바코드로 만들어주려면 번거롭다.DaoFactory를 자세히 살펴보면 대부분 틀에 박힌 구조가 반복된다.또한 DI 구성이 바뀔때마다 자바코드를 수정하고 클래스를 다시 컴파일하는 것도 귀찮은 작업이다.스프링은 DaoFactory와 같은 자바 클래스를 이용하는 것외에도, 다양한 방법을 통해 DI 의존관계 설정정보를 만들수 있다.가장대표적인 것이 XML이다.XML은 단순한 텍스트 파일이기 때문에 다루기 쉽다...
스프링 3 의존관계 주입(DI)의 응용 의존관계 주입의 응용런타임 시에 사용 의존관계를 맺을 오브젝트를 주입해준다는 DI 기술의 장점은 무엇?오브젝트 팩토리가 바로 이 DI방식을 구현한 것이니, 앞서 설명한 모든 객체지향 설계와 프로그래밍의 원칙을 따랐을 때 얻을 수 있는 장점이 그대로 DI 기술에도 적용될 것이다.코드에는 런타임 클래스에 대한 의존관계가 나타나지 않고, 인터페이스를 통해 결합도가 낮은 코드를 만들므로, 다른 책임을 가진 사용 의존관계에 있는 대상이 바뀌거나 변경되더라도 자신은 영향을 받지 않으며, 변경을 통한 다양한 확장 방법에는 자유롭다는게 지금까지 설명한 장점이었다.D사와 N사에 UserDao의 코드를 판매하는 경우가 아니더라도 UsrDao와 ConnectionMaker 사이에 적용된 DI는 여러가지 방법으로 유용하게 활..
스프링 3 의존관계 주입(DI) 의존관계 주입(DI) 제어의 역전(IoC)과 의존관계 주입객체지향적인 설계나, 디자인패턴, 컨테이너에서 동작하는 서버 기술을 사용한다면 자연스럽게 IoC를 적용하거나 그 원리로 동작하는 기술을 사용하게 될 것이다.DaoFactory처럼 객체를 생성하고 관계를 맺어주는 등의 작업을 담당하는 기능을 일반화한 것이 스프링의 IoC 컨테이너이다.IoC가 매우 느슨하게 정의돼서 폭넓게 사용되는 용어로 스프링을 IoC 컨테이너라고만 해서는 스프링이 제공하는 기능의 특징을 멱확하게 설명하지 못한다.스프링이 서블릿컨테이너처럼 서버에서 동작하는 서비스 컨테이너라는 뜻인지,단순히 IoC 개념이 적용된 템플릿 메서드 패턴을 이용해 만들어진 프레임워크인지,또 다른 IoC특징을 지닌 기술이라는 것인지 등 파악하기 힘들다.스프링..
스프링3 싱글톤 레지스트리와 오브젝트 스코프 싱글톤 레지스트리와 오브젝트 스코프DaoFactory를 직접사용하는 것과 @Configuration 애노테이션을 추가해서 스프링의 애플리케이션 컨텍스트를 통해 사용하는 것은 테스트 결과만 보면 동일한 것 같다.하지만 스프링의 애플리케이션 컨텍스트는 기존에 직접 만들었던 오브젝트 팩토리와는 중요한 차이점있다. 오브젝트의 동일성과 동등성자바에서 두 개의 오브젝트가 같은거라는 말은 주의해서 써야한다.자바에서는 두 개의 오브젝트가 완전히 같은 동일한(identical) 오브젝트라고 말하는 것과 동일한 정보를 담고 있는 (equivalent) 오브젝트라고 말하는 것은 분명한 차이가 있다.동일성(identity)비교와 동등성(equality)비교라고 한다.동일성은 == 연산자로, 동등성은 equals() 메서드로 ..
스프링3 제어의 역전(IoC) 스프링3 제어의 역전 IoC(inversion of Control) 팩토리객체의 생성방법을 결정하고 그렇게 만들어진 오브젝트를 돌려주는 역할을 하는 오브젝트를 팩토리라고 부른다.단지 오브젝트를 생성하는 쪽과 생성된 오브젝트를 사용하는쪽의 역할과 책임을 깔끔하게 분리하려는 목적으로 사용하는 것이다.어떻게 만들지와 어떻게 사용할지는 분명 다른 관심이다. 예) 팩토리 역할 맡을 클래스 DaoFactorypublic class DaoFactory {public UserDao userDao {ConnectionMaker connectionMaker = new DConnectionMaker();UserDao userDao = new UserDao(connectionMaker);return userDao;}} 예) ..
스프링3 개론 스프링스프링이 자바에서 가장 중요하게 가치를 두는 것이 객체지향 프로그래밍이 가능한 언어라는 점스프링이 가장 관심을 많이 두는 대상은 오브젝트.스프링을 이해하려면 오브젝트에 깊은 관심을 가져야한다.오브젝트에 대한 관심은 오브젝트의 기술적인 특징과 사용방법을 넘어서 오브젝트의 설계로 발전하게 된다.객체지향 설계의 기초와 원칙을 비롯해서,다양한 목적을 위해 재활용 가능한 설계방법인 디자인 패턴좀 더 깔끔한 구조가 되도록 지속적으로 개선해나가는 작업 리팩토링오브젝트가 기대한 대로 동작하고 있는지 효과적으로 검증하는 데 쓰이는 단위 테스트 등오브젝트 설계와 구현에 관한 여러가지 응용 기술과 지식이 요구된다. 관심사의 분리소프트웨어 개발에서 끝이란 개념은 없다.사용자의 비즈니스 프로세스와 그에 따른 요구사항은 끊..
자바 8 #스트림(Stream) 종류와 함수형 인터페이스 기본 타입 스트림정수를 래퍼 객체로 감싸는 일이 명백히 비효율적인데도 불구하고 정수들을 Stream로 모았다.래퍼 객체의 비효율성은 다른 기본타입인 double, float, long, short, char, byte, boolean의 경우도 마찬가지다.스트림 라이브러리는 기본 타입 값들을 직접 저장하는 데 특화된 타입인 IntStream, LongStream, DoubleStream을 포함한다.short, char, byte, boolean 타입을 저장할려면 IntStream을 사용하고, float인 경우는 DoubleStream을 사용한다.라이브러리 설계자들은 이들 나머지 5개 스트림 타입을 추가할 가치가 있다고 생각하지 않았다. IntStream을 생성하려면 IntStream.of 와 Arrays...
자바 8 #스트림(Stream) 관련 메서드 filter, map, flatMap 메서드스트림 변환은 한 스트림에서 데이터를 읽고, 변환된 데이터를 다른 스트림에 넣는다.이미 특정 조건과 일치하는 모든 요소를 담은 새로운 스트림을 돌려주는 filter변환 List wordList = ...;Stream words = worlList.stream();Stream longWords = words.filter(w -> w.length() > 12); filter의 인자는 Predicate, 즉 T를 받고 boolean을 리턴하는 함수이다.스트림에 있는 값들을 특정 방식으로 변환하고 싶을 때는 map메서드를 사용하고 변환을 수행하는 함수를 파라미터로 전달한다.예) 모든 단어를 소문자로 변환Stream lowercaseWords = words.map(Str..