이 글은 책 'UML모델링 객체지향분석및설계'를 읽고 정리한 것이다
1. 객체지향 개념
1) 객체
-객체지향 시스템의 가장 기본적인 구성요소는 객체(object)이다
-객체는 정체성을 가지는 어떤 것을 의미하며, 유형객체 또는 무형객체이다
-모든 객체는 정체성을 가진다
-객체는 상태와 행위를 갖는다
-객체의 상태는 객체가 가질 수 있는 속성이며, 행위는 객체가 수행할 수 있는 작업을 의미한다
-상태와 행위는 객체의 특징이 된다
-상태 = 속성 = 필드 = 인스턴스/변수
-행위 = 연선 = 메서드 = 메서드
-잘 정의된 경계와 정체성을 가지며 상태와 행위를 캡슐화한 개별 독립체
2) 클래스
-실 세계 도메인에는 유사 종류(타입)의 수많은 객체들이 존재한다
-유사 특징을 갖는 객체들의 집합을 클래스 라고 한다
-행위와 데이터 구조가 논리적으로 유사한 객체들의 집합
-각 객체가 갖는 고유특징을 제외하고 공통특징만을 추출하여 의미있는 이름을 정의하는 것을 추상화(abstraction)
-추상화 과정을 통해 유사 객첻들의 집합인 클래스를 정의할 수 있다
-클래스에 속하는 모든 객체들은 공통특징을 포함하지만 이들 객체는 각각의 정체성을 갖는 각기 다른 객체이다
-클래스는 유사종류이 객체들이 공통으로 갖는 특징구조를 명세하므로 클래스는 객체의 설계도이다
-객체는 클래스의 실제보기이므로 객체를 클래스에 대한 인스턴스 라고도 부른다
3) 메시지
-메시지는 특정 객체에세 행위를 수행하도록 요청하는 명령이며 객체 사이에 정보를 교환하는 방법이다
-객체지향 시스템은 객체 상호간에 메시지를 주고받는 상호협력을 통해 문제를 해결한다
-객체지향 시스템은 상태 데이터와 행위(메서드)를 객체로 정의하고 객체사이의 행위요청(메시지 통신)을
통해 문제를 해결한다
-객체의 행위는 다른 객체에서 자신이 준비한 행위를 제공한다는 의미에서 서비스 라고도 부른다
-객체지향 언어에서 메서드에 대한 명세를 시그니처 라고 한다
시그니처 : 다른 객체에서 메서드를 호출하기 위한 규약, 메서드 수행을 요청하는 객체는 시그니처를 준수해야 한다
4) 캡슐화 정보은닉
-캡슐화 : 상태와 행위를 하나로 묶는 것을 의미한다
-캡슐화를 지원하는 클래스를 통해 객체 내부의 상태 데이터를 외부 객체로부터 보호 할 수 있다
이를 정보 은닉이라고 한다
-켑슐화는 정보은닉을 포함하는 개념이다
-객체의 데이터는 외부 객체로부터 직접 접근될 수 없으며 외부 객체가 데이터에 대한 접근이 필요할 때에는
공식적으로 외부에 서비스하는 연산에 대한 메시지 호출을 통해 간접적으로 접근될 수 있다
=>즉 외부객체 = 인터페이스를 호출하여 간접적으로 접근한다
5) 상속
-상속은 기존 클래스의 상태와 행위를 재사용하는 방법이다
-상속은 클래스 사이에 계층구조가 성립할 때 발생, 일반화 과정을 통해여 만들어진다
-일반화는 여러 클래스 사이에 공통적인 특징을 파악하여 더욱 일반적인 상위클래스를 정의한 것이므로
추상화 개념과 유사하다
-상위클래스는 하위클래스보다 더욱 일반적인 특징을 포함하고 있다
-하위계층 클래스는 상위계층 클래스의 특징을 상속한다
일반화
-계층관계가 성립되어 하위클래스들의 공통적인 특징을 추출하여 상위 계층 클래스를 정의하는 것이 일반화 이다
-상위클래스 = 수퍼클래스, 부모클래스, 기반클래스
-하위클래스 = 서브클래스, 자식클래스, 확장클래스, 파생클래스
특수화
-상위클래스에서 하위클래스로 더욱 구체화하는 것을 특수화 라고 한다
-하위클래스는 상위클래스로부터 공통적이며 일반적인 특징을 상속하고 자신만의 특별한 특징을 포함하므로
상위계층보다 더욱 구체적인 클래스가 된다
-서브클래스는 수퍼클래의 모든 특징을 상속받으며 자신만의 특별한 특징을 추가 할 수 있다
-서브클래스는 수퍼클래스의 모든 특징을 상속하므로 서브 클래스는 수퍼클래스의 한 종류라고 할 수 있다
-일반화 관계는 '이다(is-a)' 관계 라고도 부른다
-서브클래스는 수퍼클래스의 특징을 포함하므로 서브클래스는 수퍼클래스의 종류가 되지만
이에 대한 역은 성립하지 않는다
6) 다형성
-다형성은 특정 객체가 다양한 클래스 타입이 될 수 있다는 것 이다
-다양한 클래스 타입은 특정 객체에 대한 수퍼클래스 타입을 의미한다
-하위클래스는 상위클래스의 특징을 상속하는 것과 더불어 자신만의 특징을 갖는다
이에 따라 하위클래스 객체는 상위클래스의 어떤 타입이라도 될 수 있다 그러나 역은 안된다
-특정 객체가 상속특징에 의해 다양한 클래스 타입이 될 수 있는 특징을 다형성이라고 한다
-다형성의 가장 큰 장점은 일반화 프로그래밍을 가능하게 한다는 것이다
-일반화 프로그래밍에 대한 첫번째 보기는 동적 바인딩에 의한 동적 메서드 호출이 가능하게 한다는 것이다
-동적바인딩에 의한 동적 호출이란, 동일 종류(타입)에 해당하는 다양한 객체들이 동일 연산 요청에 대하여
다르게 행동하는 것을 의미한다
-일반화 프로그래밍에 대한 두번째 보기는 메서드의 인수 타입을 넓은 범위에서 사용하는 것을 가능하게 한다
-메서드 매개변수 타입이 수퍼클래스 타입이면 해당 수퍼 클래스의 어떤 서브클래스 객체라도 전달할 수 있다