Object oriented programming
프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식이다.
객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임의 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.
객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점을 갖고 있다. 그러나 지나친 프로그램의 객체화 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 한다.
가장 중요한 세 가지 속성은 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism)이 있다.
또한 객체지향 설계 5원칙(SOLID)을 숙지해야 한다.
OOP의 특징
객체 지향 프로그래밍의 특징은 기본적으로 자료 추상화, 상속, 다형 개념, 동적 바인딩 등이 있으며 추가적으로 다중 상속 등의 특징이 존재한다. 객체 지향 프로그래밍은 자료 추상화를 기초로 하여 상속, 다형 개념, 동적 바인딩이 시스템의 복잡성을 제어하기 위해 서로 맞물려 기능하는 것이다.
학자에 따라 이 특징들 외에 몇 가지를 더 추가하기도 하며 각 특징의 범주가 조금씩 달라지는 경우도 있다. 심지어 객체 지향에 대한 정확한 정의와 범위마저도 완벽하게 합의되어 있지 않은 상태이다보니 각 특징에 대한 정의도 조금씩 견해가 다를 수 있다.
- 캡슐화 (Encapsulation).
- 표현하고자 하는 자료(Data)와 동작(Function)을 하나의 단위로 묶는 것이며 이렇게 묶어 놓은 것을 객체(Object)1라고 한다. 대상의 특징을 나타내는 데이터와 이 데이터를 관리하는 함수가 항상 하나의 묶음으로 사용되므로 객체는 스스로 독립적이며 프로그램의 부품으로 활용될 수 있다. 그래서 객체를 소프트웨어 IC라고 부르기도 한다.
- 추상화 (Abstraction).
- 자료 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것이다. 자료 추상화를 통해 정의된 자료형을 추상 자료형이라고 한다. 추상 자료형은 자료형의 자료 표현과 자료형의 연산을 캡슐화한 것으로 접근 제어를 통해서 자료형의 정보를 은닉할 수 있다. 객체 지향 프로그래밍에서 일반적으로 추상 자료형을 클래스, 추상 자료형의 인스턴스를 객체, 추상 자료형에서 정의된 연산을 메소드, 메소드의 호출을 메시지라고 한다.
- 상속성 (Inheritance).
- 상속은 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능이다. 상속을 받는 새로운 클래스를 부클래스, 파생 클래스, 하위 클래스, 자식 클래스라고 하며 새로운 클래스가 상속한 기존의 클래스를 기반 클래스, 상위 클래스, 부모 클래스라고 한다. 상속을 통해서 기존의 클래스를 상속받은 하위 클래스를 이용해 프로그램의 요구에 맞추어 클래스를 수정할 수 있고 클래스 간의 종속 관계를 형성함으로써 객체를 조직화시킬 수 있다.
- 다형성 (Polymorphism).
- 다형성이란 어떤 한 요소에 여러 개념을 넣어 놓는 것으로 일반적으로 오버라이딩(같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것)이나 오버로딩(같은 이름의 메소드가 인자의 갯수나 자료형에 따라서 다른 기능을 하는것)을 의미한다. 다형 개념을 통해서 프로그램 안의 객체 간의 관계를 조직적으로 나타낼 수 있다.
- (정보)은닉성 (Information Hiding).
- 객체는 자신의 상태를 기억하기 위한 속성과 속성을 관리하는 동작을 정의한다. 이 중 외부에서 사용하는 기능만 공개하고 나머지는 숨길 수 있는데 이를 정보 은폐라고 한다. 외부에서 객체의 상태를 마음대로 바꾸거나 허가되지 않은 동작을 요청하지 못하도록 함으로써 스스로의 안전성을 확보하는 수단이며 정보 은폐에 의해 객체는 더욱 견고하게 캡슐화된다.
간략한 비유
특징 | 간단한 설명 | C++ 비유 |
캡슐화(Encapsulation) | 묶는다 | class |
추상화 2 | 표현한다 | class |
상속(Inheritance) | 재사용한다 | class ClassA : public ClassB |
다형성(Polymorphism) | 상황에 따라 달라진다 | overloading, overriding |
은닉성 | 숨긴다 | private |
(빠른 이해를 위한 간략한 비유일 뿐이므로 정확한 정의는 아니며 핵심적인 내용만 간추려 정리한 것이다. 특히 다형성은 한 단어로 설명하기 어려운 개념이다)
See also
- SOLID - 객체지향 설계 5원칙
- Programming Paradigms
Favorite site
- Wikipedia (en) 프로그래밍 패러다임에 대한 설명
- Wikipedia (en) 객체지향 프로그래밍에 대한 설명
- WinAPI OOP의 특징
- 좋은 객체의 7가지 덕목 3
- [추천] 객체지향 시스템과 패러다임 그리고 철학 :: BlaCk_Log