우리라이프

객체지향 프로그래밍 - OOP(Object-Oriented Programming) 본문

IT/개발 지식

객체지향 프로그래밍 - OOP(Object-Oriented Programming)

적당히벌고아주잘살자 2018. 3. 11. 19:31
반응형


1. 절차 지향

절차지향(Procedural Oriented) : 함수나 프로시저(procedure)로 프로그램을 구성하는 기법으로 데이터를 중심으로하여 구성된다. 다수의 프로시저들이 데이터를 공유하는 방식으로 만들어진다. 

문제점 

-> 데이터 타입이나 의미를 변경해야 할 때, 함께 수정해야하는 프로시저가 증가한다.

-> 같은 데이터를 프로시저들이 서로 다른 의미로 사용하는 경우가 발생한다.


2. 객체 지향

객체 지향(Object Oriented) : 데이터 및 데이터와 관련된 프로시저를 객체라고 불리는 단위로 묶어, 객체는 프로시저(오퍼레이션, 메서드, 함수)를 실행하는데 필요한만큼의 데이터를 가지며, 객체들이 모여 프로그램을 구성한다.

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

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

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


3. 객체 지향 특징

객체 지향의 장점은 한곳의 구현 변경이 다른 곳에 변경을 가하지 않도록 해준다는데 있다.

객체 지향 프로그래밍의 특징은 기본적으로 자료추상화, 상속, 다형개념, 동적바인딩 등이 있으며 추가적으로 다중상속 등의 특징이 존재한다. 객체 지향 프로그래밍은 자료 추상화를 기초로 하여 상속, 다형 개념, 동적 바인딩이 시스템의 복잡성을 제어하기 위해 서로 맞물려 기능하는 것이다.

자료 추상화

자료 추상화는 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것이다. 사용자 정의 자료형으로 예를 들면, 구조체 및 클래스로 구현할 수 있다. 

자료 추상화를 통해 정의된 자료형을 추상 자료형이라고 한다. 추상자료형은 자료형의 자료 표현과 자료형의 연산을 캡슐화  것으로 접근 제어를 통해서 자료형의 정보를 은닉할 수 있다. 

객체 지향 프로그래밍에서 일반적으로 추상 자료형을 클래스, 추상 자료형의 인스턴스를 객체, 추상 자료형에서 정의된 연산을 메소드(함수), 메소드의 호출을 생성자라고 한다.

상속

상속은 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능이다. Android를 프로그래밍 할 때, extends 키워드를 사용하여 상속받는 프로그래밍을 할 수 있다. C++에서는 클래스명 옆에 : 클래스명을 써서 상속받을 수 있다. C++에서는 가상함수를 사용해야 실제 객체의 타입에 정의된 함수를 실행하게 된다.

상속을 받는 새로운 클래스를 부클래스, 파생클래스, 하위클래스, 자식클래스 고 하며 새로운 클래스가 상속하는 기존의 클래스를 기반클래스, 상위클래스, 부모클래스 라고 한다. 상속을 통해서 기존의 클래스를 상속받은 하위 클래스를 이용해 프로그램의 요구에 맞추어 클래스를 수정할 수 있고 클래스 간의 종속 관계를 형성함으로써 객체를 조직화할 수 있다.

다중 상속

다중 상속은 클래스가 2개 이상의 클래스로부터 상속받을 수 있게 하는 기능이다. 클래스들의 기능이 동시에 필요할 때 용이하나 클래스의 상속 관계에 혼란을 줄 수 있고 프로그래밍 언어에 따라 사용 가능 유무가 다르므로 주의해서 사용해야 한다. JAVA는 지원하지 않는다.

다형성 개념

다형성 개념이란 어떤 한 요소에 여러 개념을 넣어 놓는 것으로 일반적으로 오버라이딩(같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것)이나 오버로드(같은 이름의 메소드가 인자의 갯수나 자료형에 따라서 다른 기능을 하는 것)을 의미한다. 여기서 여러 개념이란 객체의 타입을 의미하는 것입니다.

Android를 개발할 때 오버라이딩은 @Override 키워드를 붙여 프로그래밍 하고, 오버로드는 하나의 클래스를 생성할 때, 같은 이름으로 매개변수만 달리하여 만든 것과 같은 기능인데 매개변수만 다르게 하여 만든 함수를 기억할 것이다.

다형 개념을 통해서 프로그램 안의 객체 간의 관계를 조직적으로 나타낼 수 있다.

동적 바인딩

동적 바인딩은 실행 시간 중에 일어나거나 실행 과정에서 변경될 수 있는 바인딩으로 컴파일 시간에 완료되어 변화하지 않는 정적바인딩과 대비되는 개념이다. 동적 바인딩은 프로그램의 한 개체나 기호를 실행 과정에 여러 속성이나 연산에 바인딩함으로써 다형 개념을 실현한다.

라이브러리를 링크할 때도 정적링크 라이브러리인 Static Library와 동적링크 라이브러리인 DLL이 있지 않은가!


4. 상속을 통한 재사용의 단점

- 상위클래스 변경의 어려움 

- 클래스의 불필요한 증가 : 유사한 기능을 확장하는 과정에서 발생

- 상속의 오용 : 상속 자체를 잘못사용하는 것


5. 조립을 이용한 재사용

객체 조립(Composition) : 여러 객체를 묶어서 더 복잡한 기능을 제공하는 객체를 만들어내는 것이다.

객체조립의 단점은 상대적으로 런타임 구조가 복잡해 지는 것과 구현하기 어렵다는 것이 있다.

 

출처 

위키 백과 : https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D#%EA%B8%B0%EB%B3%B8_%EA%B5%AC%EC%84%B1_%EC%9A%94%EC%86%8C


반응형
Comments