스프링의 클래스 설계의 기본 개념은 인터페이스를 사용한 느슨한 연결(Decoupling)을 지향한다. 클래스간의 관계를 느슨한 연결을 사용하여 수정할 부분을 최소화시키는 유연한 프로그램을 설계하는 것이 스프링의 기본 개념이다. 인터페이스를 통한 구현은 각 영역별로 작성하며, 프로그램 코드가 들어가는 부분에서 인터페이스를 통한 구현을 기본 바탕으로 한다.
인터페이스를 사용한 클래스 설계 방식은 각각의 구현체에 대해 느슨한 연결을 가능하게 한다. 만약, 다양한 언어로 "안녕하세요"를 출력하고자 할 때 최상의 인터페이스에 구현할 메소드를 정의한 후 각각의 클래스는 인터페이스를 구현하여 작성하는 것이다.
■ 공통적인 특성을 기술하는 인터페이스
public interface Say {
public void hello( String name );
}
한국어로 인사하는 클래스
public void hello( String name ) {
System.out.println( "안녕하세요, " + name );
}
}
영어로 인사하는 클래스
public class SayEng implements Say {
public void hello( String name ) {
System.out.println( "hello, " + name );
}
}
위와 같이 한국어로 인사하는 클래스, 영어로 인사하는 클래스의 구현은 각각 따로 하지만 인터페이스를 통해 구현되었기 때문에 느슨한 연결이 가능해진다. 느슨한 연결을 사용했기 때문에 사용시에 인스턴스를 생성할 때를 제외하고는 모든 사용 방법이 똑같아 진다.
■ 실제 인터페이스 구현을 통해 각 언어로 인사하는 클래스
public class Hello {
public static void main( String[] args ) {
Say ko = new SayKor();
Say en = new SayEng();
ko.hello( "주인님" );
en.hello( "master" );
}
}
실제 사용에서 보듯 영어로 "hello"를 출력하는 부분이나 한글로 "안녕하세요"를 출력하기 위한 메소드 호출을 변하지 않는다. 다만 실제 생성할 때 어느 객체를 생성하느냐만 바뀌는 것이다. 이렇게 느슨한 객체간의 연결이 스프링이 핵심이다. 스프링은 생성자부분까지도 설정 파일을 통해 생성하여 객체간의 의존관계를 해소해준다.
따라서, 스프링을 사용하여 웹 애플리케이션을 제작할 때는 구현해야할 메소드를 정의한 인터페이스를 먼저 작성한 후, 해당 인터페이스를 구현하는 세부 클래스를 작성하는 것이 좋다. 이 때, 인터페이스를 각 영역에 따라 작성하는 것이 좋다. 비즈니스 로직을 담당하는 서비스 계층에서 인터페이스를 작성하고, 퍼시스턴스 계층에서도 인터페이스를 통해 작성한다. 그 후 서비스 계층의 구현 클래스는 퍼시스턴스 계층의 인터페이스 객체를 생성하는 것으로 객체간의 설계가 이루어진다.
'Java2EE Framework > Spring 2.0' 카테고리의 다른 글
스프링2.0 - 빈 생명 주기 관리 방법 (0) | 2010.06.03 |
---|---|
스프링2.0 프레임워크 Core(IoC) 적용하기 (0) | 2010.06.02 |
스프링 프레임워크의 핵심(Inversion of Control) (0) | 2010.06.02 |
스프링2.0 - Light Weight 컨테이너 아키텍처 (0) | 2010.06.01 |
Non EJB 개발 방식의 장단점 (0) | 2010.05.30 |