[JavaScript] 객체 지향 프로그래밍

Seungmin Lee·2022년 7월 22일
0

JavaScript

목록 보기
11/14
post-thumbnail

대부분의 프로그래밍 언어들은 객체 지향 언어인데 반해 JavaScript는 객체지향언어가 아니다. 하지만 객체 지향 패턴으로 작성은 가능한 객체지향 언어이다.

객체 지향 프로그래밍의 등장 배경

객체 지향 프로그래밍은 코드의 덩치가 커지면서 생기는 문제점을 해결하기 위해 등장한 방법이다. 코드의 덩치가 커질수록 공유하게 되는 변수명이 많아지게 되면서 연관 있는 이름들을 하나로 묶어주는 구조체라는 타입을 만들게 되었다. 그렇다면 구조체와 함수도 하나로 합치면 어떨까? 해서 등장한 것이 class이다. 이렇게 하니 큰 덩치에서 작고 독립적인 단위로 만들 수 있게 되었고 개발과 유지보수가 간편하게 된다는 장점을 알게 된 것이다.

이렇듯 작은 문제를 해결하는 독립된 객체를 먼저 만들고 조립하자는 개발방식"프로그램은 모두 객체로 만들어져 있고 객체들 간이 메세지를 주고받는 상호작용으로 이루어진다."는 개념으로 확장되고 프로그램을 객체로 바라보는 관점으로 프로그래밍하는 것을 객체 지향 프로그래밍(Object Oriented Programing, OOP)이라고 부르게 되었다.

독립된 객체를 조립해서 사용하는 방식은 재사용할 수 있는 객체들을 많이 만들어 놓는 것이 중요하다는 것을 알게 되고 객체의 재사용성을 높이기 위해 OOP에 몇가지 개념들이 추가되었다.

그래서 추가된 몇가지 개념

1. 캡슐화

외부에서 몰라도 되는 것은 숨겨두자!

외부로 노출해야 하는 값과 내부에서만 사용하는 값을 구분하는 기능을 추가하게 되었다. 이를 데이터를 보호해주는 캡슐과 같다고 해서 캡슐화라고 부른다.

  • 데이터(속성)와 기능(메서드)을 하나의 단위로 묶는 것
  • JS에서는 일반적으로 은닉화를 위해 클로저 모듈 패턴을 사용한다.
  • ES2019부터 #키워드가 도입되어 클래스/인스턴스 형태에서 # 키워드를 이용해 은닉화할 수 있다.
class Character {
  name = 'barbie'
  #hp = 500
  skill(){.....}
}

let character = new Character();
character.name = 'barbie' // 외부에서 수정 가능, 위험함

// 외부에서 수정할 수 없다.
character.hp = 1000  // Error : ...'#hp' is not accessible outside class....

2. 상속

객체의 일부분만 재사용하고 싶어!

어떤 게임을 만든다고 생각해보자. 캐릭터가 죽으면 마을로 소환되는 것은 동일하나 캐릭터마다 체력도 다르고 스킬도 다르다. 그래서 객체에서 공통되는 부분만 따로 만들고, 이 것을 다 같이 상속받아서 활용하고 서로 다른 것들만 각자 만들면 되는 개념이 상속이다.

3. 추상화

그렇다면 공통되는 부분을 만들고 이름도 지어주자!

사과, 바나나를 과일이라고 부르듯이 공통되는 부분을 모아서 상위의 개념으로 새롭게 이름을 붙이는 것을 추상화라고 한다.

4. 다형성

모두 뛸 수 있지만 뛰는 모양은 다르다!

모든 캐릭터가 뛸 수는 있지만 뛰는 모양은 모두 제각각이다. 이 때, 추상화되는 뛸 수 있다는 상위 개념이 뛰는 모양이라는 하위 개념을 참조할 수 있다는 개념이 다형성이다.






Reference
자바스크립트에서 객체 지향을 하는 게 맞나요?

profile
<Profile name="seungmin" role="frontendDeveloper" />

0개의 댓글