항목 | 객체기반 (Object-based) | 객체지향 (Object-oriented) |
---|---|---|
정의 | 객체를 중심으로 프로그래밍하지만 상속, 다형성 등의 일부 OOP 개념을 지원하지 않음 | 객체, 클래스, 상속, 다형성 등을 지원하는 프로그래밍 패러다임 |
주요 특징 | 객체와 그 속성/메서드를 사용, 상속/다형성 미지원 혹은 제한적 | 클래스 기반, 상속, 다형성, 캡슐화, 추상화 등 지원 |
언어 예시 | JavaScript (ES5 이전) | Java, C++, Python 등 |
장점 | - 간단하고 직관적 - 작은 규모의 애플리케이션에 적합 - 빠른 개발 가능 | - 재사용성 높음 (상속/다형성) - 유지보수 용이 - 확장성 좋음 - 코드 모듈화 가능 |
단점 | - 상속/다형성 부족 - 유지보수와 확장성에 한계 - 복잡한 시스템에는 불편 | - 설계가 복잡하고 처음 배우기 어려움 - 성능 저하 가능성 - 과도한 추상화로 복잡해질 수 있음 |
자바스크립트를 구성하는 거의 모든 것이 객체다. ⇒ 원시타입을 제외한 나머지 값은 모두 객체
구분 | 원시타입 (Primitive Type) | 객체타입 (Object Type) |
---|---|---|
저장 방식 | 값 자체를 저장 | 값에 대한 참조(reference)를 저장 |
불변성 | 불변(immutable) | 가변(mutable) |
메모리 위치 | 스택(Stack)에 저장 | 힙(Heap)에 저장 |
속성 | 단일 값만 저장 | 여러 값(property) 및 메서드를 포함하는 객체 저장 |
예시 | string , number , boolean , Symbol , undefined , null |
배열(array) , 객체(object) , 함수(function) , 정규표현식(Regex) |
객체지향 언어는 클래스를 사전에 정의하고 필요한 시점에 new 연산자
와 함께 생성자를 호출하여 인스턴스 생성하는 방식으로 객체를 생성
객체 리터럴
은 객체의 속성과 값을 중괄호 { }
안에 정의하는 방식입니다.
이는 명시적으로 클래스나 생성자를 사용하지 않고 객체를 간단하게 선언하고 정의할 수 있어
가독성이 좋고 코드가 간결함.