객체지향 용어 정리 [GoF 디자인 패턴 / TIL]

알락·2023년 6월 17일
0

gof banner

용어 정리

용어정의
객체(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)을 의미한다.
이를 연관 관계 혹은 사용 관계라고도 한다.

객체 지향 개발 원칙

  1. 구현이 아닌 인터페이스에 따라 프로그래밍합니다.
  2. 객체 합성이 클래스 합성보다 더 나은 방법입니다.

참고

  • GoF의 디자인 패턴, 에릭 감마
profile
블록체인 개발 공부 중입니다, 프로그래밍 공부합시다!

0개의 댓글