본문 바로가기

Road to Web Developer/알.쓸.개.잡

OOP(Object-Oriented Programming)이란?

1. OOP?

객체지향 프로그래밍(Object-Oriented Programming)의 줄임말로, 프로그램을 어떻게 설계해야 하는지에 대한 일종의 개념이자 방법론이다. 프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식이다.


2. OOP의 특성

① 추상화(Abstraction)

공통의 속성이나 기능을 묶어 이름을 붙이는 것으로, 사물들의 공통된 특징을 파악해 인식의 대상으로 삼는 행위를 말한다. 각 개체의 구체적인 개념보다 추상적인 개념에 의존해야 설계를 유연하게 변경할 수 있다.


강아지, 고양이의 공통된 특징은 '동물'이라는 집합으로 다룬다. '강아지나 고양이 고유의 울음소리(구체적인 개념)'이 아니라 '울음소리(추상적인 개념)'로 설계해야 한다.


만약 강아지나 고양이 고유의 울음소리로 설계한다면, 새로운 동물이 추가 될 때마다 그 동물 고유의 울음소리를 또 추가해줘야 한다. 그러나 울음소리로 설계 한다면 바꿀 필요가 없다. 아래에서 나올 '다형성'의 원리에 따라 각 구체적인 클래스에서 고유 울음소리를 지정해줄 수 있기 때문이다.


② 다형성(Polymorphism)

서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 것으로, 동물의 울음소리라는 메시지를 받으면 각기 다른 동물의 울음소리를 나타낼 수 있게 한다.


즉 다형성이 없다면 강아지의 울음소리, 고양이의 울음소리로 하나하나 지정해줘야 한다. 다형성은 코드를 간결하게 할 뿐 아니라 변화에도 유연하게 대처할 수 있게 한다.


③ 캡슐화(Encapsulation)

데이터 구조와 데이터를 다루는 방법들을 결합시키는 것으로, 객체가 맡은 역할을 수행하기 위한 하나의 목적을 묶는 것이다.


자동차를 예를 들면 이해하기 쉽다. 데이터 구조는 핸들과 브레이크, 가속 페달 등이 되고 데이터를 다루는 방법은 운전하는 방법으로 생각하면 된다. 버스와 화물차, 승용차가 운전하는 방법이 다른 것처럼 말이다.


④ 상속성(Inheritance)

상위 개념의 특징을 하위 개념이 물려받는 것으로, 상속이란 개념이 없으면 객체지향이나 절차지향이나 차이가 없다. 같은 기능을 또 구현 할 필요가 없고 코드의 재사용성을 증대시킬 수 있다.


동물이라는 상위 개념에서 강아지와 고양이라는 하위 개념이 공통적인 특징을 물려받게 된다. 하지만 후각이나 청각 같은 디테일한 요소들은 다를 수 있다.


⑤ 은닉화(Hiding)

외부에서 정보를 쉽게 바꿀 수 없도록 하는 것으로, 잘못된 데이터 입력을 방지하고 개발자로부터 필요없는 정보를 숨겨준다.


자동차를 주행하려면 시동을 걸고 엑셀을 밟는다는 것만 알면 되는데, 내부 점화 플러그나 실린더가 어떻게 움직이고, 연료가 어떻게 분사되는지 알아야 할 필요까진 없다. 은닉화는 그런 정보들을 숨겨준다고 생각하면 된다.


객체지향 프로그래밍이란 캡슐화, 다형성, 상속을 이용하여 코드 재사용을 증가시키고,

유지보수를 감소시키는 장점을 얻기 위해서 객체들을 연결 시켜 프로그래밍 하는 것이다.