객체 (Object)

CODEDRAGON Development/JavaScript, jQuery, ...

반응형

자바스크립트의 객체

-숫자, 문자열, 불린값, null, undefined같은 기본 타입을 제외한 모든 값은 객체.

-따라서 배열, 함수, 정규표현식 등도 모두 자바스크립트 객체로 표현됨.

-이러한 객체는 자바스크립트에서 참조타입이라고 부릅니다.

-이름(key):값(value)형태의 프로퍼티들을 저장하는 컨테이너

-참조 타입인 객체는 여러 개의 프로퍼티들을 포함(기본 타입은 하나의 값만 가짐)함

-객체의 프로퍼티는 기본 타입의 값을 포함하거나, 다른 객체를 가리킬 수 있음

-객체의 모든 연산은 실제 값이 아닌 참조값으로 처리됨

   

   

객체 생성하기 

자바

클래스 정의하고 클래스의 인스턴스를 생성하여 객체 생성

자바스크립트

클래스 개념 없음.

객체 리터럴이나 생성자 함수등 별도의 생성 방식 존재

   

  • Object()생성자 함수 이용

//Object()메소드를 이용해서 foo라는 빈 객체 생성

var foo = new Object();

   

//foo객체에 프로퍼티 생성

foo.name ='foo';

foo.age =33;

foo.gender='femaile';

   

//출력

document.write(typeof foo);

console.log(foo);

   

   

  • 객체 리터럴 방식으로 객체를 생성

중괄호({ })를 이용해서 객체 생성

중괄호안에 "프로퍼티이름":"프로퍼티값" 형태로 표기(key와 value의 쌍)로 속성 지정

var member = {

name:'foo',

age:20,

job:'student'

};

   

객체에 메서드 지정

var member = {

name:'foo',

age:20,

job:'student'

eat:function(){

코드

}

};

   

   

  • 생성자 함수 이용하여 객체 생성

자바스크립트는 함수를 통해 객체 생성 할 수 있습니다.

생성자 함수: 객체를 생성하는 함수

   

   

객체 호출 하기

객체 프로퍼티 접근 방법

대괄호 표기법으로 접근

[ ]

member['name']

접근하려는 프로퍼티 이름을 문자열 형태로 지정해야 합니다.

member[name]이라고 접근하면 'foo'가 아닌 undefined값이 출력됨

대괄호 안에 접근하려는 프로퍼티의 속성은 문자열 형태로 작성되어야 하지만 자바스크립트 엔진는 []연산자 내에 숫자가 사용될 경우, 해당 숫자를 자동으로 문자열 형태로 바꿔주어 정상적으로 결과를 출력해 줍니다.

마침표 표기법으로 접근

.

member.name

java, C++과 유사

   

생성된 객체에서 메서드 호출

member.eat()

   

   

   

속성 호출시 대괄호 연산자만 쓸 수 있는 경우

(1) 식별자로 사용할 수 없는 프로퍼티명을 사용하는 경우 

obj = {'foo-bar':5};

   

//obj.foo와 bar의 뺄셈이라고 해석되어 에러가 발생

obj.foo-bar;

   

//[] 연산자를 사용해 문자열 값으로 지정

obj['foo-bar'];

   

(2) 변수의 값을 프로퍼티명에 사용하는 경우

var key = 'x';

//프로퍼티 x (프로퍼티 key가 아님)

obj[key];

   

   

객체 관련 키워드

   

in

해당 키가 객체 안에 있는지 확인 

var output = '';

   

var student = {

이름 : '홍길동',

국어 : 92,

수학 : 98,

영어 : 96,

과학 : 98

};

   

output += "'이름' in student: " + ('이름' in student) + '\n';

output += "'성별' in student: " + ('성별' in student);

alert(output);

   

with

객체명을 등록하고 속성에 접근할 때 속성명만 호출할 수 있도록 처리 

var student = {

이름: '홍길동',

국어: 92,

수학: 98,

영어: 96,

과학: 98

};

   

var output = '';

 

//with에 객체를 전달하면 with 블럭내에서 속성명만으로 객체의 속성에 접근 가능

with (student) {

output += '이름: ' + 이름 + '\n';

output += '국어: ' + 국어 + '\n';

output += '수학: ' + 수학 + '\n';

output += '영어: ' + 영어 + '\n';

output += '과학: ' + 과학 + '\n';

output += '총점: ' + (국어 + 수학 + 영어 + 과학);

}

alert(output);

  

   

   

동적 객체 생성과 추가

처음 객체를 생성하는 시점 이후에 객체의 속성 및 메서드 추가하거나 제거

   

속성 추가 

//객체 생성

var student = {};

   

//객체에 속성 추가

student.이름 = '홍길동';

student.취미 = '악기';

student.특기 = '프로그래밍';

student.장래희망 = '프로그래머';

   

   

속성 갱신

//이미 취미라는 프로퍼티가 존재하므로 해당 값이 갱신됨

student.취미='댄스';

   

//프로퍼티가 존재하지 않으므로 나이라는 프로퍼티가 동적으로 생성된 다음, 33이라는 값이 할당됨

student.나이 = 33;

   

메서드 추가 

//객체 생성

var student = {};

   

student.greet = function(){

return 'Hello students!!';

};

   

속성 제거 

객체의 프로퍼티를 delete연산자를 이용해 즉시 제거할 수 있습니다.

delete연산자는 객체의 프로퍼티를 삭제할 뿐, 객체 자체를 삭제하지는 못합니다.

delete(student.취미);

   

   

   

생성자 함수를 이용한 객체 생성

   

new 키워드를 사용해 객체 생성할 수 있는 함수 

function Student(name,korean,math,english,science){

this.이름 = name;

this.국어 = korean;

this.수학 = math;

this.영어 = english;

this.과학 = science;

//메서드 지정

this.getSum = function(){

return this.국어 + this.수학 + this.영어 + this.과학;

};

this.getAverage = function(){

return this.getSum() / 4;

};

this.toString = function(){

return this.이름 + ', ' + this.getSum() + ', ' + this.getAverage();

};

}

//생성자 함수를 이용한 객체 생성

var student = new Student('홍길동',100,99,98,97);

   

   

   

instanceof 연산자

- 생성자 함수를 통해 만들어진 객체가 인스턴스instance

- 해당 객체가 어떠한 생성자 함수를 통해 생성됐는지 확인할 때 사용 

function Student(name) { this.name = name; }

   

var student = new Student('홍길동'');

   

alert(student instanceof Student);

   

   

캡슐화

객체 내부에 데이터가 저장되는 영역을 지역변수화해서 객체 외부에서 직접 접근을 불허하고 메서드를 이용해 접근하도록 처리함 

// 생성자 함수를 선언

function Rectangle(w, h) {

   

var width = w; //지역변수

var height = h; //지역변수

 

this.getWidth = function () { return width; };

this.getHeight = function () { return height; };

this.setWidth = function (w) {

width = w;

};

this.setHeight = function (h) {

height = h;

};

}

   

   

상속

- 기존의 생성자 함수나 객체를 기반으로 새로운 생성자 함수나 객체를 쉽게 만드는 것

- 기존의 객체를 기반으로 생성

- 상속을 통해 새로 만들어지는 객체에는 기존 객체의 특성 존재

   

   

'Development > JavaScript, jQuery, ...' 카테고리의 다른 글

프로젝트 생성  (0) 2014.08.24
jQuery API 문서 2  (0) 2014.08.23
전역객체, 전역변수, this바인딩  (0) 2014.08.17
메소드 호출시 this바인딩  (0) 2014.08.12
arguments 객체 이용  (0) 2014.08.08