Javascript

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

Dv ys 2021. 1. 14. 15:16

OOP는 Object Oriented Programming의 줄임말이다.

 

개발하는 많은 사람들이  매일 말하는 OOP가 무엇일까?

 

OOP라는 말을 듣고 그게 무엇인지도 모르는, 나와 비슷한 작디작아 아직 보이지도 않는 다른 개발(공부) 자 들은 허접한 이  글을 보고라도 나와 같은 이런 상황을 겪지 않기를 간절히 바란다.

(쪽팔린건 나혼자만 할게....형들은 들어가있어...;ㅜ)

 

 

OOP, 즉 객체 지향 프로그래밍과 다른 개념으로는 Procedural Programming = 절차지향 프로그래밍이 있다.

 

객체 지향의 반대가 절차지향인 것은 아니다. 반대로 절차지향의 반대가 객체지향인것 또한 아니다. 실행방식의 차이일 뿐이다.

 

절차지향 프로그래밍은 실행순서, 절차를 중요시하고 프로그램의 실행, 알고리즘이 유기적으로 연결되게 하는 방식이다.

객체지향 프로그래밍은 객체와 속성들이 중요시되는 방식이다.

 

과거에는 절차지향적으로 프로그램들이 만들어졌었지만 점점 기술이 발전하고 고도화됨에 따라 프로그램이 계속해서 복잡해지고 가독성, 생산성 면에서 많은 단점들이 생겼다. 이를 보완하는 방법으로 객체와 속성을 기반으로 모듈화를 하여 프로그램을 하는 객체지향 프로그래밍이 생긴것이다.

 

결국 절차지향과 객체지향은 따로 떨어져 있는 것이 아니라, 절차지향을 베이스로 한 상태에서 유지보수의 장점과 생산성을 높이기 위해 객체지향이 절차지향 위에서 사용되는 것이라고 이해하면 편하다.

 

 

객제지향 (Object Oriented Programming)이 왜 생긴거야?

 

객체지향 프로그래밍의 정의는 이렇다 '프로그램을 여러개의 독립된 객체들과 그 객체들 간의 상호작용으로 파악하는 프로그래밍 접근법'

 

"그냥 생각나는 대로 코딩하면 되지 무슨 객체지향, 절차지향을 따지고 있나... "라고 생각할 수 있다.

사실 내가 그렇게 생각했었다(그냥 개발자들이 자기들 끼리 아는체 하고 있는척하려고 이게좋다 저게좋다 싸우는거 아니야?;;라고...)

 

하지만 객체지향이 말이 어려워서 그렇지 이해하면 우리가 항상 사용하고 코딩하는 그 코드들 안에 다 녹아있는 방식이다.

 

쉽게 예를 들어보자)

 

우리가 외워야 할 지식이 별로 없다면 굳이 고생스럽게 공책에 메모를 하거나, 인싸들처럼 카톡 상태메세지에 (이력서/포트폴리오)를 적는 행위를 하는 등의 '기록'을 따로 할 필요가 없을 것이다 .

 

하지만 외워야 하는 양이 많아진다면? 데이터들이 방대해지고 그걸 다 외우려면 머리가 터질것이다.

 

컴퓨터도 같다. 과거보다 점점 더 데이터의 양이 방대해지고 처리해야할 내용이 많아짐에 따라 그 프로그램을 짜는 프로그래머들은 골머리를 앓았을 것이고 하나하나 순서대로 코드를 짜는 것보다 하나의 기능을 만들어서 그 기능을 사용하고 또 유지보수하는 편이 개발의 생산성을 높이기 때문에 그 기능을 만드는 프로그래밍 방법을 고안한것이다. 이 기능을 만들기 위해서는 객체와 그 안에 담겨있는 속성들이 필요하고 이를 먼저 생각하고 순서를 짜는 것을 객체지향이라고 하는 것이다.

 

결코 객체지향과 절차지향이 반대가 되는 내용이 아니다!!!

 

 

객체지향 프로그래밍 === 프로그램을 여러개의 독립된 객체들과 그 객체들 간의 상호작용으로 파악하는 프로그래밍 접근법'

=== '프로그램을 객체들과 객체들간의 소통으로 바라보는것'

 

말로만 이해하려니까 '그래서 뭐가 다르다는 건데...'할 수 밖에 없을 것이다. 간단한 알고리즘을 보자.

 

고객이 와서 자판기에서 음료수를 뽑아 먹는다고 하자. 고객은 자판기에 돈을 넣을 것이고 자판기는 돈을받아서 검사를 한뒤 제품을 주고 잔돈을 줘야하면 잔돈도 줄것읻. 그리고 최종적으로 고객은 제품 혹은 제품,잔돈을 받을것이다.

이 알고리즘 처럼 순서를 베이스로 프로그래밍되고 그 순서대로 실행되도록 바라고 만드는 것이 절차 지향적 프로그래밍이다.

 

객체지향적 프로그래밍은 고객과 자판기라는 객체를 만든다. 그리고 돈,제품이라는 '속성'과 돈을 주기,받기,제품을 주기,받기 등의 동작을 '메소드'라고 한다. 고객과 자판기라는 '객체'는 이러한 '속성'과 '메소드'를 가지고 있는 객체이다.

객체지향적이라는 것은 말그대로 객체를 기준으로 그 객체안에 어떤 속성과 메소드를 포함시킬 것이고, 그 객체들간의 어떤 연관성을 가진 동작을 할 것인지를 먼저 고민을 한후 그거에 맞춰서 프로그래밍을 하는 것이다