Front-End/JavaScript

[JavaScript] 03. 데이터 νƒ€μž…_μ›μ‹œνƒ€μž…

Bigone17 2022. 1. 20. 16:56

좜처 : https://poiemaweb.com/js-data-type-variable

🟑 1. 데이터 νƒ€μž… (Data Type)

- 데이터 νƒ€μž…μ΄λž‘ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ°μ΄ν„°μ˜ μ’…λ₯˜λ₯Ό λ§ν•©λ‹ˆλ‹€. 데이터 νƒ€μž…μ΄ μžˆλŠ” μ΄μœ λŠ” 데이터(λ³€μˆ˜)κ°€ λ©”λͺ¨λ¦¬μ— μ €μž₯이 될 λ•Œ λ©”λͺ¨λ¦¬ 곡간을 μ–Όλ§ˆνΌ 확보λ₯Ό ν•΄μ•Ό ν•˜λŠ” 지λ₯Ό νŒλ‹¨ν•˜κΈ° μœ„ν•΄μ„œμž…λ‹ˆλ‹€. κ·ΈλŸ¬ν•˜μ—¬ ν•œμ •λœ λ©”λͺ¨λ¦¬ 곡간을 효율적으둜 μ‚¬μš©ν•  수 있게 λ©λ‹ˆλ‹€. μ‰½κ²Œ μ˜ˆμ‹œλ₯Ό λ“€λ©΄ 택배 창고에 택배듀이 λ“€μ–΄μ˜€λŠ”λ°, 창고의 곡간은 ν•œμ •λ˜μ–΄ 있기 λ•Œλ¬Έμ— λ§Žμ€ 택배λ₯Ό λ„£κΈ° μœ„ν•΄μ„œλŠ” 효율적으둜 택배λ₯Ό μŒ“μ•„μ•Ό ν•©λ‹ˆλ‹€. 그리고 λ‚˜μ€‘μ— 찾기도 μ‰¬μ›Œμ•Ό ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ λž™μ΄λΌλŠ” μ•„μ£Ό 큰 μ„œλžμž₯을 λ§Œλ“€μ–΄μ„œ 크기별, μ’…λ₯˜λ³„, 지역별 λ“±μœΌλ‘œ λ‚˜λˆ•λ‹ˆλ‹€. μ €λŸ° μ‹μœΌλ‘œ 차곑차곑 μŒ“μœΌλ©΄ λ§Žμ€ μ–‘μ˜ 택배λ₯Ό 보관할 수 있고, 찾기도 μ‰½κ²Œ 되겠죠. κ²°κ΅­ 데이터λ₯Ό 많이 잘 λ³΄κ΄€ν•˜κΈ° μœ„ν•΄μ„œ 데이터 νƒ€μž…μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

λž™

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 데이터 νƒ€μž…μ€ 크게 2가지 νƒ€μž…μœΌλ‘œ λ‚˜λ‰˜λŠ”λ° μ›μ‹œ νƒ€μž…(primitive type)κ³Ό 객체 νƒ€μž…(object type)으둜 ꡬ뢄 μ§€μ–΄μ§‘λ‹ˆλ‹€.

 

 

🟑 1.1 μ›μ‹œ νƒ€μž…

 - μ›μ‹œ νƒ€μž…μ€ 말 κ·ΈλŒ€λ‘œ μ›μ‹œμ μΈ νƒ€μž…μ„ λ§ν•˜λŠ”λ°, μ›μ‹œ νƒ€μž…μ˜ 값은 λ³€κ²½ λΆˆκ°€λŠ₯(immutable)ν•©λ‹ˆλ‹€.


 μ²˜μŒμ— appleμ΄λΌλŠ” λ³€μˆ˜μ— '사과'λΌλŠ” 값을 μ €μž₯을 ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έλ•Œ λ©”λͺ¨λ¦¬μ— '사과'κ°€ μ €μž₯이 되고 apple의 값은 사과가 λ©λ‹ˆλ‹€. κ·Έ 후에 apple에 'λ³΅μˆ­μ•„'λΌλŠ” 값을 λ„£κ²Œ 되면, λ©”λͺ¨λ¦¬μ— 있던 '사과'κ°€ 'λ³΅μˆ­μ•„'둜 λ³€ν•˜λŠ” 것이 μ•„λ‹ˆκ³  μƒˆλ‘­κ²Œ μ €μž₯이 λ©λ‹ˆλ‹€. 그리고 apple은 λ³΅μˆ­μ•„λ₯Ό κ°€λ¦¬ν‚€κ²Œ λ©λ‹ˆλ‹€. 즉, μ›μ‹œ νƒ€μž…μ˜ 값은 변경이 λΆˆκ°€λŠ₯ν•˜κ³ , 값을 μ§μ ‘μ μœΌλ‘œ κ°€λ¦¬ν‚€κ²Œ λ©λ‹ˆλ‹€. (값을 μ§μ ‘μ μœΌλ‘œ κ°€λ¦¬ν‚¨λ‹€λŠ” 말은 λ‹€μŒμž₯μ—μ„œ 객체 νƒ€μž… μ„€λͺ…ν•˜λ©΄μ„œ λ‹€μ‹œ μ„€λͺ…ν• κ²Œμš”~ 😊)

- μ›μ‹œ νƒ€μž…μ˜ μ’…λ₯˜μ—λŠ” 숫자 νƒ€μž…(number), λ¬Έμžμ—΄ νƒ€μž…(string), null, boolean, undefined, symbol이 μžˆμŠ΅λ‹ˆλ‹€.

 

🟣 1.1-1 숫자 νƒ€μž…(number)

  - κΈ°μ‘΄ ν”„λ‘œκ·Έλž˜λ° 언어듀은 숫자 νƒ€μž…μ„ int, long, float, double λ“±μœΌλ‘œ μ„ΈλΆ€μ μœΌλ‘œ ν‘œκΈ°ν–ˆμ§€λ§Œ, μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” numberνƒ€μž…μœΌλ‘œ ν‘œν˜„ν•©λ‹ˆλ‹€. 

let int = 10; // μ •μˆ˜
let float = 3.14; // μ‹€μˆ˜
let negative = -17; // 음의 μ •μˆ˜
let binary = 0b01000001; // 2μ§„μˆ˜
let octal = 0o101; // 8μ§„μˆ˜
let hex = 0x41; // 16μ§„μˆ˜

 - μœ„ μ˜ˆμ‹œλ₯Ό 보면 2μ§„μˆ˜, 8μ§„μˆ˜, 16μ§„μˆ˜λ₯Ό μ €μž₯ν•œ λ³€μˆ˜κ°€ μžˆλŠ”λ° μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„  10μ§„μˆ˜λ§Œ μ΄μš©μ„ ν•˜κ³  μžˆμ–΄μ„œ λ‹€λ₯Έ μ§„μˆ˜λ“€μ˜ 값을 10μ§„μˆ˜λ‘œ λ³€ν™˜ν•˜μ—¬ μ €μž₯ν•˜κ²Œ λ©λ‹ˆλ‹€.

console.log(`2μ§„μˆ˜ : ${binary}`); // 65
console.log(`8μ§„μˆ˜ : ${octal}`);  // 65
console.log(`16μ§„μˆ˜ : ${hex}`);    // 65

2μ§„μˆ˜, 8μ§„μˆ˜, 16μ§„μˆ˜λ₯Ό μ €μž₯ν•œ λ³€μˆ˜μ˜ κ°’ -> 10μ§„μˆ˜λ‘œ μžλ™ μ €μž₯

 

- numberμ—μ„œ νŠΉλ³„ν•œ 3가지 값이 μžˆμŠ΅λ‹ˆλ‹€. 

let a = 1 / 0;
console.log(a); // Infinity - μ–‘μ˜ λ¬΄ν•œλŒ€

let b = 1 / -0;
console.log(b); // -Infinity - 음의 λ¬΄ν•œλŒ€

let c = 1 * '문자';
console.log(c); // NaN - not a number

νŠΉλ³„ν•œ 숫자 ν‘œν˜„

 

 

🟣 1.1-2 문자 νƒ€μž… (string)

- ν…μŠ€νŠΈ 데이터λ₯Ό λ‚˜νƒ€λ‚Ό λ•Œ μ‚¬μš©ν•˜κ³ , μž‘μ€λ”°μ˜΄ν‘œ '' λ˜λŠ” 큰 λ”°μ˜΄ν‘œ "" μ•ˆμ— ν…μŠ€νŠΈλ₯Ό λ„£μ–΄μ„œ μƒμ„±ν•©λ‹ˆλ‹€. μΌλ°˜μ μœΌλ‘œλŠ” μž‘μ€λ”°μ˜΄ν‘œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. (λ¬Έμžμ—΄ ν‘œμ‹œλŠ” νšŒμ‚¬λ§ˆλ‹€ 차이가 μžˆλŠ” κ±° κ°™μ•„μš”.)

let str1 = 'λ¬Έμžμ—΄ μž…λ‹ˆλ‹€.'; // μž‘μ€ λ”°μ˜΄ν‘œ
console.log(typeof(str1)); //string

let str2 = "λ¬Έμžμ—΄2 μž…λ‹ˆλ‹€."; // 큰 λ”°μ˜΄ν‘œ
console.log(typeof(str2)); //string

let str3 = `λ¬Έμžμ—΄3 μž…λ‹ˆλ‹€.`; // λ°±ν‹±
console.log(typeof(str3)); //string

 

 

🟣 1.1-3 boolean

- boolean νƒ€μž…μ΄ 값은 true(μ°Έ), false(거짓) λΏμž…λ‹ˆλ‹€.

let a = true;
let b = false;
let c = 10 > 2; // true;
let d = 1 == 2; // false;


console.log(typeof(a)); // boolean
console.log(typeof(b)); // boolean
console.log(typeof(c)); // boolean
console.log(typeof(d)); // boolean

 - μ œμ–΄λ¬Έμ—μ„œ null, undefined, 0 은 false둜 κ°„μ£Όν•©λ‹ˆλ‹€.

let bool = '';
if(bool){
	console.log(1);
}

let bool2; //undefined
if(bool2){
	console.log(1);
}

let bool3 = 0; 
if(bool3){
	console.log(1);
}

// 아무것도 좜λ ₯λ˜μ§€ μ•ŠμŒ

 

 

🟣 1.1-4 undefined

- undefined νƒ€μž…μ˜ 값은 undefined ν•˜λ‚˜μž…λ‹ˆλ‹€. λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜κ³  값을 할당을 해주지 μ•ŠμœΌλ©΄, undefinedλΌλŠ” 값이 할당이 λ©λ‹ˆλ‹€. 

let un;
console.log(un) // undefined

 - λ§Œμ•½ κ°œλ°œμžκ°€ μ–΄λ– ν•œ λ³€μˆ˜μ— '값이 μ—†λ‹€' ν˜Ήμ€ 'λΉ„μ–΄μžˆλ‹€'라고 ν‘œν˜„μ„ ν•˜κ³  μ‹ΆμœΌλ©΄ undefinedλ₯Ό ν• λ‹Ήν•˜λŠ” 것이 μ•„λ‹Œ null 값을 ν• λ‹Ήν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€. κ·Έ μ΄μœ λŠ” undefinedλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„μ—μ„œ μžλ™μ μœΌλ‘œ 할당을 ν•˜λŠ” 것이고, 이λ₯Ό κ°œλ°œμžκ°€ μž„μ˜λ‘œ undefinedλ₯Ό ν• λ‹Ήν•˜κ²Œ λœλ‹€λ©΄ κ°œλ°œν•˜λŠ” λΆ€λΆ„μ—μ„œ ν˜Όλž€μ„ μ΄ˆλž˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

🟣 1.1-5 null

- null νƒ€μž…μ˜ 값은 null둜 μœ μΌν•©λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λ³„ν•˜λ―€λ‘œ null은 Null, NULL λ“±κ³Ό λ‹€λ₯΄λ‹€λŠ” 것을 μœ μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

let n = 'data';
n = null;
console.log(n) // null

- null은 κ°œλ°œμžκ°€ λ³€μˆ˜μ— μž„μ˜λ‘œ 값이 μ—†λ‹€λŠ” 것을 ν‘œμ‹œν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” νƒ€μž…μž…λ‹ˆλ‹€. κ²°κ΅­ λ³€μˆ˜μ— null 값을 ν• λ‹Ήν•œλ‹€λŠ” 것은 λ³€μˆ˜κ°€ 아무 값도 μ°Έμ‘°ν•˜κ³  μžˆλ‹€λŠ” 뜻이 되고, λ§Œμ•½ μ–΄λ– ν•œ λ³€μˆ˜λ„ κ·Έ 값을 μ°Έμ‘°ν•˜κ³  μžˆμ§€ μ•Šλ‹€λ©΄ 가비지 μ»¬λ ‰μ…˜μ΄λΌλŠ” μ²­μ†ŒλΆ€κ°€ λ©”λͺ¨λ¦¬μ—μ„œ κ·Έ 값을 μ œκ±°ν•©λ‹ˆλ‹€.

 

- ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•΄μ„œ μœ νš¨ν•œ 값이 μ—†λŠ” 경우 null 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

let element = document.getElementById('element');
// document.getElementByIdλŠ” htmlμ—μ„œ idλ₯Ό κΈ°μ€€μœΌλ‘œ μš”μ†Œλ₯Ό μ°Ύμ•„μ„œ λ°˜ν™˜ν•΄μ£ΌλŠ” ν•¨μˆ˜
// μš”μ†Œκ°€ μ—†λ‹€λ©΄ null을 λ°˜ν™˜
console.log(element); // null

 

- null 값을 ν†΅ν•΄μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 였λ₯˜λ₯Ό 찾을 수 μžˆλŠ”λ°, typeof ν•¨μˆ˜μ— null을 λ„£μœΌλ©΄ null이 μ•„λ‹Œ objectκ°€ λ‚˜μ˜΅λ‹ˆλ‹€. κ·Έλž˜μ„œ null νƒ€μž…μΈ 것을 ν™•μΈν•˜κ³  μ‹ΆμœΌλ©΄ ===(일치 μ—°μ‚°μž)λ₯Ό μ΄μš©ν•΄μ„œ 확인해야 ν•©λ‹ˆλ‹€.

console.log(typeof(null)) // object

let a = null;
console.log(null === a); // true

 

 

🟣 1.1-6 symbol

- symbol은 ES6에 μƒˆλ‘œ μΆ”κ°€λœ μ›μ‹œ νƒ€μž…μž…λ‹ˆλ‹€. 심볼은 μœ μΌν•œ μ‹λ³„μžλ₯Ό λ§Œλ“€κ³  싢을 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. λ‹€λ₯Έ λ§λ‘œλŠ” 객체의 ν”„λ‘œνΌν‹° ν‚€λ₯Ό κ³ μœ ν•˜κ²Œ 섀정을 ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. 
symbol νƒ€μž…μ€ Symbolν•¨μˆ˜λ₯Ό ν†΅ν•΄μ„œ μƒμ„±ν•©λ‹ˆλ‹€.

- Symbol ν•¨μˆ˜μ˜ 전달 μΈμžκ°€ 같더라도 μƒμ„±λ˜λŠ” 값은 같은 값이 μ•„λ‹™λ‹ˆλ‹€. (μƒˆλ‘œμš΄ symbol이 μƒμ„±λ˜κΈ° λ•Œλ¬Έμ—)

let sym1 = Symbol();
let sym2 = Symbol('apple');
let sym3 = Symbol('banana');
let sym4 = Symbol('banana');

console.log(sym1) // Symbol()
console.log(sym2) // Symbol(apple)
console.log(sym3) // Symbol(banana)
console.log(sym4) // Symbol(banana)

console.log(sym3 === sym4) // false

 

 - symbol νƒ€μž…μ„ μ“°λŠ” μ΄μœ λŠ” 객체의 ν”„λ‘œνΌν‹° ν‚€λ‘œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œμž…λ‹ˆλ‹€. 

let obj = {
	a : 'banana',
    c : 'cherry'
};

let b = Symbol('apple');

obj[b] = 'apple2';

console.log(obj); // {a: 'banana', c: 'cherry', Symbol(apple): 'apple2'}
console.log(obj[b]) // 'apple2'

 

 

 

πŸ“ μ •λ¦¬

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 데이터 νƒ€μž…μ€ μ›μ‹œ νƒ€μž…κ³Ό 객체 νƒ€μž…μœΌλ‘œ κ΅¬λΆ„λœλ‹€.
  • μ›μ‹œ νƒ€μž…μ—λŠ” number, string, boolean, null, undefined, symbol κ°€ μžˆλ‹€.
  • number은 λͺ¨λ“  숫자 (μ •μˆ˜, μ‹€μˆ˜, 음의 μ •μˆ˜, 2μ§„μˆ˜ λ“±)λ₯Ό ν‘œν˜„ν•  λ•Œ μ‚¬μš©λœλ‹€.
  • string은 λͺ¨λ“  ν…μŠ€νŠΈ 데이터λ₯Ό ν‘œν˜„ν•  λ•Œ μ‚¬μš©λœλ‹€.
  • boolean은 μ°Έ, 거짓을 ν‘œν˜„ν•  λ•Œ μ‚¬μš©λœλ‹€.
  • null은 λ³€μˆ˜μ˜ 값이 μ—†μŒμ„ ν‘œν˜„ν•  λ•Œ μ‚¬μš©λœλ‹€.
  • undefinedλŠ” λ³€μˆ˜κ°€ 선언은 λ˜μ—ˆμ§€λ§Œ, 값이 할당이 μ•ˆλμŒμ„ ν‘œν˜„ν•  λ•Œ μ‚¬μš©λœλ‹€.
  • symbol은 고유의 ν‚€λ₯Ό ν‘œν˜„ν•˜κ³  싢을 λ•Œ μ‚¬μš©λœλ‹€.

 

 

κΈ΄ κΈ€ μ½μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€ :) 
ν‹€λ¦° λ‚΄μš©μ΄ μžˆκ±°λ‚˜, 덧뢙일 λ‚΄μš©μ΄ μžˆλ‹€λ©΄ μ–Έμ œλ“ μ§€ λŒ“κΈ€ λ‹¬μ•„μ£Όμ„Έμš”!
제 글이 μ‘°κΈˆμ΄λ‚˜λ§ˆ μ½μœΌμ‹  λΆ„λ“€μ—κ²Œ 도움이 λ˜λ„λ‘ λ…Έλ ₯ν•˜κ² μŠ΅λ‹ˆλ‹€
λ‹€μŒ νŽΈμ— λ΄¬μš”~

 

728x90
λ°˜μ‘ν˜•