객체 개념 박살내기
3.2.2 데이터 타입의 분류
일단 데이터 타입은 원시 타입, 객체 타입이 있다
원시 타입은 ‘숫자, 문자열, 논리 값, 특수한 값(undefined, null), 심벌’이 있으며
원시 타입 데이터는 데이터를 구성하는 가장 기본적인 요소로 불변 값으로 정의되어있음.
변수에 원시 값을 대입하면 그 값이 변수에 저장
객체는 원시 타입에 속하지 않는 자바스크립트의 값이며
변수 여러 개가 모여서 만들어진 복합 데이터 타입.
객체 안에 저장된 값은 바꿀 수 있음.
변수에 객체 값을 대입하면 그 참조가 할당됨.(객체는 참조 타입이다.)
자바스크립트에서는 배열, 함수, 정규 표현식 같은 다양한 요소가 객체임.
4.1.1 객체
객체는 이름(key)과 값(value)을 한 쌍으로 묶은 데이터를 여러 개 모은 것. (즉, 객체=데이터 여러 개를 하나로 모은 복합 데이터)
|
Key |
Value |
|
Suit |
“하트” |
|
Rank |
“A” |
객체 생성하기
객체 리터럴로 객체 생성
var card = {suit:”하트”, rank: “A”};
또는
var card = {};
card.suit = “하트”;
card.rank = “A”;
//위처럼 가능한 이유: 객체 안에 저장된 값은 바꿀 수 있기 때문.
생성자로 객체 생성하기
function Card(suit, rank){ //생성자:new 연산자로 객체를 생성할 것이라 기대하고 만든 함수이며, 관례적으로 첫 글자를 대문자로 씀
this.suit = suit;
this.rank = rank;
}
var card1 = new Card(“하트”, “A”);
4.2.13 객체의 메서드
정의: 객체의 프로퍼티 중에서 함수 객체의 참조를 값으로 담고 있는 프로퍼티 = 메서드
ex)
var circle = {
center: {x:1.0, y:2.0},
radius: 2.5,
area: function(){ // 원의 넓이를 구하는 메서드
return Math.PI * this. radius * this. radius;
}
};
circle.area(); // 일반 함수와 마찬가지로 메서드 실행
메서드 또한 프로퍼티의 일종이므로 나중에 추가 가능.
ex)
circle.translate = function(a, b){
this.center.x = this.center.x + a;
this.center.y = this.center.y + b;
};
// 객체 circle의 원을 평행으로 이동시키는 translate 메서드를 추가한 것
정리
위 예에서 알 수 있듯이 메서드는 일반적으로 메서드가 속한 객체의 내부 데이터(프로퍼티 value)상태를 바꾸는 용도로 사용
일반적인 객체 지향 언어에서는 데이터와 그 상태를 바꾸는 메서드를 하나로 묶는 용도로 객체를 사용.
이러한 객체를 기본 부품으로 삼아 프로그램 만들어 가는 기법 = 객체 지향 프로그래밍
4.3 생성자
Java나 C++ 등은 같은 프로퍼티를 갖는 객체를 여러 개 생성하는 수단을 클래스(class)라고 함.
Javascript에는 클래스가 없다. 대신 생성자라고 하는 함수로 객체를 생성 가능.
(예시는 ‘생성자로 객체 생성하기’ 참고)
생성자의 역할
객체를 생성하고 초기화하는 역할
이름은 같지만 프로퍼티 값이 다른 객체 여러 개 간단히 생성
ex)
var card1 = new Card(“하트”, “A”);
var card2 = new Card(“스페이드”, “K”);
var card3 = new Card(“클럽”, “2”);