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

Minjae Kwon·2020년 10월 29일
0

 🍉   Learning Journal

목록 보기
22/36
post-thumbnail

OOP(Obejct Oriented Programming)와 함께 등장하는 개념으로 이전에 지배적이었던 절차 지향 프로그래밍이 있다. 절차 지향 프로그래밍은 순서성에 초점을 둔다. 그런데 시간이 갈수록 관리해야 할 데이터는 기하급수적으로 늘어나고, 명령어도 늘어나고, 순서도는 복잡해지며 점점 흐름 관리가 힘들어진다.

이에 중복 코드 제거, 코드의 재사용성 확대, 유지 보수의 용이성 등에 대한 필요성이 대두되며, 데이터를 구조화하려는 고민 속에 등장한 것이 OOP이다.

🙋🏻‍♀️ 객체 지향 프로그래밍이 뭔지 감이 안 와요!

family oriented person 이라고 하면 가족 중심적인, 가정적인 사람이라고 해석하는 것처럼, object oriented programming 은 물건 중심으로 프로그래밍하는 방법이라고 해석할 수 있다.

지금 내 책상에 책이 있는데 이 물건을 중심으로 생각해보자. 내가 책을 한 권 더 사서, 두 권의 책을 완전 별개의 데이터처럼 취급할 수도 있다. 책을 살 때마다, 독립된 데이터들이 쌓일 것이다.

하지만 객체 지향 방식을 따른다면, 먼저 책이라는 대표적인 개념을 떠올리고 책이 가지는 특징들을 생각해본다. 모든 책들이 공통적으로 가지는 속성이 있을 것이다. 저자, 출판사, 출판 연도 등등. 그리고 새로운 책을 살 때마다 내가 머릿 속에 그린 대표적인 책 이미지의 아류로 취급하면, 이들은 별개의 데이터가 아니라, 대표적인 책 이미지에 묶인 하나의 책 묶음들이 된다.

예시에 사용한 개념을 각각 프로그래밍 언어와 연결시켜보면, 내가 머릿 속에 그렸던 대표적인 책 이미지(Object / Class), 이 책이 대표적으로 가지는 속성들의 모음(prototype / constructor, property, methods), 이걸 통해서 만들어내는 책들(instance)로 매칭될 수 있을 것이다.

🙋🏻‍♀️ 객체 지향 프로그래밍의 특징은?

대표적으로 네 가지를 꼽는다.

  1. 캡슐화 (Encapsulation)
  2. 상속 (Inheritance)
  3. 추상화 (Abstraction)
  4. 다형성 (Polymorphism)

💡 캡슐화

캡슐에 넣듯, 그 물건(Object)에 대한 공통된/공유될 속성들을 한 군데에 담아 놓는 특징을 일컫는다. 아래 예시를 보면, Book 에 대한 여러 속성들이 Book 이라는 이름 아래 캡슐화 되어 있다.

class Book {
  constructor(author, publisher, year){
    this.author = author; 
    this.publisher = publisher; 
    this.year = year; 
    this.rate = 0; 
  }
  
  like() {
    return this.rate += 1; 
  }
  
  dislike() {
    return this.rate -= 1; 
  }
  
}

💡 상속

생성자 함수에서 정의된 property, method 들을 그대로 가져와서 재사용할 수 있는 특성이다. 예를 들어, Book 에서 fiction 이라는 instance 를 만든다고 한다면 아래와 같다. 기존 Book 의 모든 설정값을 복사하고, 거기에 장르를 추가했다.

class Fiction extends Book {
  constructor(author, publisher, year) {
    super(author, publisher, year);
    this.genre = 'fiction'; 
  }
}

이렇게 상속을 통해, 기존 클래스의 캡슐화를 유지하면서도 기능을 추가하여 재사용이 가능하다.

💡 추상화

제일 위의 Book class 를 다시 보면, 사용자는 그 세세한 코드를 다 알 필요없이, like(), dislike() 라는 메소드만 알아도 rate 을 변경할 수 있다. OOP는 이렇게 내부 구현을 밖으로 드러내지 않아도 되므로 코드가 외부로부터 영향 받을 위험이 적고, 사용자로 하여금 조작이 간단하게 하여 코드를 '추상화' 시키는 특징을 가진다.

💡 다형성

위의 Book class 에 여러 데이터 값을 넣어서 매번 새로운 instance 생성이 가능하다. 생성자 함수 하나를 통해 그 속성을 공유하는, 그러나 다른 데이터 값을 가지는 instance 를 만들어 낼 수 있는데 이와 같은 특징을 다형성(많은 형태..? 😅 ) 이라고 일컫는다.

profile
Front-end Developer. 자바스크립트 파헤치기에 주력하고 있습니다 🌴

0개의 댓글