본문 바로가기

프로그래밍 공부/JavaScript

JavaScript - 기본 자료형과 객체의 차이점

이전에 배운 내용으로 자바스크립트의 자료형은 총 6가지가 있다.

자료형 설명
Number 숫자
String 문자열
Boolean 불린(true / false)
Null null / Null
Undefined undefined / Undefined
Object 객체

또한 배열(Array)은 객체에 포함이 된다. Object를 제외한 Number, String, Boolean 등은 기본 자료형(Primitive data)에 해당이 되고 객체인 Object와는 다르다. 속성(Property)과 메서드(Method)는 객체가 가질 수 있는 특성이다. 하지만 기본 자료형에서도 속성과 메서드는 있으나, 이것은 기본 자료형의 속성이나 메서드를 사용하면 기본 자료형은 객체로 변환되기 때문에 일어나는 일이다.

1
2
3
4
5
6
7
8
9
10
// 숫자를 넣어 숫자 자료형이 된다.
let primitiveNumber=273;
 
// 숫자를 Number 객체에 넣어 객체가 된다.
let objectNumber=new Number(273);
 
let output='';
output+=typeof(primitiveNumber)+' : '+primitiveNumber+'\n';
output+=typeof(objectNumber)+' : '+objectNumber;
console.log(output);
cs

예로 기본 자료형 숫자의 속성이나 메서드를 사용할 때에는 자동으로 Number 객체로 변환이 되어서 속성이나 메서드를 사용할 수 있는 것이다. 굳이 객체와 기본 자료형의 차이를 보면 기본 자료형은 태생이 객체가 아니기 때문에 속성과 메서드를 추가할 수 없다.

아까 기본 자료형에서도 속성과 메서드가 있다고 설명했는데, 쉽게 설명하면 기본 자료형을 대상으로 메서드를 사용하면 일시적으로 객체로 변환이 일어나 내부에 있는 메서드를 호출하게 되는 것으로 실행이된 줄이 끝나게 되면 다시 기본 자료형으로 돌아오게 되기 때문이다.

1
2
3
4
5
6
7
8
9
10
// 숫자를 넣어 숫자 자료형이 된다.
let primitiveNumber=273;
 
// primitiveNumber 숫자 자료형에 객체처럼 메서드를 삽입한다.
primitiveNumber.method = function(){
     return 'Primitive Method';
};
 
// .method()가 아닌 undefined를 출력한다.
alert(primitiveNumber.method);
cs

분명히 숫자 자료형은 primitiveNumber 변수에 객체 메서드를 넣었다면 줄의 마지막 alert()에서 삽입된 메서드가 출력이 되어야 하지만 단지 일시적으로만 객체로 변화하고 다시 기본 자료형으로 돌아왔기 때문에 undefined가 출력이 되는 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
let primitiveNumber=273;
let objectNumber=new Number(273);
 
// 프로토타입으로 Number 생성자 함수에 메서드 추가
Number.prototype.method=function(){
     return 'Method on Primitive';
}
 
let output='';
output+=primitiveNumber.method()+'\n';
output+=objectNumber.method();
console.log(output);
cs

물론 기본 자료형에 속성이나 메서드를 아예 추가할 수 없는 것은 아니다. 이전에 배웠던 prototype을 사용하면 추가가 가능하다.

기본 자료형과 객체.html
0.00MB

'프로그래밍 공부 > JavaScript' 카테고리의 다른 글

JavaScript - Number 객체  (0) 2019.12.11
JavaScript - Object 객체  (0) 2019.12.11
JavaScript - 생성자 함수 연습문제  (0) 2019.12.10
JavaScript - 상속  (0) 2019.12.10
JavaScript - 캡슐화  (0) 2019.12.10