[html] HTML5 웹 컴포넌트 커스터마이징
HTML5 웹 컴포넌트는 웹 애플리케이션에서 재사용 가능한 독립 모듈을 만들 수 있는 강력한 기능을 제공합니다. 이러한 컴포넌트들은 기능을 캡슐화하고, 코드의 유지보수성을 향상시키며, 개발 프로세스를 단순하게 만들어줍니다.
웹 컴포넌트의 기본
웹 컴포넌트는 HTML5의 템플릿, 사용자 정의 요소, 그리고 그룹화된 스타일과 스크립트로 구성됩니다.
템플릿
템플릿은 마크업과 스타일을 정의합니다. 템플릿 안에서 <slot>
요소를 사용하여 외부에서 제공되는 컨텐츠를 받을 수 있습니다.
<template id="custom-template">
<style>
/* 스타일 정의 */
</style>
<slot></slot>
</template>
사용자 정의 요소
사용자 정의 요소는 HTML 태그처럼 사용되지만, 개발자가 직접 정의한 요소입니다.
<script>
class CustomElement extends HTMLElement {
constructor() {
super();
const template = document.getElementById('custom-template').content;
const shadowRoot = this.attachShadow({ mode: 'open' });
shadowRoot.appendChild(template.cloneNode(true));
}
}
customElements.define('custom-element', CustomElement);
</script>
스타일과 스크립트
스타일과 스크립트는 사용자 정의 요소 안에서 사용되는 CSS와 JavaScript로, 특정 컴포넌트에만 적용됩니다.
웹 컴포넌트 커스터마이징
속성 정의
사용자 정의 요소에는 속성을 정의하여 동적으로 컴포넌트를 제어할 수 있습니다.
class CustomElement extends HTMLElement {
static get observedAttributes() {
return ['custom-attribute'];
}
// ...
}
속성 변경 감지
attributeChangedCallback
메서드를 사용하여 속성의 변경을 감지하고 이에 대한 작업을 수행할 수 있습니다.
class CustomElement extends HTMLElement {
// ...
attributeChangedCallback(name, oldValue, newValue) {
if (name === 'custom-attribute') {
// 속성 변경에 따른 로직 처리
}
}
}
이벤트 발생
컴포넌트 내부에서 발생하는 이벤트를 외부로 알리기 위해 CustomEvent
를 사용할 수 있습니다.
class CustomElement extends HTMLElement {
// ...
connectedCallback() {
this.dispatchEvent(new CustomEvent('custom-event', { detail: 'Event details' }));
}
}
마치며
HTML5 웹 컴포넌트를 활용하면 재사용 가능한 모듈을 만들고, 커스터마이징할 수 있는 강력한 기능을 활용할 수 있습니다. 컴포넌트들을 적절하게 커스터마이징하여 프로젝트의 요구에 맞게 활용해보세요.