power-girl0-0

[객체지향] Object 본문

언어/Javascript

[객체지향] Object

power-girl0-0 2021. 2. 5. 23:03
728x90

 

 

생활코딩 javascript를 참고하여 공부하였습니다.

스스로 공부한 것을 정리하고 복습하기 위한 목적으로 작성하였습니다.

( 출처 :  https://opentutorials.org/course/743)


 Object 

Object 객체는 객체의 가장 기본적인 형태를 가지고 있는 객체이다.

즉, 아무것도 상속받지 않는 순수한 객체란 뜻이다.

 

자바스크립트에서는 값을 저장하는 기본적인 단위로 Object를 사용한다. 

var grades = {'egoing': 10, 'k8805': 6, 'sorialgi': 80};

동시에 자바스크립트의 모든 객체는 Object 객체를 상속 받는다.

왜냐하면 모든 객체는 Object 객체의 프로퍼티를 가지고 있기 때문이다.

 

아래 사이트는 Object api 사용법에 대한 자세한 설명이 되어있다.

( https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object )


 Object.keys( ) 

: 어떤 객체가 있을 때, 객체가 가지고 있는 여러가지 키 값들을 리턴해주는 메소드이다.

 Object.prototype.toString( ) 

: 어떤 객체가 있을 때 객체가 담고 있는 어떤 값들이나, 그 객체의 상태를 사람이 보기 좋게 출력해주는 메소드이다.

객체는 암시적으로 object라고 하는 부모 객체를 갖고 있다.

따라서, object에 정의되어 있는 toString과 같은 메소드를 사용할 수 있는 것이다.

 

만약 모든 객체들이 공통적으로 가지고 있어야 하는 기능이 필요하다면, 해당 기능은 object의 prototype 객체를 수정하는 것을 통해서 만들 수 있다.


Object 객체를 확장하면 모든 객체가 접근할 수 있는 API를 만들 수 있다.

예제를 통해서 알아보자.

Object.prototype.contain = function(neddle) {
    for(var name in this){
        if(this[name] === neddle){
            return true;
        }
    }
    return false;
}
var o = {'name':'egoing', 'city':'seoul'}
console.log(o.contain('egoing'));
var a = ['egoing','leezche','grapittie'];
console.log(a.contain('leezche'));

그러나, 이러한 object객체를 확장하는 것은 모든 객체에 영향을 주기 때문에 바람직하지 않다.


확장 후, 아래 소스 코드를 실행하면 결과 값은 name과 contain이 출력된다.

for(var name in o){
    console.log(name);  
}

이는 확장한 프로퍼티인 contain가 포함되어 있는 것이다.

객체가 기본적으로 가지고 있을 것으로 예상하고 있는 객체 외에 다른 객체를 가지고 있는 것은 개발자들에게 혼란을 준다.


이러한 문제점을 해결하기 위해, 프로퍼티의 해당 객체의 소속인지를 체크해볼 수 있는 hasOwnProperty를 사용하면 된다. 

for(var name in o){
    if(o.hasOwnProperty(name))
        console.log(name);  
}

즉, hasOwnProperty는 인자로 전달된 속성의 이름이 객체의 속성인지 여부를 판단하며, object가 가지고 있는 메소드이다.

따라서, 만약 prototype으로 상속 받은 객체라면 false가 된다. 

 

 

 

728x90

'언어 > Javascript' 카테고리의 다른 글

[객체지향] 참조  (0) 2021.02.06
[객체지향] 데이터 타입  (0) 2021.02.05
[객체지향] 표준 내장 객체의 확장  (0) 2021.02.05
[객체지향] prototype  (0) 2021.02.05
[객체지향] 상속  (0) 2021.02.05
Comments