용어 | 정의 |
---|---|
객체(Object) | 데이터와 데이터의 연산을 가하는 프로시저를 함께 묶은 단위 프로시저(procedure)는 일반적으로 메서드(method) 혹은 연산(operation)일고 한다. 객체는 요청(request) 또는 메시지(message)를 사용자에게 받으면 연산을 수행한다. |
요청(Request) | 객체가 연산을 실행하게 하는 유일한 방법. 연산은 객체 내부 데이터의 상태를 변경하는 유일한 방법. ⇒ 이런 접근의 제약 사항으로 객체의 내부 데이터는 캡슐화(encapsulate)된다고 말한다. |
캡슐화(Encapuslate) | 객체 외부에서는 객체의 내부 데이터에 직접 접근할 수 없고, 객체의 내부 데이터 표현 방법을 알 수 없다. |
시그니처(Signature) | 연산의 이름, 매개변수로 받아들이는 객체들, 연산의 반환 값을 명세한다. |
인터페이스(Interface) | 객체가 정의하는 연산의 모든 시그니처들을 일컫는 말. 객체가 받아서 처리할 수 있는 연산의 집합. 객체 지향에서 인터페이스는 가장 기본적인 것. 객체는 인터페이스로 자신을 드러낸다. 외부에서 객체를 알 수 있는 방법은 인터페이스 밖에 없기 때문에 인터페이스를 통해서만 처리를 요청할 수 있다. 인터페이스는 구현에 대해서 전혀 정보가 없다. |
타입(Type) | 특정 인터페이스를 나타낼 때 사용하는 이름. 객체가 “Window” 타입을 갖는다는 것은 “Window” 인터페이스에 정의한 연산들을 모두 처리할 수 있다는 의미. 객체는 여러 타입을 가질 수 있고, 서로 다른 객체가 하나의 타입을 공유할 수도 있다. 인터페이스가 다른 인터페이스를 부분집합으로 포함할 수도 있다. - 서브타입: 다른 인터페이스를 포함하는 인터페이스 - 슈퍼타입: 다른 인터페이스가 포함하는 인터페이스 |
동적바인딩(Dynamic Binding) | 어떤 요청과, 그 요청을 처리할 객체를 프로그램 실행 중, 즉 런타임에 연결 짓는 것을 동적 바인딩이라고 한다. 프로그램이 기대하는 객체를 동일한 인터페이스를 갖는 다른 객체로 대체할 수 있게 해준다. |
다형성(Polymorphism) | 동적 바인딩 등을 통해 동일한 인터페이스를 갖는 다른 객체로 대체 가능하게 만드는 대체성. 사용자의 정의를 단순화하고 객체 간 결합도를 없앤다. 서로 간의 관련성을 다양화할 수 있게 만든다. |
디자인 패턴 | 클래스 간에 유사한 인터페이스를 정의하거나, 클래스의 인터페이스에 여러 가지 제약을 정의하는 등, 인터페이스 간의 관련성을 정의한다. |
- 캡슐화
- 크기 정하기
- 종속성
- 유연성
- 성능
- 진화
- 재사용성
객체의 클래스는 객체가 어떻게 구현되느냐를 정의한다.
객체의 타입은 객체의 인터페이스, 즉 그 객체가 응답할 수 있는 요청의 집합을 정의한다.
클래스 상속은 객체의 구현을 정의할 때 이미 정의된 객체의 구현을 바탕으로 한다.
클래스 상속은 부모 클래스에서 정의한 구현을 재사용하여 응용프로그램의 기능성을 확장하려는 메커니즘이다.
인터페이스 상속은 어떤 객체가 다른 객체 대신에 사용될 수 있는 경우를 지정하는 메커니즘이다.
재사용만이 아니라, 상속이 가진 다른 기능들 중에는 동일한 인터페이스를 갖는 객체군을 정의하는 기능도 있다.
용어 | 설명 | 장단점 |
---|---|---|
클래스 상속 | 부모 클래스에서 상속받아 한 클래스의 구현을 정의하는 것 서브클래싱에 의한 재사용은 화이트박스 재사용(White-box reuse)라고 칭한다. 상속은 부모 클래스의 내부가 서브클래스에 공개되기 때문이다. | 클래스 상속은 정적으로 정의 쉽게 사용 가능. 서브클래스는 일부만 연산 정의 가능 런타임에 상속받은 부모 클래스의 구현 변경 불가 서브클래스는 부모 클래스의 구현에 종속될 수 밖에 없기에, 부모 클래스 변경 시 추가적으로 변경 필요 |
객체 합성 | 다른 객체를 여러 개 붙여서 새로운 기능 혹은 객체를 구성하는 것. | 인터페이스 정의에 더 많은 주의 필요 캡슐화 유지 가능 각 클래스의 한 가지 작업에 집중 가능클래스의 수가 적어지고, 객체의 수가 많아진다. |
위임 | 두 객체가 하나의 요청을 처리하는 것 수신 객체는 대리자에게 자신을 매개변수로 전달해서 위임된 연산이 수신자를 참조하게 한다. | 동적이고 고도로 매개변수화된 소프트웨어 특징으로 정적인 소프트웨어 구조보다 이해하기가 어렵다. |
매개변수화된 타입(Generic, Template) | 타입을 정의할 때 타입이 사용하는 다른 모든 타입을 다 지정하지 않은 채 정의한다. 정의하지 않은 타입은 매개변수로 제공한다. 클래스가 사용하는 타입을 변경하게 하는 것 |
용어 | 설명 |
---|---|
집합 | 집합은 한 객체가 다른 객체를 소유하거나 그것에 책임을 진다는 뜻이다. 포함(having)한다거나 다른 객체의 부분(part of)라고 말한다. |
인지 | 한 객체가 다른 객체에 대해 알고 있음(knows of)을 의미한다. 이를 연관 관계 혹은 사용 관계라고도 한다. |