SlideShare a Scribd company logo
1 of 24
Download to read offline
결합도(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 탄생      소스코드:55.2kb
   리펙토링의 부재       class : 68kb
   VO의 분리는 불가능함   멤버변수 수 : 400
   지속적인 기능추가에     메소드 수 : 811
    따른 관습적인 구현

                   servlet-api.jar : 96kb
   설계단계에서는 VO의
    존재가 미비함
Value Object 문제점
 블랙박스
   실행시점에서
    오류 발생


 reflection
 jsp

 형변환
Value Object 문제점
 개발비용증가
  데이터 타입 추가시
   관련모듈의 수정이
   필요함


 결합도를 의도적으로
  높힘
Value Object 를 버리자
 Java Beans 개념으로
   VO 가 탄생되었다.
    Property의 개념
      getter, setter 탄생
      자동화된 인터페이스
       생성
      인터페이스를 통한 결
       합


 Java Beans 시장의
  실패로 gettter, setter 만
  남아있게 됨
Value Object 의 대안
 기본 Collection 사용    Collection 가공
   내용결합도의 회피           데이터결합도의 확보


   toString 재구현        Box 구현
   key Class 사용        setter, getter 제어
Value Object 의 대안
 Value Object 를 사용    String, int,
  해야 한다면                BigDecimal
   조직의 압력               데이터검증은 독립적
   덤터기                   인 모듈에서
   유지보수               구조체(배열)금지
                         call by reference
                       상속금지
                       인터페이스 활용
                         스탬프결합도 확보
결론

More Related Content

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

메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 uEngine Solutions
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Daum DNA
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Hyosang Hong
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorialBingu Shim
 
The Cucumber for Java
The Cucumber for JavaThe Cucumber for Java
The Cucumber for JavaJonghwa Lee
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Builder, prototype, singleton pattern
Builder, prototype, singleton patternBuilder, prototype, singleton pattern
Builder, prototype, singleton patternYoonJong Choi
 
Effective java 1 and 2
Effective java 1 and 2Effective java 1 and 2
Effective java 1 and 2중선 곽
 
[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로NHN FORWARD
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계AnselmKim
 
Effective java
Effective javaEffective java
Effective javaHaeil Yi
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들Kivol
 
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까Sunghyun Roh
 
토비의 스프링 - DI
토비의 스프링 - DI토비의 스프링 - DI
토비의 스프링 - DIJU Chae
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례SangIn Choung
 

Similar to 결합도 관점에서 본 VO 문제점 (20)

메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함 메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
메타웍스3 워크숍 - 개념소개 및 예제, 그리고 간단한 API문서포함
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
The Introduction to Refactoring
The Introduction to Refactoring The Introduction to Refactoring
The Introduction to Refactoring
 
Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료Jpa 쿼리 포함 자료
Jpa 쿼리 포함 자료
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorial
 
The Cucumber for Java
The Cucumber for JavaThe Cucumber for Java
The Cucumber for Java
 
Java JPA
Java JPAJava JPA
Java JPA
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
(자바교육/스프링교육/스프링프레임워크교육/마이바티스교육추천)#2.스프링프레임워크 & 마이바티스 (Spring Framework, MyBatis)
 
Builder, prototype, singleton pattern
Builder, prototype, singleton patternBuilder, prototype, singleton pattern
Builder, prototype, singleton pattern
 
Effective java 1 and 2
Effective java 1 and 2Effective java 1 and 2
Effective java 1 and 2
 
[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계
 
Effective java
Effective javaEffective java
Effective java
 
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
GraphQL in Action - REST와 이별할 때 생각해야 하는 것들
 
Cygnus unit test
Cygnus unit testCygnus unit test
Cygnus unit test
 
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까아해팀 스터디 Orm은 어떻게 객체를 매핑할까
아해팀 스터디 Orm은 어떻게 객체를 매핑할까
 
토비의 스프링 - DI
토비의 스프링 - DI토비의 스프링 - DI
토비의 스프링 - DI
 
Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례Io t에서의 소프트웨어단위테스트_접근사례
Io t에서의 소프트웨어단위테스트_접근사례
 

More from JavaCommunity.Org

안드로이드와 이통사 확장 API
안드로이드와 이통사 확장 API안드로이드와 이통사 확장 API
안드로이드와 이통사 확장 APIJavaCommunity.Org
 
안드로이드 플랫폼기반의 푸시서버 아키텍처
안드로이드 플랫폼기반의 푸시서버 아키텍처안드로이드 플랫폼기반의 푸시서버 아키텍처
안드로이드 플랫폼기반의 푸시서버 아키텍처JavaCommunity.Org
 
이클립스와 안드로이드
이클립스와 안드로이드이클립스와 안드로이드
이클립스와 안드로이드JavaCommunity.Org
 
Jetty Continuation - 이상민
Jetty Continuation - 이상민Jetty Continuation - 이상민
Jetty Continuation - 이상민JavaCommunity.Org
 
E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발JavaCommunity.Org
 

More from JavaCommunity.Org (7)

안드로이드와 이통사 확장 API
안드로이드와 이통사 확장 API안드로이드와 이통사 확장 API
안드로이드와 이통사 확장 API
 
안드로이드 플랫폼기반의 푸시서버 아키텍처
안드로이드 플랫폼기반의 푸시서버 아키텍처안드로이드 플랫폼기반의 푸시서버 아키텍처
안드로이드 플랫폼기반의 푸시서버 아키텍처
 
이클립스와 안드로이드
이클립스와 안드로이드이클립스와 안드로이드
이클립스와 안드로이드
 
Jetty Continuation - 이상민
Jetty Continuation - 이상민Jetty Continuation - 이상민
Jetty Continuation - 이상민
 
E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발
 
스프링 3.0 & RESTful
스프링 3.0 & RESTful스프링 3.0 & RESTful
스프링 3.0 & RESTful
 
RESTful Java
RESTful JavaRESTful Java
RESTful Java
 

Recently uploaded

MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionKim Daeun
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Wonjun Hwang
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)Tae Young Lee
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Wonjun Hwang
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Kim Daeun
 

Recently uploaded (6)

MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 

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

  • 1. 결합도(coupling) 관점에서 생각한 Value Object 의 문제점과 해결방안
  • 2. 강의목표  결합도의 정의와 의미  결합도의 종류  결합도를 낮추기 위한 노력  Value Object 정의  Value Object 문제점  Value Object 의 개선방향
  • 3. 결합도(coupling)  한 모듈과 다른 모듈간의 상호의존도 또는 각 모듈 사이의 연관도의 관계  모듈간에 얼마나 강하게 연관되어 있는가를 측정하는 방법으로 모듈의 나쁜 특성
  • 4. 결합도를 낮춰야 하는 이유  파급효과(Ripple Effect)를 최소화시킴  한 모듈을 변경할 때 다른 모듈도 변경해야 하는 부담을 최소화  모듈의 조립 중 그 모듈의 내부에 신경을 쓸 필요가 없음
  • 5. 결합도의 종류  자료 결합도 (Data Coupling)  스탬프 결합도 (Stamp Coupling)  제어 결합도 (Control Coupling)  외부 결합도 (Extend Coupling)  공통 결합도 (Common Coupling)  내용 결합도 (Content Coupling)
  • 6. 내용 결합도 (Content Coupling)  호출하여 사용하려는 모듈의 내용을 미리 알고 있지 않으 면 사용할 수 없음
  • 7. 공통결합 (Common Coupling)  모듈들이 동일한 자료 영역을 공통으로 관리  모듈이 외부 환경과 연관되어 있을 경우 외부결합
  • 8. 제어 결합도 (Control Coupling)  한 모듈이 다른 모듈의 내부논리를 제어
  • 9. 스탬프 결합도 (Stamp Coupling)  구조체를 통한 모듈간 결합
  • 10. 자료 결합도 (Data Coupling)  모듈간 매개변수로 결합
  • 11. 자료결합성과 내용결합성의 비교 자료결합성 내용결합성 동시개발 경험중심 계획중심 폭포수/XP 장애처리 점진적투입 집중투입 비용 개발비용 후반 초기 TDD 증가 운영비용 예측불가 기능중심적 본/ FP
  • 12. 결합도를 낮추기 위한 노력  MVC  동시개발 후 조립을 통한 완성  SOA(WOA)  인터넷망을 통한 서비스의 결합  Mashup  스템프결합도(CBD) 극복  디자인패턴  상속이 아닌 위임  클래스가 아닌 인터페이스를 통한 소통
  • 13. Value Object  비즈니스를 수행하는데 필요한 데이터의 집합, 이름, 타입, 다른 데이터간 관계를 표현하기 위한 기법
  • 14. Value Object  상속을 사용  VO 의 재사용  기존 VO에 영향을 주 고 싶지 않을때
  • 15. Value Object  기능강화  VO 의 기능을 보강하 기위해 데이터영역과 별개의 메소드 구현  setter 에 데이터 검증 기능 추가
  • 16. Value Object  인터페이스 사용  call by refrence 문제점 극복  내용 결합을 극복하기 위한 선택
  • 17. 결합도관점에서본 Value Object 문제점  Value Object 는 내용결합도임  getter, setter 를 알기 전까지는 VO 와 연관된 모듈을 구현, 사용할 수 없음  Value Object 의 문제점은 관련 모듈에 전파  Value Object 를 제거할 수 없음
  • 18. Value Object 문제점  Super VO 탄생 소스코드:55.2kb  리펙토링의 부재 class : 68kb  VO의 분리는 불가능함 멤버변수 수 : 400  지속적인 기능추가에 메소드 수 : 811 따른 관습적인 구현 servlet-api.jar : 96kb  설계단계에서는 VO의 존재가 미비함
  • 19. Value Object 문제점  블랙박스  실행시점에서 오류 발생  reflection  jsp  형변환
  • 20. Value Object 문제점  개발비용증가  데이터 타입 추가시 관련모듈의 수정이 필요함  결합도를 의도적으로 높힘
  • 21. Value Object 를 버리자  Java Beans 개념으로 VO 가 탄생되었다.  Property의 개념  getter, setter 탄생  자동화된 인터페이스 생성  인터페이스를 통한 결 합  Java Beans 시장의 실패로 gettter, setter 만 남아있게 됨
  • 22. Value Object 의 대안  기본 Collection 사용  Collection 가공  내용결합도의 회피  데이터결합도의 확보  toString 재구현  Box 구현  key Class 사용  setter, getter 제어
  • 23. Value Object 의 대안  Value Object 를 사용  String, int, 해야 한다면 BigDecimal  조직의 압력  데이터검증은 독립적  덤터기 인 모듈에서  유지보수  구조체(배열)금지  call by reference  상속금지  인터페이스 활용  스탬프결합도 확보