실제 세계의 실체가 특징이나 성질을 나타내는 속성을 가지고 있고, 이를통해 구별할 수 있듯이 속성을 통해 여러 개의 값을 하나의 단위로 구성한 복합적인 자료구조를 객체라고 한다. 또한 자바스크립트에서 객체는 변경 가능한 값
객체 변경 방지 방법
객체 확장 금지(object.preventExtensions)
프로퍼티 추가가 금지됨(프로퍼티 동적 추가, object.defineproperty 두 방법 모두 금지)
객체 밀봉 seal
프로퍼티 추가 및 삭제,프로퍼티 어트리뷰트 재정의 금지 → 밀봉된 객체는 읽기와 쓰기만 가능
객체 동결 freeze
프로퍼티 추가 및 삭제, 프로퍼티 어트리뷰트 재정의 금지, 프로퍼티 값 갱신 금지 → 동결된 객체는 읽기만 가능
→ 변경 방지 메서드들은 얕은 변경 방지로 직속 프로퍼티만 변경이 방지되고 중첩 객체까지는 영향을 주지 못함. 따라서 객체의 중첩 객체까지 변경 불가능한 읽기 전용의 불변 객체를 구현하려면 객체를 값으로 갖는 모든 프로퍼티에 대해 재귀적으로 .freeze 메서드를 호출해야 함
객체지향 프로그래밍은 객체의 프로퍼티나 메서드를 다른 객체가 상속받아 그대로 사용할 수 있는 ‘상속’이란 개념이 있음 이는 코드의 재사용성 부분에서 큰 이점이다.
자바스크립트는 프로토타입 기반으로 상속을 구현함. 프로토타입은 어떤 객체의 부모 객체의 역할을 하는 객체로서 다른 객체에 공유 프로퍼티(메서드 포함)를 제공한다. 프로토타입을 상속받은 자식 객체는 부모 객체의 프로퍼티를 자신의 프로퍼티처럼 자유롭게 사용 가능. 이를 통해 중복되는 코드를 부모 객체에서 상속받아 불필요한 중복을 줄일 수 있고 이는 개발 비용을 줄일 수 있는 잠재력이 있다.
객체 지향 프로그래밍의 다른 장점은
<aside> 💁 프로토타입 외에 상속을 구현하는 방법이 있을까?
모든 객체는 [[Prototype]]
이라는 내부 슬롯을 가지며, 이 내부 슬롯의 값은 프로토타입의 참조다. [[Prototype]]
에 저장되는 프로토타입은 객체 생성 방식에 의해 결정된다. 즉 객체가 생성될 때 객체 생성 방식에 따라 프로토타입이 결정되고 **[[Prototype]]
**에 저장된다.
또한 모든 프로토타입은 생성자 함수와 연결되어 있다.
따라서 셋은 모두 연결되어 있다.