[JavaScript] 자바스크립트의 객체 (feat. 자바스크립트도 "객체 지향"?)

서동경·2023년 1월 26일
0
post-thumbnail

💡 객체(Object)란?

자바스크립트는 객체 기반 언어(Object-Based Language)로, 추상자료형의 객체를 정의하여 쓸 수 있는 언어이다. 자바스크립트의 거의 모든 것은 객체라고 봐도 무방한데, 원시타입인 number, string, boolian, null, undefined, symbol을 제외한 함수, 배열, 정규표현식 등을 포함한 거의 모든 것은 객체이다.

객체란 key: value 형태의 프로퍼티(Property)를 저장하는 곳이다. 즉 객체는 프로퍼티로 구성되어있으며 이러한 프로퍼티의 value에는 기본 타입의 값이 들어가거나 다른 객체가 들어가기도 한다. 또한 함수가 포함되기도 하는데 일반 함수와 구분짓기 위해 이를 메서드(Method)라고 부른다.

이와 같이 객체는 데이터를 의미하는 프로퍼티와 데이터를 참조하고 조작할 수 있는 동작을 의미하는 메서드로 구성된 집합이다. 즉 데이터와 그 데이터에 관련되는 동작을 모두 포함할 수 있기 때문에 데이터와 동작을 하나의 단위로 구조화할 수 있는 것이다.

🔍 자바스크립트도 객체 지향 프로그래밍 (Object-Orient Programming) 인가?

객체 지향 프로그램을 설명하기 전에 그 이전의 패러다임을 먼저 살펴보자면 시초의 패러다임인 순차적, 비구조적 프로그래밍이 있다. 이름 그대로 필요한 것이 있으면 순서대로 추가해가며, 함수는 없으니 goto문을 이용해 특정 위치로 실행 순서를 변경해가는 프로그래밍 방식이다. 프로그램의 규모가 커질수록 코드가 복잡해지는 한계가 드러난다.

이를 개선하기 위한 새로운 패러다임은 절차적,구조적 프로그래밍이다. 이는 반복될 가능성이 있다면 재사용이 가능한 함수 또는 프로시저로 만들어 사용하는 프로그래밍 방식이다. 함수의 사용으로 인해 순차적, 비구조적 프로그래밍 방식에 비해 코드가 간결해지기는 했지만 여전히 개발자들을 만족시킬 수 없었고, 코드 간 유기성이 높아 확장성면에서도 유지보수가 어렵다는 단점이 존재했다.

이와같은 단점을 보완하고자 나온 패러다임이 객체 지향 프로그래밍이다. 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체로 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 모듈화,캡슐화,은닉화가 가능해져 유지보수가 간편해졌고, 상속과 다형성을 통해 코드의 재사용성을 높이고 확장성을 가지도록 했다. 현실 세계와의 유사성으로 코드를 이해하기도 쉬워졌다.

그렇다면 자바스크립트는 객체 지향 프로그래밍이라고 할 수 있을까? 전통적인 객체 지향 프로그래밍 언어는 클래스를 사용함으로써 객체를 생성하고 상속을 구현한다. 그러나 자바스크립트는 객체 지향의 개념은 가져오되, 주류 언어였던 Java와는 다른 방식으로 객체 지향 프로그래밍을 풀어냈다. 복잡한 클래스나 설계, 추상화, 다형성 등을 만들고 싶어 하지 않았지만 Java의 문법과 패러다임은 최대한 유지하여 Java개발자들을 끌어들이고자 했다.

자바스크립트에서는 객체를 생성하기 위해 생성자 함수를 사용한다. 생성자 함수는 객체를 초기화하기 위해 사용되며, new 키워드를 통해 객체를 생성한다. 이렇게 생성한 객체는 프로토타입(Prototype)이라는 객체를 통해 다른 객체로의 상속을 구현한다. 그러므로 자바스크립트는 전통적인 객체 기반 프로그래밍 언어는 아니지만, 함수형 언어를 기반으로 객체 지향 프로그래밍을 지원하는 언어라고 할 수 있다. 또한 ES6에서는 클래스가 추가되어 클래스 기반의 객체 지향 프로그래밍도 가능해졌다.

profile
개발 공부💪🏼

0개의 댓글