프로그래밍/Java

5. [Java] 객체 지향 프로그래밍(OOP)란 무엇인가 - 코딩도치

코딩도치 2019. 11. 18. 19:00
반응형

안녕하세요. 코딩도치 입니다~

 

오늘은 객체 지향 프로그래밍(OOP)에 대해서 알아보려고 합니다!

 

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

 

객체 지향 프로그래밍은 프로그램을 만드는 여러 가지 방법론 중에 하나입니다.

 

어떠한 프로그램을 만드는 데 있어서, 그 프로그램을 구성하는 여러 요소(객체)들을 정의하고 구현합니다.

 

그렇게 만들어진 요소(객체)들의 조합을 통해서 최종적인 프로그램을 만드는 방식입니다.

 

별로 와 닿지 않으시나요? 하나의 예를 들어드리겠습니다.

 

'두 개의 수를 입력받아 두 수의 합을 출력하는 프로그램'을 만든다고 가정해보겠습니다.

 

객체 지향 프로그래밍 방식으로 위 프로그램을 만든다면 방식은 다음과 같을 것입니다.

 

숫자를 입력받는 객체를 정의 > 합을 구하는 처리를 하는 객체를 정의 > 숫자를 출력하는 객체를 정의 > 관계 정의

 

이처럼 어떤 행위를 하는 주체를 정의하는 방식으로 프로그래밍을 하는 방식입니다.

 

그래서 객체 지향이라는 이름이 붙게 된 것입니다.(여기서 객체란, 상태와 행위를 가지는 요소로 정의합니다.)

 

위 프로그램에서 숫자를 입력받는 객체는 숫자를 입력받는 행위와 그 숫자를 상태로 가지는 요소인 것이죠.

 

그러면 절차 지향 프로그래밍에 대해서 알고 계시는 분들은 의문이 듭니다.

 

절차 지향 프로그래밍 방식으로 구현하면 다음과 같습니다.

 

숫자 입력 > 합 구하기 > 출력하기

 

'... 무슨 차이지?'

 

절차 지향에 대해 설명할 때 순차적인 처리가 중요시되는 프로그래밍 방식이라고 설명합니다.

 

그렇다면 객체 지향은 역순으로 처리가 되나요?

 

위 예제를 보시면 아시겠지만 결국 숫자를 입력받고 합을 구하고 출력하는 순서는 똑같습니다.

 

단지 설계 순서에서 차이가 날 뿐입니다.

 

절차 지향은 순서(관계)를 먼저 설계합니다.

 

숫자를 입력받아야 하고 합을 구해야 하며 출력을 해야 해, 그러면 이러이러한 요소들이 필요하겠구나.

 

객체 지향은 요소를 먼저 설계합니다.

 

이 문제를 해결하기 위해서는 이러이러한 요소가 필요하고, 이 요소들의 관계(순서)를 이렇게 하면 되겠구나.

 

이렇게 정의하니 차이가 좀 더 확실히 보이시죠?

 

그렇다면 이런 객체 지향 프로그래밍의 장점은 무엇일까요?

 

1. 자연적인 모델링

 

   객체 지향 프로그래밍은 사람들이 생각하는 방식을 그대로 프로그램에 반영하는 것입니다.

 

   의자를 만들려면 쿠션, 나사, 받침대 등등이 필요하겠죠.

 

   나사는 조여주는 역할을 할 것이고, 쿠션은 푹신한 속성을 가지고 있을 것입니다.

 

   이러한 것들이 잘 조합돼서 의자가 만들어지겠죠.

 

   이처럼 일반적으로 사람들이 생각하는 방식대로 프로그래밍을 하는 것이기 때문에

 

   훨씬 자연스러운 사고방식으로 코딩을 할 수 있는 것입니다.

 

   객체라는 언어가 주는 어려움에서 벗어나세요!

 

2. 코드의 재사용성

 

   왜 코드의 재사용이 용이할까요?

 

   각각의 객체들이 독립적으로 구현되어 있기 때문에, 만약 다른 프로젝트에서 동일한 행위가 필요하다면

 

   기존에 사용하던 객체를 그대로 가져다가 사용하면 되는 것입니다.

 

   똑같은 소스를 두 번 작성할 필요가 없으니 편리하겠죠?

 

3. 유지보수의 용이성

 

   결국 같은 맥락입니다.

 

   객체마다 독립적이기 때문에 문제가 생겼을 때 처음부터 하나하나 순차적으로 알아볼 필요가 없습니다.

 

   또한 기능의 추가, 수정도 용이합니다.

 

   새로운 객체를 추가하거나 수정하는 것이 주변 소스에 미치는 영향이 현저히 적기 때문입니다.

 

4. 생산성 향성

 

   결국 위의 장점들을 종합해 보면 생산성이 매우 향상된다는 것을 알 수 있습니다.

 

이렇게 객체 지향 프로그래밍에 대해서 알아보았습니다.

 

이해가 잘 되셨으면 좋겠네요!

 

감사합니다.

반응형