Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 apply() 메서드 완벽 정리: 다른 객체의 메서드 재사용하기

자바스크립트의 apply() 메서드는 특정 객체에 정의된 메서드를 다른 객체에서도 그대로 사용할 수 있게 해주는 강력한 기능입니다. 핵심은 this가 가리키는 객체를 원하는 대로 지정할 수 있다는 점이며, 메서드에 전달할 인수는 배열(또는 배열 유사 객체) 형태로 넘겨준다는 특징이 있습니다.

apply() 메서드의 동작 원리

apply()는 첫 번째 인수로 this에 바인딩할 객체를 받고, 두 번째 인수로 실제 함수에 전달할 값들을 담은 배열을 받습니다. 이를 통해 하나의 함수를 여러 객체에서 공유하여 재사용할 수 있어 코드 중복을 줄일 수 있습니다.

예제 코드

다음은 apply()를 사용해 성인 여부를 판별하고 운전 가능 여부를 출력하는 예제입니다.

<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>JavaScript apply()</title>
<style>
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
    .sample {
        font-size: 18px;
        font-weight: 500;
    }
</style>
</head>
<body>
<h1>JavaScript apply()</h1>
<div class="sample"></div>
<button class="Btn">CLICK HERE</button>
<h3>
위 버튼을 클릭하면 성인 여부를 확인할 수 있습니다
</h3>
<script>
    let sampleEle = document.querySelector(".sample");
    let obj1 = { name: "Rohan", age: 22 };
    function checkAdult(vehicle, country) {
        if (this.age > 18) {
            sampleEle.innerHTML = this.name + "님은 성인이므로 " + country +
            "에서 " + vehicle + "(을)를 운전할 수 있습니다";
        } else {
            sampleEle.innerHTML = this.name + "님은 미성년자이므로 " + country +
            "에서 " + vehicle + "(을)를 운전할 수 없습니다";
        }
    }
    document.querySelector(".Btn").addEventListener("click", () => {
        checkAdult.apply(obj1, ["car", "INDIA"]);
    });
</script>
</body>
</html>

코드 설명

  • obj1은 이름과 나이 정보를 담고 있는 객체입니다.
  • checkAdult 함수 내부의 this.age, this.name은 apply()를 통해 전달된 객체의 속성을 참조합니다.
  • 버튼 클릭 시 checkAdult.apply(obj1, ["car", "INDIA"])가 호출되며, thisobj1에 바인딩되고 "car""INDIA"가 배열 형태로 인수로 전달됩니다.

실행 결과

자바스크립트 apply() 메서드 완벽 정리: 다른 객체의 메서드 재사용하기

CLICK HERE 버튼을 클릭하면 아래와 같이 결과가 표시됩니다.

자바스크립트 apply() 메서드 완벽 정리: 다른 객체의 메서드 재사용하기

Rohan의 나이가 22세로 18세 이상이므로, "Rohan님은 성인이므로 INDIA에서 car(을)를 운전할 수 있습니다"라는 문구가 화면에 출력됩니다.

참고: apply()와 call()의 차이

apply()와 유사한 메서드로 call()이 있습니다. 둘 모두 this를 지정할 수 있다는 점은 같지만, call()은 인수를 개별적으로 나열해서 전달하는 반면, apply()는 인수를 배열로 묶어 전달한다는 차이가 있습니다. 인수를 이미 배열 형태로 가지고 있다면 apply()가 더 편리합니다.