Attribute vs Property

attribute 와 property λͺ¨λ‘ μš”μ†Œμ˜ 속성을 가리킬 λ•Œ μ‚¬μš©λ˜λŠ” ν‚€μ›Œλ“œμ΄λ‹€. μ–΄λ–€ 차이점이 μžˆλŠ”μ§€ μ‚΄νŽ΄λ³΄μž.

Attribute

λ¨Όμ € attributeλŠ” HTML μš”μ†Œμ˜ 좔가적인 정보λ₯Ό λ§ν•œλ‹€. react μ—μ„œ μ»΄ν¬λ„ŒνŠΈμ˜ props λ₯Ό μ •μ˜ν•  λ•Œ 기본으둜 μžˆλŠ” HTML μš”μ†Œμ˜ props λ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜κ³  μ‹Άλ‹€

type TInput = React.InputHTMLAttributes<HTMLInputElement> & {
  setValue: Dispatch<SetStateAction<string>>;
};

이런 μ‹μœΌλ‘œ ...HTMLAttributes λ₯Ό μ‚¬μš©ν•˜λŠ”λ° 이것이 λ°”λ‘œ HTML 의 속성 κ·ΈλŒ€λ‘œ 상속 λ°›κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” 것이닀.

Property

propertyλŠ” DOMμ—μ„œ μ‚¬μš©λ˜λŠ” 동적인 ν‘œν˜„μ΄λ‹€. HTML λ¬Έμ„œ μ•ˆμ—μ„œλŠ” μ •μ μœΌλ‘œ attribute둜 λΆˆλ¦¬μ§€λ§Œ, DOM μ•ˆμ—μ„œλŠ” 동적인 property둜 λΆˆλ¦¬λŠ” 것이닀.

즉, 같은 className 이 HTML λ¬Έμ„œ μ•ˆμ—μ„œλŠ” attribute, DOM μ•ˆμ—μ„œλŠ” property 둜 λΆˆλ¦¬λŠ” 것이닀.

input μ»΄ν¬λ„ŒνŠΈκ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ³΄μž.

<input value="0"/>

const input = document.querySelector('input');
console.log(input.value); // 0
input.value = 10;
console.log(input.value); // 10 -> html λ¬Έμ„œμ—μ„œλŠ” 0 κ·ΈλŒ€λ‘œ

μœ„ μ˜ˆμ‹œλ₯Ό 보면 졜초 μ„€μ •ν•œ value 값이 10으둜 λ³€κ²½λœ 것을 λ³Ό 수 μžˆλ‹€. ν•˜μ§€λ§Œ μ‹€μ œ html νƒœκ·Έμ—μ„œλŠ” value 값은 0이닀. property 값이 λ³€κ²½λ˜μ–΄λ„ DOM 객체만 λ°”λ€Œκ³ , HTML 은 μ—…λ°μ΄νŠΈκ°€ λ˜μ§€ μ•Šμ•„ μ›λž˜μ˜ 0 이 κ·ΈλŒ€λ‘œ μœ μ§€λ˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

μΆ”κ°€μ μœΌλ‘œ, μ›λž˜ HTML μš”μ†Œμ— μ—†λŠ” 속성을 μ‚½μž… μ‹œ, μž„μ˜λ‘œ μ§€μ •ν•œ 속성이 λͺ¨λ‘ property둜 ν‘œν˜„λ˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ μ΄λ ‡κ²Œ μž„μ˜λ‘œ μ •μ˜ν•œ 속성에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ getAttribute λΌλŠ” λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

console.log(input.getAttribute('test'));

Last updated