자바스크립트에서 클래스 안에 특정 속성 혹은 메서드가 있는지 확인하는 방법
개요
계산기 클래스 개발을 하다가, 계산기 안에 없는 연산을 수행하려 하면 에러 메시지를 출력하는 기능을 구현하고자 했다. 계산기가 수행하는 연산들은 곧 계산기 클래스 안의 메서드이므로, 계산기 안에 없는 연산은 계산기 안에 없는 메서드를 뜻한다. 이를 구현하기 위해 특정 메서드가 클래스 안에 있는지 없는지를 판단하려면 어떻게 해야 할까?
자바스크립트에서 클래스 안에 특정 속성이나 메서드가 있는지 확인하기 위해서는 in
연산자를 사용하거나 hasOwnProperty
메서드를 사용할 수 있다. 이를 통해 클래스 속성 혹은 클래스 자체가 특정 메서드를 가지고 있는지 확인할 수 있다.
방법 1 : in 연산자 사용
in
연산자를 사용해 객체나 클래스의 프로토타입 체인에 특정 속성이나 메서드가 있는지 확인할 수 있다.
class MyClass {
myMethod() {
console.log('Hello, world!');
}
}
const instance = new MyClass();
if ('myMethod' in instance) {
console.log('myMethod exists in MyClass');
} else {
console.log('myMethod does not exist in MyClass');
}
방법 2 : hasOwnProperty 메서드 사용
hasOwnProperty
메서드는 객체 자체가 특정 속성을 가지고 있는지 확인할 때 사용한다.
이때 주의해야 할 것은 상속된 속성(메서드)은 확인해주지 않는다는 것이다. 오로지 인스턴스만 확인할 수 있다.
따라서 메서드가 프로토타입 체인에 있는지 확인하는 데에는 적합하지 않으며, 이 경우에는 in
연산자를 사용해야 한다.
class MyClass {
constructor() {
this.name = "jeong";
}
myMethod() {
console.log("Hello, world!");
}
}
const instance = new MyClass();
if (instance.hasOwnProperty("myMethod")) {
console.log("myMethod exists directly on the instance");
} else {
console.log("myMethod does not exist directly on the instance");
}
if (instance.hasOwnProperty("name")) {
console.log("name exists directly on the instance");
} else {
console.log("name does not exist directly on the instance");
}
// ----- 출력값 ----- //
// myMethod does not exist directly on the instance
// name exists directly on the instance
요약
자바스크립트에서 객체에 특정 속성 혹은 메서드가 있는지 확인하는 방법은 두 가지가 있다. in 연산자를 사용하는 방법과 hasOwnProperty
메서드를 사용하는 방법이다. 전자는 메서드가 있는지도 확인할 수 있으나 후자는 속성만 확인할 수 있다는 점에서 차이가 있다.
반응형