λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Language/Javascript

[Javascript]μžλ°”μŠ€ν¬λ¦½νŠΈ 초보자λ₯Ό μœ„ν•œ μžλ°”μŠ€ν¬λ¦½νŠΈ μžλ£Œν˜• κ°€μ΄λ“œ

by YJ Dev 2024. 6. 12.
728x90
λ°˜μ‘ν˜•
SMALL

μžλ°”μŠ€ν¬λ¦½νŠΈ μžλ£Œν˜•μ„ μ΄ν•΄ν•˜λŠ” 것은 μžλ°”μŠ€ν¬λ¦½νŠΈ ν”„λ‘œκ·Έλž˜λ°μ˜ 기초이자 ν•„μˆ˜μž…λ‹ˆλ‹€. 이 κΈ€μ—μ„œλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ‹€μ–‘ν•œ μžλ£Œν˜•μ„ κΈ°μ΄ˆλΆ€ν„° μ‹¬ν™”κΉŒμ§€ μžμ„Ένžˆ λ‹€λ£Ήλ‹ˆλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈ μžλ£Œν˜•


μžλ£Œν˜•μ˜ μ’…λ₯˜πŸ“š

  • κΈ°λ³Έ μžλ£Œν˜• (Primitive Types)
    • 숫자(Number): μ •μˆ˜μ™€ μ‹€μˆ˜λ₯Ό λͺ¨λ‘ ν¬ν•¨ν•©λ‹ˆλ‹€. ex) let age = 25;
    • λ¬Έμžμ—΄(String): λ¬Έμžμ—΄ 데이터λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€. ex) let name = "John";
    • λΆˆλ¦¬μ–Έ(Boolean): μ°Έ(true) λ˜λŠ” 거짓(false)을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. ex) let isStudent = true;
    • null: μ˜λ„μ μœΌλ‘œ 값이 μ—†μŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. ex) let car = null;
    • undefined: 값이 ν• λ‹Ήλ˜μ§€ μ•ŠμŒμ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. ex) let job;
    • 심볼(Symbol) (ES6): κ³ μœ ν•˜κ³  λ³€κ²½ λΆˆκ°€λŠ₯ν•œ 값을 μƒμ„±ν•©λ‹ˆλ‹€. ex) let sym = Symbol("id");
  • μ°Έμ‘° μžλ£Œν˜• (Reference Types)
    • 객체(Object): μ—¬λŸ¬ 값을 ν‚€-κ°’ 쌍으둜 μ €μž₯ν•©λ‹ˆλ‹€. ex) let person = { name: "John", age: 30 };
    • λ°°μ—΄(Array): μˆœμ„œκ°€ μžˆλŠ” 리슀트λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€. ex) let colors = ["red", "green", "blue"];
    • ν•¨μˆ˜(Function): μ½”λ“œλ₯Ό μΊ‘μŠν™”ν•˜κ³  ν˜ΈμΆœν•  수 μžˆλŠ” κ°μ²΄μž…λ‹ˆλ‹€. ex) function greet() { console.log("Hello!"); }
    • 기타: λ‚ μ§œ(Date), μ •κ·œ ν‘œν˜„μ‹(RegExp) λ“±

κΈ°λ³Έ μžλ£Œν˜• 상세 μ„€λͺ…πŸ”

μžλ°”μŠ€ν¬λ¦½νŠΈμ—λŠ” μ—¬μ„― 가지 κΈ°λ³Έ μžλ£Œν˜•(Primitive Types)이 μžˆμŠ΅λ‹ˆλ‹€. 이 μžλ£Œν˜•λ“€μ€ κ°’ 자체λ₯Ό λ‚˜νƒ€λ‚΄λ©°, λΆˆλ³€μ„±(Immutable)을 κ°€μ§‘λ‹ˆλ‹€. 각 μžλ£Œν˜•μ— λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

1. 숫자(Number)

  • μ •μ˜: μˆ«μžλŠ” μ •μˆ˜μ™€ μ‹€μˆ˜λ₯Ό ν¬ν•¨ν•œ λͺ¨λ“  숫자 값을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • νŠΉμ§•: μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μˆ«μžλŠ” λͺ¨λ‘ 64λΉ„νŠΈ 뢀동 μ†Œμˆ˜μ  ν˜•μ‹μž…λ‹ˆλ‹€.
  • 예제
let age = 25;
let price = 19.99;
  • μ£Όμ˜μ‚¬ν•­: NaN(Not a Number)κ³Ό Infinity 같은 νŠΉλ³„ν•œ 숫자 값도 ν¬ν•¨λ©λ‹ˆλ‹€.
let invalidNumber = NaN;
let infiniteNumber = Infinity;

2. λ¬Έμžμ—΄(String)

  • μ •μ˜: λ¬Έμžμ—΄μ€ ν…μŠ€νŠΈ 데이터λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • νŠΉμ§•: ν°λ”°μ˜΄ν‘œ(" "), μž‘μ€λ”°μ˜΄ν‘œ(' '), λ°±ν‹±(` `)으둜 λ¬Έμžμ—΄μ„ κ°μŒ€ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 예제
let name = "John";
let greeting = 'Hello, world!';
let multiline = `This is a
multiline string.`;
  • μ΄μŠ€μΌ€μ΄ν”„ μ‹œν€€μŠ€: λ¬Έμžμ—΄ λ‚΄μ—μ„œ 특수 문자λ₯Ό ν‘œν˜„ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.
    • \' : μž‘μ€λ”°μ˜΄ν‘œ
    • \" : ν°λ”°μ˜΄ν‘œ
    • \\ : λ°±μŠ¬λž˜μ‹œ
    • \n : μ€„λ°”κΏˆ
    • \t : νƒ­
  • 예제
let text = "She said, \"Hello!\"";
let path = "C:\\Users\\John";
let multilineText = "This is line 1.\nThis is line 2.";
  • μ£Όμ˜μ‚¬ν•­: λ°±ν‹±(` `)을 μ‚¬μš©ν•˜λ©΄ ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄μ„ 톡해 닀쀑 ν–‰ λ¬Έμžμ—΄κ³Ό λ¬Έμžμ—΄ 보간을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
let age = 25;
let message = `I am ${age} years old.`;

3. λΆˆλ¦¬μ–Έ(Boolean)

  • μ •μ˜: λΆˆλ¦¬μ–Έμ€ 논리적 μ°Έ(true)κ³Ό 거짓(false)을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • νŠΉμ§•: μ‘°κ±΄λ¬Έμ—μ„œ 주둜 μ‚¬μš©λ©λ‹ˆλ‹€.
  • 예제
let isStudent = true;
let isTeacher = false;

4. null

  • μ •μ˜: null은 값이 μ—†μŒμ„ λ‚˜νƒ€λ‚΄λŠ” μžλ£Œν˜•μž…λ‹ˆλ‹€.
  • νŠΉμ§•: μ˜λ„μ μœΌλ‘œ "λΉ„μ–΄ 있음"을 λ‚˜νƒ€λ‚Ό λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.
  • 예제
let car = null;

5. undefined

  • μ •μ˜: undefinedλŠ” 값이 ν• λ‹Ήλ˜μ§€ μ•Šμ€ λ³€μˆ˜λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • νŠΉμ§•: λ³€μˆ˜κ°€ μ„ μ–Έλ˜μ—ˆμ§€λ§Œ 값이 μ„€μ •λ˜μ§€ μ•Šμ€ μƒνƒœμž…λ‹ˆλ‹€.
  • 예제
let job;

6. 심볼(Symbol) (ES6)

  • μ •μ˜: 심볼은 κ³ μœ ν•˜κ³  λ³€κ²½ λΆˆκ°€λŠ₯ν•œ 값을 μƒμ„±ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • νŠΉμ§•: 주둜 객체의 μœ μΌν•œ 속성 ν‚€λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
  • 예제
let sym = Symbol("id");
let obj = { [sym]: 123 };

μ°Έμ‘° μžλ£Œν˜• 상세 μ„€λͺ…πŸ§©

μžλ°”μŠ€ν¬λ¦½νŠΈ μ°Έμ‘° μžλ£Œν˜•(Reference Types)은 객체(Object)와 λ°°μ—΄(Array), ν•¨μˆ˜(Function) λ“±μ˜ μžλ£Œν˜•μ„ ν¬ν•¨ν•˜λ©°, 값이 μ•„λ‹Œ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€. μ°Έμ‘° μžλ£Œν˜•μ€ κ°€λ³€μ„±(Mutability)을 κ°€μ§‘λ‹ˆλ‹€.

1. 객체(Object)

  • μ •μ˜: κ°μ²΄λŠ” μ—¬λŸ¬ 값을 ν‚€-κ°’ 쌍으둜 μ €μž₯ν•˜λŠ” 데이터 κ΅¬μ‘°μž…λ‹ˆλ‹€.
  • νŠΉμ§•: μ€‘κ΄„ν˜Έ { }λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒμ„±ν•©λ‹ˆλ‹€. ν‚€λŠ” λ¬Έμžμ—΄, 값은 λͺ¨λ“  μžλ£Œν˜•μ΄ 될 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 예제
let person = {
  name: "John",
  age: 30,
  isStudent: true
};
  • μ£Όμ˜μ‚¬ν•­: 객체의 속성에 μ ‘κ·Όν•˜λŠ” 방법은 점 ν‘œκΈ°λ²• . κ³Ό λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²• [ ]이 μžˆμŠ΅λ‹ˆλ‹€.
console.log(person.name); // John
console.log(person["age"]); // 30

2. λ°°μ—΄(Array)

  • μ •μ˜: 배열은 μˆœμ„œκ°€ μžˆλŠ” 리슀트λ₯Ό μ €μž₯ν•˜λŠ” 데이터 κ΅¬μ‘°μž…λ‹ˆλ‹€.
  • νŠΉμ§•: λŒ€κ΄„ν˜Έ [ ] λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒμ„±ν•˜λ©°, μΈλ±μŠ€λŠ” 0λΆ€ν„° μ‹œμž‘ν•©λ‹ˆλ‹€.
  • 예제
let colors = ["red", "green", "blue"];
  • μ£Όμ˜μ‚¬ν•­: λ°°μ—΄ λ©”μ„œλ“œλ₯Ό ν™œμš©ν•˜μ—¬ 데이터λ₯Ό μ‘°μž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
colors.push("yellow"); // ["red", "green", "blue", "yellow"]
let firstColor = colors.pop(); // "yellow", colorsλŠ” ["red", "green", "blue"]

3. ν•¨μˆ˜(Function)

  • μ •μ˜: ν•¨μˆ˜λŠ” νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” μ½”λ“œλ₯Ό μΊ‘μŠν™”ν•˜κ³  ν˜ΈμΆœν•  수 μžˆλŠ” κ°μ²΄μž…λ‹ˆλ‹€.
  • νŠΉμ§•: ν•¨μˆ˜ 선언식과 ν•¨μˆ˜ ν‘œν˜„μ‹μœΌλ‘œ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 예제
// ν•¨μˆ˜ 선언식
function greet() {
  console.log("Hello!");
}

// ν•¨μˆ˜ ν‘œν˜„μ‹
let greet = function() {
  console.log("Hello!");
};
  • μ£Όμ˜μ‚¬ν•­: ν•¨μˆ˜λŠ” 일급 객체둜, λ³€μˆ˜μ— ν• λ‹Ήν•˜κ±°λ‚˜ λ‹€λ₯Έ ν•¨μˆ˜μ˜ 인자둜 전달할 수 μžˆμŠ΅λ‹ˆλ‹€.
function executeFunc(func) {
  func();
}

executeFunc(greet); // "Hello!"

4. λ‚ μ§œ(Date)

  • μ •μ˜: μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λ‚ μ§œμ™€ μ‹œκ°„μ„ 닀루기 μœ„ν•΄μ„œλŠ” Date 객체λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
  • νŠΉμ§•: Date κ°μ²΄λŠ” λ‚ μ§œμ™€ μ‹œκ°„μ„ 기반으둜 λ‹€μ–‘ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.
  • 예제
// ν˜„μž¬ λ‚ μ§œμ™€ μ‹œκ°„
let now = new Date();
console.log(now);

// νŠΉμ • λ‚ μ§œμ™€ μ‹œκ°„
let specificDate = new Date('2023-12-31T23:59:59');
console.log(specificDate);

// 연도, μ›”(0-11), 일, μ‹œκ°„, λΆ„, 초, λ°€λ¦¬μ΄ˆ
let anotherDate = new Date(2023, 11, 31, 23, 59, 59, 999);
console.log(anotherDate);

5. μ •κ·œ ν‘œν˜„μ‹(Regular Expressions)

  • μ •μ˜: μ •κ·œ ν‘œν˜„μ‹μ€ λ¬Έμžμ—΄μ—μ„œ νŒ¨ν„΄μ„ μ°Ύκ³ , μΌμΉ˜μ‹œν‚€κ³ , μΉ˜ν™˜ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” κ°•λ ₯ν•œ λ„κ΅¬μž…λ‹ˆλ‹€.
  • νŠΉμ§•: μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” RegExp 객체와 μ •κ·œ ν‘œν˜„μ‹ λ¦¬ν„°λŸ΄μ„ μ‚¬μš©ν•˜μ—¬ μ •κ·œ ν‘œν˜„μ‹μ„ λ‹€λ£° 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 예제
  • λ¦¬ν„°λŸ΄ 방식
let regex = /pattern/flags;
  • RegExp 객체 μƒμ„±μž
let regex = new RegExp('pattern', 'flags');

μžλ£Œν˜• λ³€ν™˜πŸ”„

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” μžλ£Œν˜• λ³€ν™˜μ΄ 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. λ³€ν™˜ 방법은 λͺ…μ‹œμ  λ³€ν™˜(Explicit Conversion)κ³Ό μ•”μ‹œμ  λ³€ν™˜(Implicit Conversion)으둜 λ‚˜λ‰©λ‹ˆλ‹€.

λͺ…μ‹œμ  λ³€ν™˜

  • μ •μ˜: λͺ…μ‹œμ  λ³€ν™˜μ€ κ°œλ°œμžκ°€ μ˜λ„μ μœΌλ‘œ μžλ£Œν˜•μ„ λ³€ν™˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
  • 방법 및 예제
  • λ¬Έμžμ—΄λ‘œ λ³€ν™˜
let num = 123;
let str = String(num); // "123"
  • 숫자둜 λ³€ν™˜
let str = "123";
let num = Number(str); // 123
  • λΆˆλ¦¬μ–ΈμœΌλ‘œ λ³€ν™˜
let str = "Hello";
let bool = Boolean(str); // true

μ•”μ‹œμ  λ³€ν™˜

  • μ •μ˜: μ•”μ‹œμ  λ³€ν™˜μ€ μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μžλ™μœΌλ‘œ μžλ£Œν˜•μ„ λ³€ν™˜ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
  • 예제
let result = "5" + 2; // "52"
let result2 = "5" - 2; // 3
let result3 = 5 * "2"; // 10
  • μ£Όμ˜μ‚¬ν•­: μ•”μ‹œμ  λ³€ν™˜μ€ 예기치 μ•Šμ€ κ²°κ³Όλ₯Ό μ΄ˆλž˜ν•  수 μžˆμœΌλ―€λ‘œ μ£Όμ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€.

μžλ£Œν˜• 확인 λ°©λ²•πŸ”

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” μžλ£Œν˜•μ„ ν™•μΈν•˜λŠ” μ—¬λŸ¬ 가지 방법이 μžˆμŠ΅λ‹ˆλ‹€.

typeof μ—°μ‚°μž

  • μ •μ˜: λ³€μˆ˜μ˜ μžλ£Œν˜•μ„ λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€.
  • 예제
console.log(typeof 123); // "number"
console.log(typeof "Hello"); // "string"
console.log(typeof true); // "boolean"
console.log(typeof undefined); // "undefined"
console.log(typeof null); // "object" (λ²„κ·Έλ‘œ 인해 객체둜 λ°˜ν™˜)
console.log(typeof Symbol("id")); // "symbol"
console.log(typeof {}); // "object"
console.log(typeof []); // "object"
console.log(typeof function() {}); // "function"

instanceof μ—°μ‚°μž

  • μ •μ˜: 객체가 νŠΉμ • 클래슀의 μΈμŠ€ν„΄μŠ€μΈμ§€ ν™•μΈν•©λ‹ˆλ‹€.
  • 예제
let arr = [];
console.log(arr instanceof Array); // true
console.log(arr instanceof Object); // true

Object.prototype.toString.call()

  • μ •μ˜: 보닀 μ •ν™•ν•œ μžλ£Œν˜•μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.
  • 예제
console.log(Object.prototype.toString.call(123)); // "[object Number]"
console.log(Object.prototype.toString.call("Hello")); // "[object String]"
console.log(Object.prototype.toString.call(true)); // "[object Boolean]"
console.log(Object.prototype.toString.call(undefined)); // "[object Undefined]"
console.log(Object.prototype.toString.call(null)); // "[object Null]"
console.log(Object.prototype.toString.call(Symbol("id"))); // "[object Symbol]"
console.log(Object.prototype.toString.call({})); // "[object Object]"
console.log(Object.prototype.toString.call([])); // "[object Array]"
console.log(Object.prototype.toString.call(function() {})); // "[object Function]"

심화 λ‚΄μš©πŸ“˜

μžλ°”μŠ€ν¬λ¦½νŠΈ μžλ£Œν˜•μ— λŒ€ν•œ 심화 λ‚΄μš©μ„ 닀루어 λ³΄κ² μŠ΅λ‹ˆλ‹€.

λΆˆλ³€μ„±(immutability)κ³Ό κ°€λ³€μ„±(mutability)

  • μ •μ˜:
    • λΆˆλ³€μ„±: κΈ°λ³Έ μžλ£Œν˜•(μ›μ‹œ κ°’)은 λΆˆλ³€μ„±(Immutable)을 κ°€μ§‘λ‹ˆλ‹€.
    • κ°€λ³€μ„±: μ°Έμ‘° μžλ£Œν˜•μ€ κ°€λ³€μ„±(Mutable)을 κ°€μ§‘λ‹ˆλ‹€.
  • 예제
let str = "Hello";
str[0] = "h"; // λΆˆλ³€μ„±μœΌλ‘œ 인해 λ³€κ²½λ˜μ§€ μ•ŠμŒ
console.log(str); // "Hello"

let arr = [1, 2, 3];
arr[0] = 0; // κ°€λ³€μ„±μœΌλ‘œ 인해 변경됨
console.log(arr); // [0, 2, 3]

μ›μ‹œκ°’κ³Ό μ°Έμ‘°κ°’μ˜ 차이

  • μ •μ˜:
    • μ›μ‹œκ°’: κ°’ 자체λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
    • μ°Έμ‘°κ°’: λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
let a = 10;
let b = a;
a = 20;
console.log(b); // 10 (μ›μ‹œκ°’μ€ κ°’ 볡사)

let obj1 = { name: "John" };
let obj2 = obj1;
obj1.name = "Doe";
console.log(obj2.name); // "Doe" (참쑰값은 μ£Όμ†Œ 볡사)

ν΄λ‘œμ €(Closure)

  • μ •μ˜: ν΄λ‘œμ €λŠ” ν•¨μˆ˜μ™€ κ·Έ ν•¨μˆ˜κ°€ μ„ μ–Έλœ λ ‰μ‹œμ»¬ ν™˜κ²½μ˜ μ‘°ν•©μœΌλ‘œ, λ‚΄λΆ€ ν•¨μˆ˜μ—μ„œ μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 예제
function outer() {
  let counter = 0;
  function inner() {
    counter++;
    console.log(counter);
  }
  return inner;
}

const increment = outer();
increment(); // 1
increment(); // 2
increment(); // 3

핡심 λ‚΄μš©πŸ‘€

μžλ°”μŠ€ν¬λ¦½νŠΈ μžλ£Œν˜•

728x90
λ°˜μ‘ν˜•