본문 바로가기
프로그래밍/OOP

객체지향 프로그래밍의 정의와 탄생배경

by Daniel.kwak 2018. 10. 17.

목적:

객체지향 프로그래밍의 정의에 대해 이해한다.

객체지향 프로그래밍의 탄생한 배경에 대해 이해한다.


정의

객체지향 프로그래밍(Object-Oriented Programming , OOP)는 컴퓨터 프로그래밍의 패러다임의 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 '객체'들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 멧지를 주고받고 데이터를 처리할 수 있다.

객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점을 갖고 있다. 그러나 지나친 프로그램의 객체화 경향은 실제 세계의 모습을 그대로 반영하지 못한다는 비판을 받기도 한다.

-위키백과-



프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수 많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식이다. 객체를 데이터의 묶음으로만 착각하기 쉬운데, 그보다는 하나의 '역활'을 수행하는 메소드와 데이터의 묶음으로 봐야햔다. 

객체지향은 여러 모델이 있다. 아래의 대부분 문단에서는 객체지향을 Java 위주로 소개하고 있고 class나 public같은 용어가 사용되고 있지만 반드시 모든 언어가 class를 사용하고 있는것도 아니고 접근 제한자(public,private)를 사용하는 것도 아니다. 가장 대표적인 예로 Javascript는 프로토타입 객체지향을 사용하고 있고 Python의 경우에도 접근제한자가 없다. 객체지향은 특정 언어가 아니라 개념이며 class는 객체이며 struct는 객체가 아닌 데이터의 집합이라는 설명 역시 틀렸고, 특정 언어가 객체지향 언어라는 말도 틀린 표현이다. 

-나무위키-



객체지향 프로그래밍은 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것이다. 이 객체들을 마치 레고 블럭처럼 조립해서 하나의 프로그램을 만드는 것이 객체지향 프로그래밍이라 할 수 있다. 다시 말해서 객체지향 프로그래밍은 객체를 만드는ㄱ ㅓㅅ이다. 따라서 객체지향 프로그래밍의 시작은 객체란 무엇인가를 이해하는 것이다. 

*객체지향 프로그래밍을 학습하는데에 장애중 하나는 번역이다. Object를 번역한 객체는 현실에서는 거의 쓰지 않는 말이고, 철학적인 느낌이다. 쉽게 생각하자. 객체는 데이터(변수)와 행위(메소드)를 그륩핑한 것이다.

-생활코딩-




이상 객체지향을 가장 잘 설명한 글을 발췌해봤다.

종합하여 OOP란 무엇인가? 라고 물어봤을때, 컴퓨터 프로그래밍의 패러다임 중 하나로, 상태와 행위를 가진 객체를 만들고, 그 객체들 간 상호작용을 통해 프로그램을 만들어 나가는 방식이다. 

라고 할 수 있겠다. 



탄생 배경

초기 프로그래밍은 절차적 프로그래밍이었다. 명시된 입력을 받아서 명시된 순서로 처리한 다음, 그 결과는 내는 방식이었다. 프로그램을 어떤 논리로 어떤 순서대로 써 내려가는것이 주요한 쟁점이었다. 그러나 간단한 알고리즘이면 몰라도, 조금만 복잡해지면 순서도로 나타내지는게 불가능한 스파게티코드를 양산하게 된다. 시간이 흐를수록 복잡한 프로그램이 요구되었는데, 기존 절차적 프로그래밍으로는 도저히 작성할 수가 없었던것. 


이 때 구조적 프로그래밍이 탄생하게 된다. 프로그램을 함수단위로 나누고 함수끼리 호출을 하는 방식이다. 프로그램이라는 큰 문제를 해결하기 위해 작은 함수로 쪼개는 방식이기 때문에 탑-다운(하향식) 방식이라고도 불린다.


그러나 구조적 프로그래밍도 데이터 자체를 구조화 하지는 못했다. 전역 네임 스페이스는 점점 포화상태가 되어가고, 특히나 GUI프로그램에서는 실행 콘텍스트를 저장할 방법이 없었다. 


이를 극복하기 위한 대안으로 나온것이 객체지향 프로그래밍이다. 큰 문제를 쪼개는 것이 아니라, 먼저 작은 문제들을 해결할 수있는 객체들을 만든 뒤, 이 객체들을 조합해서 큰 문제를 해결하는 상향식(Bottom-up) 해결법을 도입한 것이다. 객체를 독립성과 신뢰성이 보장되게 만들어 놓으면 재사용성도 높아지므로 개발기간과 비용 또한 줄어들게 되었다.


디자인 패턴

객체지향 프로그래밍 또한 점점 복잡해지면서 '디자인 패턴'이 대두되었다. 프로그래밍 형식을 정하는 약속으로, 협업을 전제로 한 환경에서 특히 강조된다.




Reference

https://www.slideshare.net/plusjune/ss-46109239

https://namu.wiki/w/%EA%B0%9D%EC%B2%B4%20%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

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


'프로그래밍 > OOP' 카테고리의 다른 글

객체지향 프로그래밍의 특징  (0) 2018.10.19
객체지향 프로그래밍의 설계원칙  (0) 2018.10.17