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

 

 

객체 지향 프로그래밍

 

컴퓨터 프로그래밍 초기, 프로그램은 명령어의 목록이라는 인식이 자리 잡고 있었다.

프로그램의 기능을 어떤 절차로 처리할 것인가에 초점을 둔 절차 지향 프로그래밍 기법을 사용했다.

 

그러나, 객체 지향 프로그래밍의 등장으로 많은 변화를 불러일으켰다.

 

객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란 프로그램을 명령어의 목록이 아닌, 여러 개의 독립된 단위, 즉 객체들의 집합체로 바라보자는 관점을 중심으로 하는 프로그래밍의 기법이다.

 

여기서 객체(Object)란 사람이 말로서 표현 가능한 모든 것을 객체라고 할 수 있다.

 

예를 들어 컴퓨터 프로그램으로 나라는 사람을 구현할 때 사람이 객체가 되고, 그 사람을 구성하는 모든 것(팔, 다리, 머리 등)들 또한 객체가 될 수 있다.

 

즉, 객체 지향 프로그래밍이란 프로그램을 어떤 객체가 어떤 일을 할 것인가에 초점을 두어 프로그래밍을 하는 기법이다.

 

객체라는 개념을 도입함으로써 프로그램을 유연하고 변경이 용이하게 만들기 때문에 더 배우기 쉽고 소프트웨어의 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 한다.

 

 

 

 

 

객체 지향 프로그래밍에서는 세 가지의 기본 구성 요소가 있다.

 

객체 지향 프로그래밍의 기본 구성 요소

 

클래스(Class)

같은 종류의 집단에 속하는 속성(attribute)과 행위(behavior)를 정의한 것으로, 객체 지향 프로그램의 기본적인 사용자 정의 데이터형이라고 할 수 있다.

 

객체(Object)

객체는 프로그래밍 관점에서 다음과 같다.

클래스의 인스턴스(실제로 메모리상에 할당된 것)로, 객체는 자신의 고유 속성(attribute)을 가지며, 클래스에서 정의한 행위를 수행할 수 있다.

 

메서드(Method)

클래스로부터 생성된 객체를 사용하는 방법으로서, 객체에 명령을 내리는 메시지라고 할 수 있다.

쉽게 말해서, 클래스에서 정의된 행위(behavior)를 메서드라고 생각하면 된다.

 

예를 들어 '홍길동', '임꺽정' 은 '사람'이다.

'사람'이라는 클래스의 인스턴스로 '홍길동', '임꺽정'이라는 객체가 생성된 것이다.

'사람'은 배가 고플 때 특정 행위를 하며, 이 행위는 '먹는다'가 될 수 있다.

'홍길동', '임꺽정'은 배가 고프면 '먹는다' 메서드를 수행할 수 있다.

 

 

 

 

 

이러한 객체 지향 프로그래밍은 여러 특징을 가지게 된다.

 

객체 지향 프로그래밍의 특징

 

추상화(Abstraction)

객체들의 공통적인 속성과 행위를 추출하는 것이다.

'모든 사람은 이름이 있고, 배가 고프면 밥을 먹는다.'

'이름'이 속성이 되고, '먹는다'는 행위가 되며, 이러한 공통적인 부분을 추출하는 것이 추상화이다.

 

캡슐화(Encapsulation)

추상화에서 추출한 속성과 행위를 하나로 묶고, 실제 구현되는 내용을 외부로부터 감추어 은닉한다.

쉽게 말해서, 객체의 속성과 행위를 불투명한 캡슐로 감싸는 것으로 생각하면 된다.

객체가 불투명한 캡슐로 감싸져있기 때문에 독립적으로 역할을 수행할 수 있고, 내용을 볼 수 없어 외부와 상호 작용할 때 메서드를 이용하게 된다.

 

상속(Inheritance)

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

이름 그대로 부모가 자식에게 재산을 물려주는 것과 같은 맥락이다.

그래서 상속한 클래스를 부모 클래스, 상속을 받은 새로운 클래스를 자식 클래스라고 부르기도 한다.

 

다형성(Polymorphism)

하나의 요소에 여러 개념을 넣어놓은 것으로, 오버라이딩 또는 오버로딩을 의미한다.

쉽게 말해, 하나의 메서드가 상황에 따라 여러 행위를 하는 것이라고 할 수 있다.

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

 

동적 바인딩(Dynamic Binding)

프로그램 실행 시간 중에 일어나거나 실행 과정에서 변경될 수 있는 바인딩으로, 다형성의 개념을 실현한다.

여기서 바인딩이란 프로그램에 사용된 구성 요소의 실제 값 또는 프로퍼티를 결정짓는 행위를 말한다.

프로그램 시작 전 컴파일 시 수행하는 바인딩을 정적 바인딩, 시작 도중에 수행하는 바인딩을 동적 바인딩이라 한다.

정적 바인딩이라면 부모 클래스의 메서드를 자식 클래스가 오버라이딩하여도 이미 컴파일 시에 부모 클래스의 메서드를 호출할 수 있도록 바인딩하였기 때문에 부모 클래스의 메서드만 호출하게 된다.

그러나 동적 바인딩을 사용하게 되면 메서드를 호출할 때 바인딩된 메서드가 없어서 실시간으로 호출할 메서드를 식별하게 된다.

이렇게 동적 바인딩으로 다형성의 개념을 실현할 수 있다.

 

 

 

 

 

이러한 객체 지향 프로그래밍을 사용하는 언어로는 C++, C#, 파이썬, 자바 등이 있다.

 

 

 


"객체 지향 프로그래밍." Wikipedia. 2022. 01. 24. 수정, 2022. 03. 04. 접속, 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

+ Recent posts