'composition'에 해당되는 글 1건

  1. 2010.10.04 OOD - 객체의 관계를 나타내는 용어 (1)

객체지향설계는 객체를 구별하고, 관계를 구성하는 표현하는 것입니다.  객체들의 관계를 일반화 시켜서는 연관(Association)이라고 하며, 4가지의 Multiplicity, Aggregation, Composition, Dependency 패턴으로 나눌수 있습니다.
 

역시 연관(Association)은 쉽지 않아~



이 4가지의 관계를 구분하는 것은 매우 어려운 일이 지만, 설계에 대한 문서들과 구현상에서 미묘한 차이가 이들 관계들이 가진 특성입니다.


Multiplicity

하나의 인스턴스  또는 인스턴스 컬렉션이 어떤 클래스의 하나의 인스턴스에 링크 되어 있는 것.
1, 0..1, *, 0..*, 1..* 의 관계를 가질 수 있습니다. (일대일, 일대영, 다대다 ....)

Multiplicity 예
public class Circle {
    private Point pointObj;
 
}
 
public class Point {
	private int X_POS = 0;
	private int Y_POS = 0;
 
        public int getXpos() {
            return this.X_POS;
        }
 
        public void setXpos(int xpos) {
            this.X_POS = xpos;
        }
 
        public int getYpos() {
            return this.Y_POS;
        }
 
        public void setYpos(int ypos) {
            this.Y_POS = ypos;
        }
}




Aggregation

A 객체가 B 객체를 포함한다. 메인 클래스는 포함하는 클래스 없이는 존재 할 수 없지만, 포함되는 클래스는 메인 클래스 없이도 존재할 수 있습니다.

main class
public class Car {
	Engine eng;
}

sub class
public class Engine {
	private int CC = 0;
	private int make = 0;
	private String ModelNo = null;
 
	public Engine(int cc,int make,String modelNo) {
		this.CC = cc;
		this.make = make;
		this.ModelNo =  modelNo;
	}
}



Composition

A 객체가 B 객체를 포함한다. B 객체의 생명은 A 객체에 의해 좌우된다.
포함하고 있는 하위 클래스에 의존하는 메인 클래스를 의미합니다. 메인 클래스는 하위 클래스 없이는 존재할 수 없고, 하위 클래스는 메인클래스 없이는 존재할 수 없는 관계.

Main Class
public class Circle {
    private Point pointObj;
 
    public Circle(int radius) {
        this.pointObj.setRadius(radius);
    }
 
    protected void finalize() throws Throwable {
        pointObj = null;
        super.finalize();
    }
}


Sub Class
public class Point {
	private int radius = 0;
 
        public int getRadius() {
            return this.radius;
        }
 
        public void setRadius(int radius) {
            this.radius = radius;
        }
}


 

Dependency

A 객체의 메소드에서 B 객체를 사용한다.
클래스의 속성으로 존재하는 것이 아닌, 메소드에서 포함한다.



객체의 생명시간에 대한 논의도 염두에 두어야 합니다.

Hybrid 님의 블로그 포스트: Association, Aggregation and Composition 에서 3가지를 구분하는 요소로서의 객체 생명시간 에 대한 논의 글이 참고할 만 합니다.

저도 사실 듣기만 했지 럼바우의 원서적은 본 적이 없어서 정확한 출처는 밝히기 어렵네요
다만 아래 링크의 OMT 표기법을 보면
http://students.cs.byu.edu/~pbiggs/survey.html
여기선 아예 집합화(aggregation)와 합성화(composition)의 구분 없이 모두 집합화로만 보며
그것이 필수적인 것인가 부가적인 것인가로 구분하고 있는 것 같고

제가 알기로도 집합화라고 해서 생명시간(lifetime) 자체가 주 객체와 별개로 살아남을 수는 없고
다만 그 생명시간이 주 객체와 얼마나 밀접한가에 따라 구분하는 것으로 알고 있습니다

제가 참고한 책은 'K교수의 객체지향 이야기' 252~254 페이지인데 여기선 이렇게 설명하고 있네요

- 부속품 관계를 집합화와 합성화로 구별하는 조건은 주 객체와 부속 객체간의 생명 시간이 얼마나 밀접하게 연관되어 있는가에 대한 것이다.
- 합성화의 경우 주객체 생성시 부속객체도 반드시 생성되어야 하며 주객체 소멸시 부속객체도 소멸되어야 한다. 즉, 합성화의 경우 주객체와 부속객체의 생명 시간은 정확히 일치한다.
- 생명시간의 관점에서 볼 때 집합화로 모델링된 부속객체와 주객체의 생명시간이 정확히 일치하지는 않는다. 그러나 집합화의 경우에도 주객체가 소멸되면 부속객체도 없어진다는 사실을 인식해야 한다.

이 책에선 사람의 몸에서 머리와 몸통은 필수적인 것으로 합성화에 비유하고, 팔이나 다리는 필요하지만 필수적이진 않다는 점에서 집합화에 비유하고 있습니다.

-- 댓글 중


참조 :
http://www.hiteshagrawal.com/uml/association-in-uml
http://www.hiteshagrawal.com/uml/aggregation-in-uml
http://www.hiteshagrawal.com/uml/composition-in-uml
신고

이 글을 Twitter / Facebook 에 공유하기
이 글이 유익하다면 아래의 트위터 버튼을 눌러 공유해 주시거나, 페이스북 "좋아요" 버튼을 눌러 주세요.

   


Posted by 반더빌트


티스토리 툴바