1. 객체지향의 개요
- SW를 개발 할때 객체들을 조립해서 작성 할 수 있는 기법을 말함
- 객체지향 기법은 구조적 기법의 문제점으로 인한 SW 위기 해결책으로 사용
※ 구조적 기법: 절차에 근간을 두고, 하나의 커다란 작업을 여러 작은 작업으로 분할하고, 분할된 각 소작업을 수행하는 모듈을 작성. 그 다음 하나로 통합해 최종 작업을 수행하는 하나의 완벽한 프로그램을 작성하는 방법.
단, 구조적 기법은 유지보수를 고려하지 않고 개발 공정에 집중하기 때문에 추가 요구사항을 반영하기 어렵고, 재사용이 어렵다는 문제점이 있음.
- 객체지향은 SW의 재사용 및 확장이 용이하고, 고품질의 SW를 빠르게 개발 할 수 있고 유지보수가 쉽다.
- 복잡한 구조를 단계적, 계층적으로 표현하고, 멀티미디어 데이터 및 병렬처리를 지원
- 현실 세계를 모형화하므로 사용자와 개발자가 쉽게 이해 가능
- 구성 요소와 개념: 객체/클래스/캡슐화/상속/다형성
2. 객체(Object)
- 데이터와 데이터를 처리하는 함수를 캡슐화한 하나의 SW 모듈
※ 데이터: 객체가 가지고 있는 정보로 속성, 상태, 분류, 변수, 상수 등을 나타냄
※ 함수: 객체가 수행하는 기능으로 데이터를 처리하는 알고리즘
- 객체는 독립적으로 식별 가능한 이름을 가짐
- 객체가 가질 수 있는 조건을 상태라고 하는데, 상태는 시간에 따라 변함.
- 객체와 객체는 상호 연관성에 의한 관계를 형성
- 객체가 반응 할 수 있는 메시지의 집합을 행위라고 하며, 객체는 행위의 특징을 나타냄
- 객체는 일정한 기억장소를 가지고 있음
- 객체의 메소드는 다른 객체로부터 메시지를 받았을 때 정해진 기능을 수행
3. 클래스(Class)
- 공통된 속성과 연산 행위를 갖는 객체의 집합으로, 객체의 일반적인 타입을 뜻함
- 각 객체들이 갖는 속성과 연산을 정의하고 있는 틀
- 클래스에 속한 각각의 객체를 인스턴스(Instance)라고 하며, 클래스로부터 새로운 객체를 생성하는 것을 인스턴스화(Instantitation)라고함.
- 같은 클래스에 속한 객체들은 공통된 속성과 행위를 갖고 있으며, 그 속성에 대한 정보가 다르기 때문에 동일한 기능을 하는 객체가 여러가지됨.
- 슈퍼 클래스는 특정 클래스의 상위(부모) 클래스/ 서브 클래스는 하위(자식) 클래스를 의미
4. 캡슐화(Encapsulation)
- 데이터와 함수를 하나로 묶는 것을 의미. 캡슐화 된 객체는 재사용이 용이
- 캡슐화 된 객체는 인터페이스를 제외한 세부 내용이 정보 은닉되어 외부에서의 접근이 제한되며, 외부 모듈을 변경으로 인한 파급효과가 적다.
- 객체들 간의 상호작용에서 상대 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체간 결합도가 낮아짐.
5. 상속(Inheritance)
- 사전에 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
- 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스에서 다시 정의하지 않고서도 사용 할 수 있음
- 상위 클래스로부터 상속받은 송석과 연산에 추가적으로 새로운 속성과 연산을 첨가하여 사용 할 수도 있음
- 상위 클래스의 속성과 연산을 사용하기 때문에 객체와 클래스의 재사용을 높임
- 다중 상속(Multiple Inheritance): 한개의 클래스가 두 개 이상의 상위 클래스로부터 속성과 연산을 상속 받는 것을 의미.
6. 다형성(Polymorphism)
- 메시지에 의해 객체가 연산을 수행하게 될 때 하나의 메시지에 대해 각각의 객체가 가지고 있는 고유한 방법으로 응답 할 수 있는 능력을 의미. 즉, 하나의 메시지에 대해 여러 가지 형태의 응답이 있다는 것을 의미
- 객체들은 동일한 메소드명을 사용하며 같은 의미의 응답을 함.
- 응용 프로그램 상에서 하나의 함수나 연산자가 두 개 이상의 서로 다른 클래스의 인스턴스들을 같은 클래스에 속한 인스턴스처럼 수행 할 수 있도록 하는 것.
'정보처리기사' 카테고리의 다른 글
★ 011 인터페이스 설계[미들웨어 솔루션 명세] (0) | 2020.05.31 |
---|---|
★ 010 애플리케이션 설계[모듈] (0) | 2020.05.31 |
★ 008 애플리케이션 설계[아키텍처 패턴] (0) | 2020.05.30 |
★ 007 애플리케이션 설계[SW 아키텍처] (0) | 2020.05.29 |
★ 006 화면 설계[UI프로토타입 제작 및 검토] (0) | 2020.05.29 |