프로그래머로의 여정

DOM 프로퍼티(Property)의 의미와 역할

nunaaa 2025. 6. 9. 01:23

DOM 프로퍼티(Property)의 의미와 역할

DOM에서 "프로퍼티(property)"는 JavaScript 객체로서의 DOM 요소가 가지는 속성들을 의미합니다. 이 개념을 여러 층위에서 자세히 설명드리겠습니다.

1. 프로퍼티의 기본 개념

DOM 프로퍼티는:

  • DOM 요소를 JavaScript 객체로 표현할 때 그 객체가 가지는 속성(attribute)
  • 객체 지향 프로그래밍에서의 객체 속성과 동일한 개념
  • 점 표기법(object.property)으로 접근 가능
// div 요소의 프로퍼티 접근 예시
const div = document.querySelector('div');
console.log(div.id); // 'id' 프로퍼티
console.log(div.className); // 'class' 프로퍼티

2. 프로퍼티 vs 어트리뷰트(Attribute)

주요 차이점

특성 프로퍼티 (Property) 어트리뷰트 (Attribute)
위치 JavaScript 객체 내부 HTML 태그 안에 명시
타입 JavaScript 타입 (boolean, number 등) 항상 문자열
동기화 특별한 경우만 연동 대부분 별개로 동작
대소문자 대소문자 구분 (camelCase) 대소문자 무시
예시 element.hidden = true <div hidden="true">

변환 예시

<input id="user" type="text" value="초기값" data-custom="123">
const input = document.getElementById('user');

// 어트리뷰트 → 프로퍼티 자동 변환
console.log(input.type); // "text" (문자열)
console.log(input.id); // "user" (문자열)

// 특수한 프로퍼티
console.log(input.value); // "초기값" (동기화되지만 별개로 관리됨)
input.value = "변경값"; // 프로퍼티 변경
console.log(input.getAttribute('value')); // "초기값" (어트리뷰트는 그대로)

// 데이터 프로퍼티
console.log(input.dataset.custom); // "123" (data-* 어트리뷰트 특수 변환)

3. DOM 프로퍼티의 종류

1. 표준 HTML 속성 프로퍼티

  • HTML 표준 속성들이 자동으로 프로퍼티로 변환
  • id, className, href, src
const link = document.querySelector('a');
console.log(link.href); // 전체 URL 문자열
console.log(link.title); // 툴팁 텍스트

2. 전역 프로퍼티

  • 모든 요소가 공통으로 가지는 프로퍼티
  • hidden, tabIndex, style
const div = document.querySelector('div');
div.hidden = true; // 요소 숨기기
div.tabIndex = 2; // 탭 순서 지정

3. 요소 종속 프로퍼티

  • 특정 요소 타입에만 존재하는 프로퍼티
  • <input>: value, checked
  • <img>: naturalWidth, complete
const checkbox = document.querySelector('input[type="checkbox"]');
console.log(checkbox.checked); // boolean 값

4. 메서드 형태의 프로퍼티

  • 함수로 실행되는 프로퍼티
  • focus(), blur(), click()
const btn = document.querySelector('button');
btn.click(); // 프로그래매틱 클릭 실행

4. 중요한 DOM 프로퍼티 예시

1. style 프로퍼티

element.style.backgroundColor = 'blue'; // camelCase 사용
// CSS: background-color → JavaScript: backgroundColor

2. classList 프로퍼티

div.classList.add('active');
div.classList.remove('inactive');
div.classList.toggle('highlight');

3. dataset 프로퍼티

<div data-user-id="123" data-role="admin"></div>
console.log(div.dataset.userId); // "123"
console.log(div.dataset.role); // "admin"

4. children vs childNodes

// 요소 노드만 포함 (HTMLCollection)
console.log(element.children); 

// 모든 노드 포함 (NodeList: 텍스트, 주석 등)
console.log(element.childNodes); 

5. 프로퍼티의 동적 특성

DOM 프로퍼티는 실시간으로 반영되는 동적 특성을 가집니다:

const img = document.querySelector('img');

// 프로퍼티 변경 시 즉시 반영
img.src = 'new-image.jpg'; // 이미지 즉시 변경

// 읽기 전용 프로퍼티도 존재
console.log(img.naturalWidth); // 로드된 이미지 실제 너비

6. 프로토타입 체인과 프로퍼티

모든 DOM 요소는 프로토타입 체인을 통해 프로퍼티를 상속받습니다:

const input = document.querySelector('input');

// 프로토타입 체인 확인
console.log(
  input instanceof HTMLInputElement, // true
  input instanceof HTMLElement,     // true
  input instanceof Element,         // true
  input instanceof Node             // true
);

7. 사용자 정의 프로퍼티 추가

DOM 요소에 사용자 정의 프로퍼티 추가 가능 (단, HTML 어트리뷰트와 혼동 주의):

const div = document.querySelector('div');

// 사용자 정의 프로퍼티
div.myCustomProp = { data: 123 };
console.log(div.myCustomProp); // {data: 123}

// 하지만 이 방법보다는 dataset 권장
div.dataset.customInfo = JSON.stringify({ data: 123 });

DOM 프로퍼티는 JavaScript가 HTML과 상호작용하는 핵심 매커니즘으로, 웹 개발에서 정확한 이해가 필수적입니다. 이 설명이 DOM 프로퍼티의 본질을 이해하는 데 도움이 되었기를 바랍니다!