어제의 나보다 성장한 오늘의 나

자바스크립트 참조 타입(객체 타입) 본문

공부/JavaScript && jquery

자바스크립트 참조 타입(객체 타입)

NineOne 2021. 4. 8. 23:56

gooweon.tistory.com/96

 

자바스크립트 데이터 타입과 연산자

자바스크립트는 느슨한 타입 체크 언어이다. 엄격한 타입 체크 언어인 C 언어는 변수를 선언할 때 변수에 저장할 데이터에 종류(문자, 정수, 실수 등)에 따라 char, int, float 등의 예약어를 이용해

gooweon.tistory.com

  • 자바스크립트에서 숫자, 문자열, 불린값, null, undefined 같은 기본 타입을 제외한 모든 값은 객체이다.
  • 따라서 배열, 함수, 정규표현식 등도 모두 결국 객체로 표현된다.
  • 자바스크립트에서 객체는 단순히 '이름(key) : 값(value)' 형태의 프로퍼티들을 저장하는 컨테이너로서 해시(Hash) 자료구조와 상당히 유사하다.
  • 기본 타입은 하나의 값만 가지는데 비해, 참조 타입인 객체는 여러 개의 프로퍼티들을 포함할 수 있다.
  • 이러한 객체의 프로퍼티는 기본 타입의 값을 포함하거나, 다른 객체를 가리킬 수 있다.
  • 이러한 프로퍼티의 성질에 따라 객체의 프로퍼티는 함수로 포함할 수 있으며, 자바스크립트에서는 이러한 프로퍼티를 메서드라고 부른다.

객체를 생성하는 방법 3가지

Object() 생성 함수 이용

  • 자바스크립트에서는 객체를 생성할 때, 내장 Object() 생성자 함수를 제공한다.
  • 다음 예제는 Object() 생성자 함수를 이용해서 foo라는 빈 객체를 생성한 후, 몇 가지 프로퍼티들을 추가한 것이다.
var foo = new Object();

foo.name = 'foo';
foo.age = 30;
foo.gender = 'male';

console.log(typeof foo);// object
console.log(foo);       // { name: 'foo', age: 30, gender: 'male' }

객체 리터럴 방식 이용

  • 리터럴이란 용어의 의미는 표기법이라고 생각하면 된다.
  • 객체 리터럴 방식은 간단한 표기법만으로도 객체를 생성할 수 있는 자바스크립트의 강력한 문법이다.
  • 객체 리터럴은 중괄호 {} 를 이용해서 객체를 생성한다.
  • 중괄호 안에 "프로퍼티 이름" : "프로퍼티 값" 형태로 표기하면 된다.
  • 프로퍼티 이름은 문자열이나 숫자가 올 수 있다.
  • 프로퍼티 값으로는 자바스크립트의 값을 타내는 어떤 표현식도 올 수 있으며, 이 값이 함수일 경우 이러한 프로퍼티를 메서드라고 부른다. 
var foo = {
    name : 'foo',
    age : 30,
    gender : 'male'
};


console.log(typeof foo);// object
console.log(foo);       // { name: 'foo', age: 30, gender: 'male' }

생성자 함수 이용

  • 자바스크립트의 경우는 함수를 통해서도 객체를 생성할 수 있다.
  • 이렇게 객체를 생성하는 함수를 생성자 함수라고 부르는데 자세한 내용은 함수와 프로토타입 체이닝에서 확인!

 

그렇다면 생성한 객체의 프로퍼티를 어떻게 접근할까?

  • 대괄호([ ]) 표기법
  • 마침표(.) 표기법

자바스크립트 참조 타입의 특성

  • 자바스크립트에서는 기본 타입인 숫자, 문자열, 불린값, null, undefined 5가지를 제외한 모든 값은 객체다.
  • 배열이나 함수 또한 객체로 취급된다 이러한 객체는 참조 타입이라고 부른다.
  • 객체의 모든 연산이 실제 값이 아닌 참조값으로 처리된다.
var objA = {
	val : 40
};

var objB = objA;

console.log(objA.val); // 출력값 : 40
console.log(objB.val); // 출력값 : 40

objB.val = 50;

console.log(objA.val); // 출력값 : 50
console.log(objB.val); // 출력값 : 50
  • 위의 예제로 objA 변수는 객체 자체를 저장하고 있는 것이 아니라 생성된 객체를 가리키는 참조값을 저장하고 있다는 것을 볼 수 있다.

참조에 의한 함수 호출 방식

  • 객체의 모든 연산이 실제 갓이 아닌 참조값으로 처리된다.
  • 기본 타입의 경우 값에 의한 호출 ( Call by Value 방식 ) 즉, 매개변수로 복사된 값이 전달, 때문에 함수 내부에서 매개변수를 이용해 값을 변경해도, 실제로 호출된 변수의 값이 변경되지 않는다.
  • 반면 참조 타입은 참조에 의한 호출 ( Call by Reference 방식 ), 복사되지 않고 인자로 넘긴 객체의 참조값이 그대로 함수 내부로 전달된다. 때문에 함수 내부에서 참조값을 이용해서 인자로 넘긴 실제 객체의 값을 변경할 수 있다. 
var a = 100;
var objA = { value : 100};

function changeArg(num, obj){
    num = 200;
    obj.value = 200;

    console.log(num);
    console.log(obj);
}

changeArg(a, objA);

console.log(a);
console.log(objA);

 

끝~

 

 

출처 

인사이드 자바스크립트(송형주, 고현준 지음) - 한빛미디어

Comments