1. 객체지향 프로그래밍 (OOP)
ㅇ 객체들 간에 상호작용을 기반으로 한 프로그램 개발 방법론
- 프로그램을, `절차 및 데이터`로 함께 묶은 객체들의 집합으로 구성
- 이때, 각 객체는 동적으로 변할 수 있음
ㅇ 객체지향 프로그래밍을 지원하는 언어 例
- C++, C#, Java, Objective-C, Ada95, SmallTalk 등
2. 절차식 프로그래밍, 객체지향 프로그래밍 비교 ☞ 프로그래밍 패러다임 참조
ㅇ 객체지향 프로그래밍과 절차식 프로그래밍은, 서로 대비가 됨
ㅇ 절차식 프로그래밍은,
- 함수(또는 프로시져)가 중심이되고, 데이터는 보조 기능을 함
. 이때의 프로그래밍은, 함수 따로 데이터 따로 분리된 형태로 다루어야 함
ㅇ 객체지향 프로그래밍은,
- 함수가 아닌 객체가 중심이 되어, 절차와 데이터를 함께 묶음
. 행위/기능/함수 보다는 객체 중심
. 논리 보다는 데이터를 지향 함
.. 공통의 자료구조를 함께 사용하는,
.. 서로 밀접하게 관련된 여러 함수(메소드)들로 엮어짐
* 특히, 규모가 큰 소프트웨어를 개발할 때 효율적임
3. 객체지향 프로그래밍의 주요 특징
ㅇ 추상화 (Abstraction) : 모델링의 기초가 됨
- 복잡한 실행 절차나 데이터를 하나로 묶어 단순화/추상화시키는 것
. 데이터 추상화 (Data Abstraction) : 캡슐화, 정보은폐 등
. 추상 클래스 (Abstract Class) 사용 등
ㅇ 캡슐화 (Encapsulation) : 정보 은닉
- 복잡함을 감추고, 상호 영향을 작게하는 것
. 데이터 및 메소드를 논리적으로 하나로 묶어놓는 것
ㅇ 상속성 (Inheritance) : 재사용/확장 능력 제고
- 코드의 재사용(reuse) 및 효과적인 확장(extend) 능력
ㅇ 다형태성 (Polymorphism) : 사용 편의성이 좋아짐
- 문맥에 따라 다른 형태나 동작을 할 수 있는 능력
ㅇ 동적 바인딩 (Dynamic Binding)
- 실행 중간에도 연결된 속성 변경이 가능
4. 객체지향 프로그래밍의 주요 구성 단위들
ㅇ 클래스 (Class)
- 비슷한 특성을 가진 객체들의 모델링 (그룹화시키는 틀, 캡슐화한 것)
ㅇ 객체 (Object)
- 속성을 가지며 특정한 작업을 수행할 수 있도록 설계된 것
ㅇ 인스턴스 (Instance)
- 만일 객체(Object)가 값을 갖을 경우 보통 인스턴스(Instance)라고 함
ㅇ 속성 (Attribute)
- 객체와 관련된 특성이나 변수 같은 것
ㅇ 메소드 (Method)
- 객체에 대해 수행할 수 있는 작업/조작 (객체 외부와의 상호작용을 메소드를 통해 수행)
ㅇ 연산 (Operation)
- 객체 자신을 바꾸거나, 외부적으로 바꿈의 효과가 나타나는 것