1. 객체지향 프로그래밍 언어의 개요
현실 세계의 개체(Entity)를 기계의 부품처럼 하나의 객체로 만들어, 기계적인 부품들을 조립하여 제품을 만들 듯이 소프트웨어를 개발할 때도 객체들을 조립해서 프로그램을 작성할 수 있도록 한 프로그래밍 기법
- 프로시저보다는 명령과 데이터로 구성된 객체를 중심으로 하는 프로그래밍 기법
2. 객체지향 프로그래밍 언어의 장단점
- 상속을 통한 재사용과 확장이 용이
- 코드의 재활용성이 높음
- 자연적인 모델링에 의해 분석과 설계를 쉽고 효율성
- 이해도가 쉬움
- 대형 프로그래밍 작성에 용이
- 소프트웨어 개발 및 유지보수가 용이
- 구현 시 처리 시간이 지연
- 구현을 지원해 주는 정형화된 분석 및 설계 방법 없음
3. 객체지향 프로그래밍 언어의 종류
- JAVA
- 분산 네트워크 환경에 적용이 가능하며, 멀티스레드 기능을 제공하므로 여러 작업을 동시에 처리 가능
- 캡슐화가 가능하고 재사용성이 높다.
- 운영체제 및 하드웨어에 독립적이며 이식성이 높음
- C++
- C언어에 객체지향 개념을 적용한 언어
- 모든 문제를 객체로 모델링하여 표현
- SmallTalk
- 1세대 객체지향 프로그래밍 언어
- 최초로 GUI를 제공한 언어
4. 객체지향 프로그래밍 언어의 구성 요소
객체(Object)
데이터(속성)와 이를 처리하기 위한 연산(메소드)을 결합시킨 실체
- 데이터 구조와 그 위에서 수행되는 연산들을 가지고 있는 소프트웨어 모듈
- 속성(Attribute): 한 클래스 내에 속한 객체들이 가지고 있는 데이터 값들을 단위 별로 정의하는 것으로 성질, 분류, 식별, 수량 또는 현재 상태 등을 표현
- 메소드(Method): 객체가 메시지를 받아 실행해야 할 때 구체적인 연산을 정의하는 것
클래스(Class)
두 개 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현하는 요소이다.
- 즉 공통된 특성과 행위를 갖는 객체의 집합이라고 할 수 있다.
메시지(Message)
객체들 간에 상호작용을 하는데 사용되는 수단으로 객체의 메소드를 일으키는 외부의 요구사항
5. 객체지향 프로그래밍 언어의 특징
객체지향 프로그래밍 언어의 특징에는 캡슐화, 정보 은닉, 추상화, 상속성, 다형성 등이 있다.
1) 캡슐화 (Encapsulation)
- 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶는 것을 의미한다.
- 캡슐화된 객체의 세부 내용이 외부에 은폐(정보 은닉)되어, 변경이 발생할 때 오류의 파급 효과가 적다.
- 캡슐화된 객체들은 재사용이 용이하다.
- 캡슐화에서 가장 중요한 개념으로, 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것이다.
- 캡슐화와 정보 은닉의 장점
3) 추상화 (Abstraction)
- 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화하는 것, 즉 모델화 하는 것이다.
- 데이터의 공통된 성질을 추출하여 슈퍼 클래스를 선정하는 개념이다.
- 추상화의 종류
- 과정 추상화 : 자세한 수행 과정을 정의하지 않고, 전반적인 흐름만 파악할 수 있게 설계하는 방법
- 데이터 추상화 : 데이터의 세부적인 속성이나 용도를 정의하지 않고, 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법
- 제어 추상화 : 이벤트 발생의 정확한 절차나 방법을 정의하지 않고, 대표할 수 있는 표현으로 대체하는 방법
4) 상속성 (Inheritance)
- 이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스가 물려받는 것이다.
- 상속성을 이용하면 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 사용할 수 있다.
- 상속성의 종류
- 단일 상속 : 하나의 상위 클래스로부터 상속받는 것
- 다중 상속 : 여러 개의 상위 클래스로부터 상속받는 것
5) 다형성 (Polymorphism)
- 메시지에 의해 객체(클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해 각 객체(클래스)가 가지고 있는 고유한 방법(특성)으로 응답할 수 있는 능력을 의미한다.
- 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 한다.