객체지향 프로그래밍 ( Object - Oriented Programming, OOP ) 는 컴퓨터 프로그래밍의 패러다임의 하나이다.

객체지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위,

즉 "객체" 들의 모임으로 파악하고자 한 것이다. 각각의 객체는 메세지를 주고받고, 데이터를 처리할 수 있다.

객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에

많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인

코드 분석을 가능하게 하는 장점을 갖고 있다. 그러나 지나친 프로그램의 객체화 경향은 실제 세계의 모습을

그대로 반영하지 못한다는 비판을 받기도 한다.


기본구성요소

  • 클래스 (Class) - 같은 종류 (또는 문제 해결을 위한) 의 집단에 속하는 속성(attribute) 과
    행위(behavior)를 정의한 것으로 객체지향 프로그램의
    기본적인 사용자 정의 데이터형 (user define data type) 이라 할 수 있다.
    클래스는 프로그래머가 아니지만 해결해야 할 문제가 속하는 영역에 종사하는 사람이라면 사용할 수
    있고, 다른 클래스 또는 외부 요소와 독립적으로 디자인 하여야 한다.

  • 객체 (Object) - 클래스의 인스턴스 (실제로 메모리상에 할당된 것) 이다.
    객체는 자신 고유의 속성(attribute) 을 가지며 클래스에서 정의한 행위(behavior)를 수행할 수 있다.
    객체의 행위는 클래스에 정의된 행위를 공유함으로서 메모리를 경제적으로 사용한다.

  • 메소드 (Method), 메시지 (Message) - 클래스로부터 생성된 객체를 사용하는 방법으로서 객체에
    명령을 내리는 메시지라 할 수 있다. 메소드는 한 객체의 서브루틴(subroutine) 형태로 객체의 속성을
    조작하는데 사용된다. 또 객체 간의 통신은 메시지를 통해 이루어진다.

특징

객체 지향 프로그래밍의 특징은 기본적으로 자료 추상화, 상속, 다형 개념, 동적 바인딩 등이 있으며 추가적으로

다중 상속 등의 특징이 존재한다. 객체 지향 프로그래밍은 자료 추상화를 기초로 하여 상속, 다형 개념,

동적 바인딩이 시스템의 복잡성을 제어하기 위해 서로 맞물려 기능하는 것이다.


자료 추상화

자료 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로서 프로그램을 간단히 만드는 것이다.

자료 추상화를 통해 정의된 자료형을 추상 자료형이라고 한다. 추상 자료형은 자료형의 자료 표현과 자료형의

연산을 캡슐화 한것으로 접근 제어를 통해서 자료형의 정보를 은닉할 수 있다. 객체지향 프로그래밍에서 일반적

으로 추상 자료형을 클래스, 추상 자료형의 인스턴스를 객체, 추상 자료형에서 정의된 연산을 메소드, 메소드의

호출을 메시지라고 한다.

  • 기본적 추상화 (basic abstraction)
    프로그래밍 언어에서는 기본적 자료 추상화는 컴퓨터 내부의 자료 표현을 추상화 한다.
    예를 들어, 기억 장치의 위치는 변수로 추상화되고, 자료의 값은 2진법 표기가 아닌 정수, 실수와 같은
    자료형으로 추상화 된다. 변수는 선언에 의하여 이름과 자료형이 주어지는데, 예를 들어서 C에서
    int x; float y;
    와 같이 선언하여 x는 정수형, y는 실수형의 변수 이름을 부여 받는다.

  • 자료형 추상화
    자료에 대한 구조적 추상화란 관련된 자료값의 집합을 추상화한 방법인데, 배열과 레코드가 대표적인 예다.
    이와 같이 구조적 추상화된 자료형들을 구조 자료형 (structured type) 또는 구조형이라고 부르기도 한다.
    구조형은 기계 내부표현이 아니라 프로그래머가 필요에 따라 생성한 새로운 자료형으로 볼 수 있다.
    따라서 많은 언어에서는 형 선언문(type delcaration)을 가지고 이러한 자료형에 새로운 형 이름을 부여할
    수 있다. 다음은 파스칼(Pascal)에서 형 이름을 부여한 형 선언문이다.
    type rarray = array[1, , 10] of real;

  • 단위 추상화 (unit abstraction)
    큰 프로그램에서는 한 자료형의 생성과 사용에 대한 정보를 한 장소에 모아두고, 자료의 세부 사항에 대한
    접근을 제한할 필요가 있다. 즉 이렇게 함으로서 자료형의 구조에 대한 변경이 프로그램 전체에 영향을
    주지 않을 뿐만 아니라 프로그래머가 항상 자료 구조의 세부 사항을 염두에 두지 않아도 된다.
    이러한 체계를 자료 캡술화 혹은 추상화 자료형이라고 하며, 단위 자료 추상화의 대표적인 예이다.
    전형적인 예로서는 Modula-2 의 module, Ada 의 package, Java의 class 등을 들 수 있다.


상속

상속은 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능이다. 상속을 받는 클래스를

부모클래스, 파생 클래스, 하위 클래스, 자식 클래스라고 하며 새로운 클래스가 상속한 기존의 클래스를

기반 클래스, 상위 클래스, 부모클래스 라고도 한다. 상속을 통해서 기존의 클래스를 상속받은 하위 클래스를

이용해 프로그램의 요구에 맞추어 클래스를 수정할 수 있고 클래스 간의 종속 관계를 형성함으로서 객체를

조직화 시킬 수 있다.


다중 상속

다중 상속은 클래스가 2개 이상의 클래스로부터 상속받을 수 있게 하는 기능이다. 클래스들의 기능이 동시에

필요할 때 용이하나 클래스의 상속 관계에 혼란을 줄 수 있고 (예: 다이아몬드 상속) 프로그래밍 언어에 따라

사용 가능 유무가 다르므로 주의해서 사용해야 한다.


다형 개념

다형 개념이란 어떤 한 요소에 여러 개념을 넣어 놓는 것으로 일반적으로 오버라이딩(같은 이름의 메소드가

여러 클래스에서 다른 기능을 하는 것)이나 오버로딩(같은 이름의 메소드가 인자의 갯수나 자료형에 따라서

다른 기능을 하는것) 을 의미한다. 다형 개념을 통해서 프로그램 안의 객체간의 관계를 조직적으로 나타낼 수

있다.


동적 바인딩

동적 바인딩은 실행 시간 중에 일어나거나 실행 과정에서 변경될 수 있는 바인딩으로 실행 시간 전에 일어나

변화하지 않는 정적 바인딩과 대비되는 개념이다. 동적 바인딩은 프로그램의 한 개체나 기호를 실행과정에

여러 속성이나 연산에 바인딩 시킴으로서 다형 개념을 실현시킨다.

바인딩 (메소드는 최종 오버라이딩 된것으로 호출된다.)



+ Recent posts