결합도 관점에서 본 VO 문제점

Preview:

DESCRIPTION

2010 한국 자바 개발자 페스티벌 Track 3 Session 1 발표자료

Citation preview

결합도(coupling) 관점에서 생각한 Value Object 의 문제점과 해결방안

강의목표

결합도의 정의와 의미

결합도의 종류

결합도를 낮추기 위한 노력

Value Object 정의

Value Object 문제점

Value Object 의 개선방향

결합도(coupling)

한 모듈과 다른 모듈간의 상호의존도 또는 각 모듈 사이의 연관도의 관계

모듈간에 얼마나 강하게 연관되어 있는가를 측정하는 방법으로 모듈의 나쁜 특성

결합도를 낮춰야 하는 이유

파급효과(Ripple Effect)를 최소화시킴

한 모듈을 변경할 때 다른 모듈도 변경해야 하는 부담을 최소화

모듈의 조립 중 그 모듈의 내부에 신경을 쓸 필요가 없음

결합도의 종류

자료 결합도 (Data Coupling)

스탬프 결합도 (Stamp Coupling)

제어 결합도 (Control Coupling)

외부 결합도 (Extend Coupling)

공통 결합도 (Common Coupling)

내용 결합도 (Content Coupling)

내용 결합도 (Content Coupling)

호출하여 사용하려는 모듈의 내용을 미리 알고 있지 않으면 사용할 수 없음

공통결합 (Common Coupling)

모듈들이 동일한 자료영역을 공통으로 관리

모듈이 외부 환경과 연관되어 있을 경우 외부결합

제어 결합도 (Control Coupling)

한 모듈이 다른 모듈의 내부논리를 제어

스탬프 결합도 (Stamp Coupling)

구조체를 통한 모듈간 결합

자료 결합도 (Data Coupling)

모듈간 매개변수로 결합

자료결합성과 내용결합성의 비교

자료결합성 내용결합성

동시개발 경험중심 계획중심 폭포수/XP

장애처리 비용

점진적투입 집중투입

개발비용 증가

후반 초기 TDD

운영비용 예측불가 기능중심적 본/ FP

결합도를 낮추기 위한 노력

MVC 동시개발 후 조립을 통한 완성

SOA(WOA) 인터넷망을 통한 서비스의 결합

Mashup 스템프결합도(CBD) 극복

디자인패턴 상속이 아닌 위임

클래스가 아닌 인터페이스를 통한 소통

Value Object

비즈니스를 수행하는데 필요한 데이터의 집합, 이름, 타입, 다른 데이터간 관계를 표현하기 위한 기법

Value Object

상속을 사용 VO 의 재사용

기존 VO에 영향을 주고 싶지 않을때

Value Object

기능강화 VO 의 기능을 보강하

기위해 데이터영역과별개의 메소드 구현

setter 에 데이터 검증기능 추가

Value Object

인터페이스 사용 call by refrence

문제점 극복

내용 결합을 극복하기 위한 선택

결합도관점에서본 Value Object 문제점

Value Object 는 내용결합도임

getter, setter 를 알기 전까지는 VO 와 연관된 모듈을 구현, 사용할 수 없음

Value Object 의 문제점은 관련 모듈에 전파

Value Object 를 제거할 수 없음

Value Object 문제점

Super VO 탄생 리펙토링의 부재

VO의 분리는 불가능함

지속적인 기능추가에 따른 관습적인 구현

설계단계에서는 VO의 존재가 미비함

소스코드:55.2kb

class : 68kb

멤버변수 수 : 400

메소드 수 : 811

servlet-api.jar : 96kb

Value Object 문제점

블랙박스 실행시점에서

오류 발생

reflection

jsp

형변환

Value Object 문제점

개발비용증가 데이터 타입 추가시

관련모듈의 수정이 필요함

결합도를 의도적으로 높힘

Value Object 를 버리자

Java Beans 개념으로 VO 가 탄생되었다.

Property의 개념

getter, setter 탄생

자동화된 인터페이스 생성

인터페이스를 통한 결합

Java Beans 시장의 실패로 gettter, setter 만 남아있게 됨

Value Object 의 대안

기본 Collection 사용 내용결합도의 회피

toString 재구현

key Class 사용

Collection 가공 데이터결합도의 확보

Box 구현

setter, getter 제어

Value Object 의 대안

Value Object 를 사용해야 한다면 조직의 압력

덤터기

유지보수

String, int, BigDecimal 데이터검증은 독립적

인 모듈에서

구조체(배열)금지 call by reference

상속금지

인터페이스 활용 스탬프결합도 확보

결론

Recommended