본문 바로가기
프로그래밍 패러다임/객체 지향 프로그래밍

OOP.1.객체 지향이란 무엇이며 왜 사용하는가?

by 시니성 2023. 7. 4.

객체지향은 1970년대 앨런 케이로부터 시작되어...

얼른 주변 사람 10명에게 이 글을 보여주지 않으면 불행이 찾아올 것 같은 행운의 편지 스타일의 서론은 접어두고,

좀 더 본질적인 질문을 던져보고 싶습니다.

 

대체 프로그래밍은 무엇이며 우리는 왜 프로그래밍을 하는 것일까요?

 

답은 간단합니다.

사람이 할 일을 컴퓨터에게 시키고 싶은거죠.

대규모 언어모델이 발전하면서 인간의 언어로 컴퓨터와 소통하고 컴퓨터가 알아서 모든걸 해줄 것 같은 시대가 다가오고 있는 느낌이지만, 아쉽게도(저 같은 개발자 지망생에게는 다행이게도) 여전히 컴퓨터는 인간이 시킨 일 만 수행할 줄 아는 기계입니다.

또, 컴퓨터에게 일을 시키기 위해선 여전히 컴퓨터가 이해할 수 있는 언어로 대화를 시도해야 하죠.

기계어를 할 줄 아는 인간은 없기 때문에 우리는 Java, Python, Dart와 같은 프로그래밍 언어를 사용합니다.

절차 지향 프로그래밍의 좋은 예(?)

예전에는 컴퓨터에게 일을 시킬때 컴퓨터가 특정 값을 입력받으면 절차적으로 코드를 수행하고 결과 값을 도출하는 식으로 단순히 연산 절차만 잘 지켜서 코딩하면 된다는 생각이 지배적이었어요.

이를 절차 지향 프로그래밍 이라고 합니다.

 

지금 객체 지향 프로그래밍이 많은 선택을 받는 다는 것은 기존의 문제를 해결했다는 것이겠죠?

앞서 말씀 드린 것처럼 결국 프로그래밍은 현실세계의 무언가를 편의를 위해 시스템으로 옮기는 것 입니다.

그런데 현실에 있는 것들이 어디 모두 절차적으로 표현할 수 있을만큼 간단하던가요?

 

때문에 기존의 절차 지향 방식에서는 시스템의 규모가 커질 경우 필연적으로 스파게티 코드가 되어버리므로, 코드의 가독성이 굉장히 떨어지고 유지 보수가 거의 불가능 하게 된다는 문제점이 있었습니다.

또, 어느 코드의 어느 부분에서 데이터를 변경해서 문제가 생겼는지 디버깅을 위한 오류 추적도 어렵게 만들었죠.

 

이러한 문제점 극복을 위해 데이터와, 데이터를 조작하는 메소드를 한 데 묶어 클래스로 규정하고, 하나의 거대한 시스템을 여러개의 클래스로 잘게 쪼갠 후, 이 클래스들끼리 서로 호출하고 소통하도록 프로그래밍 하는 방법론이 나오게 되었고, 이 방법론이 바로 '객체 지향 프로그래밍' 입니다.

객체 지향을 이해하려면 유미의 세포들을 읽어야 한다(?) - 출처 : youtube '심플에디'

객체 지향이라는 개념을 처음 발의한 앨런 케이는 유기체의 세포들 간의 관계에서 아이디어를 떠올렸다고 해요.

때문에 객체 지향에서는 클래스를 잘 만드는 것(추상화+캡슐화) 클래스 간의 관계를 설정하는 것이 무척 중요한데요, 다음 글에서는 이러한 객체 지향의 특징 4가지와 이를 위해 객체 지향 프로그래밍을 지원하는 언어들에서 지원하는 문법적인 요소들을 살펴보겠습니다.

 

글 마무리는 제가 새로 배워야 하는 기술이나 개념을 접할 때 늘 생각하는 두 가지를 쓰는 것으로 글을 마무리 하겠습니다.

 

1. 세상의 모든 기술은 우리를 편하게 해주려고 나온 기술이다.

2. 돈이 되지 않는 기술은 시장의 논리에 따라 도태된다.

 

즉, 내가 기술을 배우는 과정이 조금 힘들 수는 있겠지만 결국 더 편하게 개발 하기 위함이고, 나한테까지 도달한 기술은 모두 시장에서 검증된 생산성을 높이는 기술이라는 의미입니다.

생산성이 높은 기술을 습득해서 생산성이 높은 사람이 되면 그만큼 제가 받는 대우도 좋아지겠죠!

그럼 다음 글에서 뵙겠습니다. 안녀엉~