객체지향 기법은 재사용을 가능케 하고, 재사용은 빠른속도의 소프트웨어 개발과 고품질의 프로그램의 생산을 가능하게 한다. 객체 지향 소프트웨어는 그 구성이 분리되어 있기 때문에 유지 보수가 쉽다.
(1) 객체지향의 개용
[1] 1966년 Simula 67 프로그래밍 언어를 개발하면서, 시스템의 한 구성원으로서 한 행위를 행할수 있는 하나의 단위로 객체라는 개념을 사용했다.
[2] 객체 지향 기법에서의 시스템 분석은 문제 영역에서 개체를 정의하고, 정의된 객체들 사이의 상호작용을 분석하는 것이다.
[3] 객체 지향 기법은 복잡한 시스템의 설계를 단순하게 한다. 시스템은 하나 또는 그 이상의 규정된 상태를 갖는 객체들의 집합으로 시각화될 수 있으며, 객체의 상태를 변경시키는 연산은 비교적 쉽게 정의된다.
⭐️ (2) 객체지향의 기본개념
객체 : 속성 + 메소드
속성 : 객체의 상태
메소드 : 연상, 행위(C언어의 함수)
메시지 : 메소드를 자극하는 지시어
클래스 : 공통의 행위와 속성을 갖는 객체들의 모임
인스턴스 : 객체는 클래스에 의해 인스턴스화 된다
1) 객체(Object)
[1] 현실세계에 존재할 수 있는 유형, 무형의 모든 대상을 말한다.
[2] 속성과 메소드로 정의된다.
[3] 객체는 인터페이스인 공유부분을 갖으며, 상태(state)를 가지고 있다
2) 속성(attribute)
[1] 객체가 가지고 있는 특성으로, 현재 상태(객체의 상태)를 의미한다.
[2] 속성은 개체의 상태, 성질, 분류, 식별 수량 등을 표현한다.
3) 클래스(class)
[1] 공통된 행위와 특성을 갖는 객체의 집합이다.
[2] 클래스라는 개념은 객체 타입으로 구현된 소프트웨어를 의미한다. 클래스는 동일한 타입의 객체들의 메소드와 변수들을 정의하는 템플릿(template)이다.
4) 메시지
[1] 한 객체가 다른 객체의 메소드를 부르는 과정으로, 외부에서 하나의 객체에 보내지는 메소드의 요구이다.
[2] 일반 프로그래밍 과정에서 함수 호출에 해당된다.
5) 메소드
[1] 메소드는 객체가 어떻게 동작하는지를 규정하고 속성의 값을 변경시킨다.
[2] 메소드는 메시지에 의해 불리어질 수 있는 제어와 절차적 구성요소이다.
6) 다형성(polymorphism)
[1] 같은 메시지에 대해 각 클래스가 가지고 있는 고유한 방법으로 응답할 수 있는 능력을 의미한다.
[2] 두 개 이상의 클래스에서 똑같은 메시지에 대해 객체가 서로 다르게 반응하는 것이다.
[3] 다형성은 주로 동적바인딩에 의해 실현된다.
정적바인딩 : 실행전, 컴파일시 (C언어 함수)
동적바인딩 : 실행중 (Java 메소드)
7) 상속성
[1] 새로운 클래스를 정의할 때 기존의 클래스들의 속성을 상속받고 필요한 부분을 추가하는 방법이다.
[2] 높은 수준의 개념은 낮은 수준의 개념으로 특정화된다.
[3] 상속은 하위 계층은 상위 계층의 특수화(specialization) 계층이 되며, 상위 계층은 하위 계층의 일반화(generalization) 계층이 된다.
8) 캡슐화
[1] 객체를 정의할 때 서로 관련성이 많은 데이터들과 이와 연관된 함수들을 정보처리에 필요한 기능을 하나로 묶는 것을 말한다.
[2] 데이터, 연산, 다른 객체, 상수 등의 관련된 정보와 그 정보를 처리하는 방법을 하나의 단위로 묶는 것이다.
9) 정보은닉(Information Hiding) : 객체의 상세한 내용을 객체 외부에 철저히 숨기고 단순히 메시지만으로 객체와의 상호작용을 하게 하는 것. 외부에서 알아야 하는 부분만 공개하고 그렇지 않은 부분은 숨김으로써 대상을 단순화시키는 효과가 있다.