Basic/개발 패러다임

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

joyCHAE 2021. 3. 24. 02:11

 

 

01. 객체 지향 프로그래밍이란?

 

로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것이다.

"객체"라고 했다고 너무 추상적으로 받아들이지 말고 다음에 집중해라.

 

객체를 어떻게 만드는가?
객체를 어떻게 사용하는가?

 

하나의 프로그램은 서로 다른 목적을 가진 로직들의 집합이다. 자연스럽게 복잡한 로직들을 기능별로 Grouping 하고 싶어질 것이다. 게시판으로 치면 글목록, 본문, 댓글 관련한 로직들을 각각 분류해서 모아놓는 식으로 말이다. 여기서 로직이란 변수와 메소드를 말하는 것이다.

 

변수와 메소드를 서로 연관되어 있는 기능별로 Grouping 하는 기능을 프로그래밍 언어 차원에서 제공하고 있고, 그렇게 Grouping 된 하나하나의 단위들을 "객체"라 부른다. 객체는 변수와 메소드를 그룹핑한 것이다. 서로 연관성이 없는 로직들은 객체라는 껍데기를 중심으로 분류되고, 연관성이 있는 로직들은 객체라는 껍데기를 중심으로 응집된다.

 

쉬운 관리를 위해 로직들을 분류, 카테고라이징을 하다보니 자연스럽게 "객체"라는 프로그래밍 언어 자체가 제공하는 기능이 나타나게 된다. 가만히 보니 댓글에 해당하는 기능을 모아 놓은 객체는 다른 사이트, 어플리케이션에서도 사용할 수 있다는 점을 발견하였다. "객체의 재활용성" 개념이 나타난 것이다.

 

재활용성이 높아지니, 이미 사용하는 로직을 다른 곳에 사용하게 되고 그 과정에서도 문제가 생겼다. 이런 문제들을 완화시키기 위해 로직들을 컨트롤하는 여러 기능들이 생겨났다. 객체지향 프로그래밍의 여러가지 기능들은 바로 이러한 맥락에서 생겨났다.

 

 

 

 

02. 문법과 설계

 

객체 지향 프로그래밍 교육은 크게 두 가지이다.

 

  1. 문법 - 객체 자체를 만들기 위해 언어가 제공하는 기능을 익혀야 한다. 이러한 기능들은 if, for문 처럼 문법적인 구성을 가지고 있다. 이 문법을 이해하고, 숙지해야 객체를 만들 수가 있다.
  2. 설계 - 객체를 '만드는 것'에서 나아가 '좋은 객체를 잘 만들기'위해 설계를 배운다. 좋은 설계는 현실을 잘 만영해야 한다. 현실을 간단하게 단순화 시켜서 만드는 것을 '추상화'라고 한다.

 

" 소프트웨어를 설계한다는 것은 복잡한 현실을 추상화 하는 과정이다. "

 

현실을 프로그래밍적으로 잘 추상화해 설계를 잘 하는것이 우리가 프로그래머로서 추구해야 할 지점이다. 다만, 이 부분은 지식적 측면이 아니라 지혜의 영역이다. 문제 해결 과정의 긴 시간을 거쳐서 스스로 터득해야 할 것이다.

 

 

 

 

03. 부품화

 

위에서 언급했듯이, 기능별로 변수와 메소드를 묶어놓은 객체를 다른 곳에도 활용할 수 있게 되었다. (다른 곳에서 유사한 기능이 필요할때!) 객체는 여러 곳에서 일종의 "부품"으로써 사용되고 있다.

 

좋은 객체를 만든다는 것은 그 로직을 재활용 가능하도록 부품화 하는 것이다. 부품화를 잘 하면 재활용성이 높아지고, 여러 곳에서 활용할 수 있게 된다.

 

설계, 부품화에는 정답이 없다. 고정된 방법이 없고 정답이 없다. 가장 중요한 것은 자신이 처해 있는 환경에서 가장 적합한 것을 찾는 것이다.

 

정보공학 초기에는 메쏘드가 객체로써 사용되었다. 메쏘드는 부품화의 한 예이다. 메쏘드는 프로그램 안에서 중복되어 사용되는 것을 하나의 로직으로 별도로 뺴서 재활용성을 높인 것이다. 기능별로 로직을 묶어 메쏘드들을 조합해 우리는 하나의 독립된 프로그램을 만드는 것이다. 하지만 프로그램이 커지면서 메쏘드만으로는 한계에 부딪혀 나온 개념이 '객체지향'이다.

 

 

 

 

04. 은닉화 / 캡슐화

부품화를 해서 객체를 만들었다고 해서 모든 곳에서 이 객체를 재활용할 수는 없다. 제대로된 부품이라면 그것이 어떻게 만들어졌는지 모르는 사람도 그 부품을 사용하는 방법만 알면 쓸 수 있어야 한다.

 

따라서 내부의 동작 방법을 단단한 케이스(객체)안으로 숨기고 사용자에게는 그 부품의 사용방법만을 노출하는 것을 은닉화, 캡슐화라 한다. 자연스럽게 사용자는 그 부품을 사용하는 방법에 집중하게 된다.

 

 

 

 

05. 인터페이스

 

잘 만들어진 부품이라면 부품과 부품을 서로 교환할 수 있어야 한다. 복제와 상속 개념이 이에 해당한다.

 

 

 

[이 글은 생활코딩 자바스크립트 객체지향프로그래밍 강의를 기반으로 쓰여진 글입니다.]

'Basic > 개발 패러다임' 카테고리의 다른 글

객체 지향 프로그래밍 with Java  (0) 2021.03.24