자바스크립트에서는 함수 자체를 생성자(constructor)처럼 사용하여 새로운 객체를 만들 수 있습니다. new 키워드와 함께 함수를 호출하면 해당 함수가 객체 생성자 역할을 하며, 내부의 this 키워드를 통해 새로 생성되는 객체에 속성을 정의할 수 있습니다.
아래 예제 코드를 실행해 보면 함수를 객체로 활용하는 방법을 확인할 수 있습니다.
예제
<html>
<head>
<title>사용자 정의 객체</title>
<script>
function book(title, author){
this.title = title;
this.author = author;
}
</script>
</head>
<body>
<script>
var myBook = new book("Amit", "Python");
document.write("책 제목 : " + myBook.title + "<br>");
document.write("책 저자 : " + myBook.author + "<br>");
</script>
</body>
</html>
코드 설명
위 코드의 동작 방식은 다음과 같습니다.
- book() 함수 정의:
title과author두 개의 매개변수를 받아this를 통해 각 속성에 값을 할당합니다. - 객체 생성:
new book("Amit", "Python")처럼new키워드로 호출하면 빈 객체가 만들어지고, 함수 내부의this가 그 객체를 가리키게 됩니다. - 속성 접근: 생성된
myBook객체에서 점 표기법(myBook.title,myBook.author)으로 속성 값을 읽어 화면에 출력합니다.
실행 결과
책 제목 : Amit 책 저자 : Python
참고: 최신 문법(ES6 클래스)
현대 자바스크립트에서는 위와 같은 생성자 함수 대신 class 문법을 사용하는 것이 일반적입니다. 동일한 기능을 다음과 같이 더 명확하게 작성할 수 있습니다.
class Book {
constructor(title, author) {
this.title = title;
this.author = author;
}
}
const myBook = new Book("Amit", "Python");
console.log(myBook.title); // Amit
console.log(myBook.author); // Python두 방식 모두 결과적으로 동일한 구조의 객체를 생성하지만, 클래스 문법이 가독성과 유지보수 측면에서 더 유리합니다.