티스토리 뷰

Studying/JAVA

클래스 설계 기법

hongkyu 2011. 3. 28. 21:08

1. Value Object
1) Model, View 간의 데이터 전달용도
2) 멤버변수와 getter, setter 메소드로 구성
3) 기존 JSP의 Bean과 동일
4) 파라미터가 길어질 경우 VO를 이용하는 것이 효율적
5) Entity VO와 Custom VO 두 종류
- Entity VO : Entity(EJB 또는 DB) 정보와 동일
- Custom VO : 사용자 필요에 의해 만든 VO
6)자동화 도구를 사용하여 만드는 것이 편리함 - eclipse에서 팝업 메뉴의 Source > Generate Getters and Setters 를 통해 쉽게 생성 가능
7) ValueObject 는 j2EE 패턴 중의 하나로 화면의 입력값을 정리하여 보관 및 유지해 두는 클래스 입니다. J2EE 패턴에서는 TrasferObject 라고 한다. 원래는 EJB 의 원격 메소드 호출의 회수를 줄이고 퍼포먼스의 저하를 막는 목적으로 개발된 패턴이다.
8) Value Object Pattern
- 데이터베이스에 포함된 데이터의 논리적은 뷰를 표현해줄 수 있다.
- 데이터들의 관계를 추상화하는 방법(일대일, 다대다)으로 사용할 수도 있다.
- 다양한 Data Source로부터 가져온 데이터를 단일 인터페이스로 표현할 수 있게 한다.
- Value Object를 사용하는 클라이언트 애플리케이션이 관련되어 있는 동안은 데이터가 어디서 왔는지, 또는 데이터를 어떻게 관리해야 하는지 몰라도 된다.
- 프리젠트 티어, 비즈니스 티어, 데이터 티어를 왔다 갔다 하면서 데이터를 전달한다.
9) Value Object Layer 생성시 주의사항
- Value Object들은 경량이어야 한다.
- Value Object는 데이터의 표현일 뿐이다. 비즈니스 로직이 포함되어서는 안된다.
- Value Object는 데이터베이스에 들어 있는 데이터의 View일 뿐이다.
- Value Object의 객체 계층 구조를 단순하게 유지하라.
- 영속성 프레임워크에 존재하는 Value Object들의 수를 관찰하라.
** 개발자들의 공통적인 실수는 Value Object를 너무 세분화하는 것이다. 많은 Value Object는 유지보수성을 떨어뜨린다.
** Value Object 는 쉽게 말하자면 get/set method 를 가진 일종의 데이터 전달용 Object 라 할 수 있다.

예제
public class ValueObject {
    String stringValue;
    int intValue;

    public String getStringValue() { return this.stringValue; }
    public int getIntValue() { return this.intValue; }

    public void setStringValue(String stringValue) { this.stringValue = stringValue; }
    public void setIntValue(int intValue) { this.intValue = intValue; }
}

2. Domain Object
1) Eric Evans는 자신의 저서 Domain Driven Design에서 주로 사용되는 도메인 객체(domain object)를 분류해 놓았다.
- Entity : 장시간 동안 식별이 가능하며 고유한 표현을 지니는 객체.  종종 '레퍼런스 객체(reference object)'라고 불리기도 한다.
- Value Object : 단지 속성(attribute)의 조합만 의미를 지니는 객체. 두 개의 Value Object의 모든 속성이 같다면 둘은 같은 것으로 간주된다.
- Service : 특정 도메인의 문맥하에서만 독립적으로 수행되는 오퍼레이션(operation). 서비스 객체(Service object)는 다수 서비스를 하나의 객체로 만든 것이다. 대개 특정한 실행 상황 내에서는 각각의 서비스 객체마다 하나의 인스턴스(instance)만 갖게 된다.
2) 몇 가지 예를 들어, 엔터티(Entities)는 대개 고객, 배, 대여 계약과 같이 큰 것이다. Values(Value objects)는 보다 작은 것으로 날짜, 돈, 데이터베이스 질의 등이 여기에 해당한다. 마지막으로 Services는 보통 테이터베이스 연결, 메시지 게이트웨이(Messaging Gateway), 저장소(Repository)나 제품 공장(Product Factory)과 같이 외부 자원에 접근한다.

3. Data Transfer Object - Java Bean
1) 데이터가 포함된 객체를 한 시스템에서 다른 시스템으로 전달하는 작업을 처리하는 객체입니다. VO와 DTO의 차이점은 특정한 비즈니스 값을 담는 객체를 VO라 하고 레이어간의 통신용도로 오가는 객체를 DTO라고 합니다.
2) VO와 DTO의 비교
DTO의 나머지 속성은 VO와 비슷하지만 Martin Fowler는 저서 Patterns of Enterprise Application Architecture에서 약간 다른 의미로 이야하기 한다. DTO는 메소드 호출 횟수를 줄이기 위해 데이터를 담고 있는 객체이고, VO는 값이 같으면 동일 오브젝트라고 볼 수 있는 객체이다. 예를 들어,
DTO a = new DTO(1);
DTO b = new DTO(1);
이라고 했을 때 a != b 이지만,
VO a = VO(1);
VO b = VO(1);
이라고 했을때는 a == b라고 정의하는 형태이다.

4. Data Access Object - Entity Bean
1) 데이터 접근을 목적하는 객체입니다. 커넥션 같은 것을 하나만 두고 여러 사용자가 DAO의 인터페이스를 사용하여 필요한 자료에 접근 하도록 하는 것이 DAO의 개념이다.
2) 필요성
- 모든 데이터베이스에 공통적으로 접속 할 수 있는 ODBC가 나왔지만 완벽하진 못하다. 여전히 로우 레벨의 API를 포함하고 있었기 때문에 개발 장벽이 여전히 높기 때문에 개발자들은 정작 데이터베이스에 들어 있는 데이터를 어떻게 이용할지에 초점을 맞추기 보다, 어떻게 데이터베이스에 접속해서 데이터베이스와 교류하는지에 더 초점을 기울엿다. 즉 데이터를 활용하는 논리적 고민보다 기술적 고민에 더 많이 신경을 쓰게 되어 DAO란 대안이 나왔다.
3) 기대효과
- 사용자는 자신이 필요한 Interface를 DAO에게 던지고 DAO는 이 인터페이스를 구현한 객체를 사용자에게 편리하게 사용 할수 있도록 반환해준다.
4) 장 단점
- DB에 대한 접근을 DAO가 담당하도록 하여 데이터베이스 엑세스를 DAO에서만 하게 되면 다수의 원격호출을 통한 오버헤드를 VO나 DTO를 통해 줄일수 있고 다수의 DB 호출문제를 해결할 수 있다. 또한 단순히 읽기만 하는 연산이므로 트랜잭션 간의 오버헤드를 감소할 수 있다.그러나 Persistent Storage를 너무 밀접하게 결합해서 작성을 하게 되면 Persistent Stroage를 다시 작성할 경우가 생기는데 이러한 경우 유지 보수의 문제가 생길수도 있다.
5) 예제
// members에 대한 DAO 생성자로 Connection 을 받는다.
// 그러면 해당 DAO 인스턴스는 해당 Connection 을 계속 재사용하게 된다.
// 이 Connection 은 외부에서 넘겨 준것이므로 해당 DAO 는 release 는 할수 없다.
// DAO 에서는 ResultSet 과 Statement 만을 생성하고 close 한다.

public class membersDAO {
    Connection dbConnection = null;

    public membersDao( Connection dbConnection ) { 
        this.dbConnection = dbConnection ; 
    }

    public Vector doMembersDBLogic( String param ){
        Statement stmt = null;
         ResultSet rs = null;

         try { 
            stmt = dbConnection.createStatement(); 
            stmt.executeQuery( param); 
            // Vector 에 결과 저장 & return 
        } catch (Exception ex) { 
            // exception 처리; 
        } finally { 
            DBUtil.closeStatement( stmt ) ; // statement close 
            DBUtil.closeResultSet( rset ) ; // resultset close 
        } 
    }
}

5. Singleton Pattern
1) 시스템 내부에 단 한개의 인스턴스 만을 생성하고자 할 경우에 사용한다. 예를 들면 컴퓨터에서 현재의 시스템 설정을 표현하는 클래스를 만들 경우 컴퓨터는 한대 뿐이기 때문에 그것에 대한 설정을 표현한 것이 여러개일 필요가 없다.
2) 클래스라는 것이 보통 여러 오브젝트를 생성하는 데 쓰이는 반면, Singleton의 경우는 오직 하나의 오브젝트만을 생성한다. 그래서 이 패턴에서는 Singleton 안에서 자체적으로 오브젝트를 생성한다.
3) 예제
public class Singleton{

    private static Singleton INSTANCE = new ControlMachine();

    private Singleton() {
    }

    public static Singleton getInstance() {
            if (INSTANCE == null) { INSTANCE = new Singleton(); }
            return INSTANCE;
    }
}

 

반응형

'Studying > JAVA' 카테고리의 다른 글

MessageBox 소스  (0) 2011.04.20
BlueCove stack  (0) 2011.03.28
외부 라이브러리를 포함한 Jar 파일 만들기  (0) 2011.03.28
Singleton (싱글톤) 패턴  (0) 2011.03.24
현재 마우스 포인트 위치 구하기  (0) 2011.03.24
댓글
«   2024/05   »
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 31
최근에 올라온 글
글 보관함
Total
Today
Yesterday