
명령형 프로그램의 개별 명령문, 명령 또는 함수 호출이 실행되거나 평가되는 순서입니다.
제어 흐름의 종류에는 5가지가 있습니다.
1. goto - 다른 구문에서 시작
2. choice - 일부 조건이 충족되는 경우에만 일련의 명령문 실행 (If-else, switch)
3. 어떤 조건이 충족될 때까지 일련의 명령문을 0회 이상 실행 (Collection loop, General loop)
4. 현재 실행 구문에서 떨어진 한 구문의 집합을 실행 (Loop continuation)
5. 프로그램 실행을 중단 (Loop early exit, 함수 실행 정지)
조건문은 일부 조건이 충족되는 경우에만 일련의 명령문을 실행합니다.
조건문의 종류로는 If ...else문 / switch문이 있습니다.
const score = 85;
if (score >= 90) {
console.log("A학점");
} else if (score >= 80) {
console.log("B학점"); // ← 이 줄이 실행됩니다
} else if (score >= 70) {
console.log("C학점");
} else {
console.log("F학점");
}
const day = 3;
switch (day) {
case 1:
console.log("월요일");
case 2:
console.log("화요일");
case 3:
console.log("수요일");
case 4:
console.log("목요일");
case 5:
console.log("금요일");
case 6:
console.log("토요일");
default:
console.log("일요일");
}
대부분의 프로그래밍 언어에는 일부 조건이 변경될 때까지 루프를 반복하는 구조가 있습니다.
let count = 1;
while (count <= 5) {
console.log(count); // 1, 2, 3, 4, 5
count++;
}
let count = 10;
do {
console.log(count); // 10 (조건이 false여도 1번은 실행됨)
count++;
} while (count <= 5);
특정 부분의 코드가 반복적으로 수행될 수 있도록 합니다.
언어별로 지원하는 형식이 다릅니다.
for (let i = 0; i < 5; i++) {
console.log(i); // 0, 1, 2, 3, 4
}
let i = 0) : loop 내에서 사용할 loop 변수를 초기화합니다.i < 5) : loop 내 코드 실행 전, 조건을 평가하여 loop를 지속할지 판단합니다.i++) : loop 내 코드 실행 후, 실행되는 문장입니다. (loop 변수 증강 용도)반복 가능한 객체를 통해 반복하는 루프를 만듭니다.
배열의 값을 하나씩 꺼내서 반복합니다.
const fruits = ["사과", "바나나", "딸기", "포도"];
for (const fruit of fruits) {
console.log(fruit);
// 사과
// 바나나
// 딸기
// 포도
}
객체의 열거속성을 통해 지정된 변수를 반복합니다.
객체의 키(key)를 하나씩 꺼내서 반복합니다.
const person = {
name: "Alice",
age: 25,
city: "Seoul"
};
for (const key in person) {
console.log(`${key}: ${person[key]}`);
// name: Alice
// age: 25
// city: Seoul
}
for (let i = 0; i < 10; i++) {
if (i === 5) break;
console.log(i); // 0, 1, 2, 3, 4
}
console.log("반복 종료");
for (let i = 0; i < 5; i++) {
if (i === 2) continue;
console.log(i); // 0, 1, 3, 4 (2는 건너뜀)
}
자바스크립트 언어에서 발생하는 Error Type입니다.
Web API 레벨에서 발생하는 Error Type입니다.
예외를 발생시킬 때 사용합니다.
예외가 발생하면,
1. 현재 함수의 실행이 중지
2. 에러 객체와 함께 에러가 throw
3. 제어흐름은
사용자가 직접 Error 객체를 정의하여 사용할 수 있습니다.
function enterClub(age) {
if (age < 19) {
throw new Error("미성년자는 입장할 수 없습니다.");
}
return "입장 가능합니다. 즐거운 시간 되세요! ";
}
try {
console.log(enterClub(15));
} catch (e) {
console.log("알림: " + e.message);
}
예외가 발생하면,
1. 현재 함수의 실행이 중지
2. 에러객체와 함께 에러가 throw
3. 제어흐름은
에러를 catch하여 프로그램이 종료되지 않도록 해야합니다.
예외 처리를 담당하는 핸들러를 찾기 위해, 순서대로 콜 스택을 거슬러 올라가 올바른 핸들러를 찾아내어 그곳에서 처리되도록 합니다.
스택 자료구조
call stack
에러 throw되면
try...catch 문은 블록문 내에서 예외가 발생한 경우, 예외 처리를 맡을 하나 이상의 반응 명령문을 지정합니다.
finally 블록은 try 블록에서 예외 상황이 발생하지 않더라고, 실행합니다.
function readFile(filename) {
let file = null;
try {
file = openFile(filename); // 에러가 날 수 있음
return processFile(file);
} catch (error) {
console.log("파일 처리 실패:", error.message);
} finally {
if (file) closeFile(file); // 에러 여부와 관계없이 파일을 반드시 닫음
console.log("항상 실행됩니다");
}
}
객체는 속성을 가진 독립적인 개체 (entity)입니다.
자바스크립트는 객체기반의 프로그래밍언어 입니다.
const person = {
name: "Alice",
age: 25,
job: "개발자",
};
속성은 키와 값 사이의 연결관계입니다.
console.log(person.name); // "Alice"
console.log(person.age); // 25
console.log(person["name"]); // "Alice"
// 변수로 키를 동적으로 접근할 때 유용
const key = "age";
console.log(person[key]); // 25
가장 직관적이고 흔히 사용되는 방식입니다. 중괄호 {}를 사용하여 프로퍼티를 직접 나열합니다.
const user = {
name: "Gemini",
greet: function() { console.log("안녕!"); }
};
new 연산자와 함께 함수를 호출하여 동일한 구조의 객체를 여러 개 생성할 때 유용합니다.
function Person(name) {
this.name = name;
this.sayHello = () => console.log(`난 ${this.name}이야.`);
}
const person1 = new Person("철수"); // 인스턴스 생성
지정된 객체를 프로토타입으로 가지는 새로운 객체를 만듭니다. 상속을 구현할 때 주로 사용합니다.
const proto = { concept: "상속 예제" };
const child = Object.create(proto); // proto를 부모로 삼는 객체 생성
console.log(child.concept); // "상속 예제"
객체는 원시타입과 다르게 변경 가능한 값입니다.
객체는 전달하는 과정에서 참조형태로 전달됩니다.
객체에 존재하지 않는 속성을 참조하고 할당문을 통해 값을 할당하면 동적으로 생성되고 추가됩니다.
객체의 속성을 나열하는 3가지 방법
delete 연산자로 속성을 삭제합니다.
객체 참조 타입 : 모든 연산이 참조값(메모리 주소)로 처리됩니다.
객체를 서로 비교하면
객체의 최상위 수준만 복사합니다. 내부의 중첩된 객체는 복사되지 않고 주소값(참조)만 공유하므로, 원본을 변경하면 복사본도 영향을 받을 수 있습니다.
const original = { a: 1, b: { c: 2 } };
const shallow = Object.assign({}, original); // 얕은 복사
shallow.b.c = 99; // 복사본의 내부 값을 바꿨는데...
console.log(original.b.c); // 99 (원본도 같이 변함!)
객체의 내부 값까지 전부 다 새로 복사합니다. 원본과 복사본이 메모리상에서 완전히 독립된 남남이 되므로 서로 영향을 주지 않습니다.
const original = { a: 1, b: { c: 2 } };
const deep = structuredClone(original); // 깊은 복사 (최신 표준 방식)
deep.b.c = 99; // 복사본의 내부 값을 바꿔도...
console.log(original.b.c); // 2 (원본은 그대로 유지됨!)
객체는 아래와 같이 분류할 수 있다.
숫자 타입 변환 및 상태를 확인하는 도구입니다.
Number('1.2')와 같이 문자열을 숫자로 바꿀 때 사용합니다.Number.isNaN(), Number.isInteger() 등으로 숫자의 상태를 체크합니다.숫자.toFixed()로 소수점 자리를 제어하거나, toLocaleString()으로 콤마를 찍습니다.수학적인 계산과 상수를 제공하는 전용 도구입니다.
Math.PI를 통해 원주율(3.1415...) 값을 바로 가져올 수 있습니다.abs(절대값), pow(거듭제곱), sqrt(제곱근) 등을 지원합니다.ceil(올림), floor(내림), round(반올림) 기능을 제공합니다.max/min으로 최대/최소를 찾고, random으로 0~1 사이의 난수를 생성합니다.new Math()와 같은 방식으로는 사용할 수 없습니다.날짜와 시간을 다루는 빌트인 객체입니다.
new Date(): 호출 직후의 현재 날짜와 시간을 생성합니다.Date.now(): 현재 시간을 밀리초 단위의 숫자(타임스탬프)로 반환합니다.getFullYear(), getMonth() (0~11 주의), getDate()getHours(), getMinutes(), getSeconds()getDay() (0:일요일 ~ 6:토요일)setFullYear(), setMonth(), setDate() 등으로 특정 시점 수정이 가능합니다.toString(): 전체 날짜/시간 정보를 문자열로 반환합니다.toDateString(): 날짜 부분만 사람이 읽기 편한 형태로 반환합니다.toLocaleString(): 현지 국가 설정에 맞게 날짜와 시간을 변환합니다.getUTCDate() 등)도 별도로 제공합니다.텍스트 데이터를 표현하고 저장하는 데이터 타입입니다.
""), 따옴표('') 사용`)을 사용하여 줄바꿈이나 변수 삽입 가능new String()으로 생성 가능\n 등을 사용하여 문자열 내 줄바꿈 등이 가능합니다.JSON.stringify()를 통해 문자열로 변환하여 저장하기 유용합니다.문자열을 다루기 위한 다양한 속성과 메서드를 제공하는 래퍼 객체입니다.
fromCharCode, fromCodePoint, raw 등length (문자열의 길이를 반환합니다.)at(), charAt()indexOf(), search()includes(), startsWith(), endsWith()toLowerCase(), toUpperCase()replace(), replaceAll()padEnd(), padStart(), repeat(), concat()slice(), substring(), split()trim(), trimStart(), trimEnd().)를 찍으면 String 객체의 메서드를 바로 사용할 수 있습니다.문자열에서 특정 문자 조합을 찾기 위한 패턴(정규식)입니다.
/pattern/flags 형태로 작성합니다. (예: /\w+\s/g)g: 전체 탐색, i: 대소문자 무시, m: 다중행 탐색 등)정규 표현식을 다루는 자바스크립트의 내장 객체입니다.
/패턴/플래그 (정규식이 변하지 않을 때 권장, 평가 시 컴파일됨)new RegExp('패턴', '플래그') (패턴이 동적으로 변할 때 사용, 런타임 시 컴파일됨)lastIndex: 다음 매칭을 시작할 인덱스 위치를 나타냅니다.flags, global, ignoreCase 등: 설정된 플래그 정보를 반환합니다.test(): 패턴이 일치하는지 확인하여 true/false를 반환합니다.exec(): 일치하는 정보를 배열로 반환하거나 없으면 null을 반환합니다.문자열 메서드 중 "찾는" 과정이 포함된 경우 정규식을 활용할 수 있습니다.
match(정규식), matchAll(정규식)search(정규식)replace(정규식), replaceAll(정규식)split(정규식)데이터 항목들의 그룹을 의미하며, 상황에 맞는 효율적인 데이터 처리를 위해 사용됩니다.
List, Set, Tree, Graph 등이 포함됩니다.List와 비슷한 객체이며, 순회와 변형 작업을 수행하는 다양한 method를 가집니다.length)와 각 요소의 데이터 타입은 고정되어 있지 않습니다.undefined를 포함한 빈 값을 가질 수 있습니다.[]를 사용합니다.new Array(length) 또는 new Array(element0, element1, ...)at(), indexOf(), includes(), find(), findIndex()every(), some()push(), pop(), unshift(), shift()map(), filter(), slice(), splice(), fill()concat(), reverse(), sort(), flat()join(), toString()reduce()set(key, value), get(key)has(key), delete(key), clear()size 속성 사용size 확인이나 순회(forEach 등)가 불가능합니다.add(value), delete(value), clear()has(value)size 속성 사용size 확인이나 순회가 불가능합니다.데이터를 저장하거나 전송할 때 사용하는 경량의 데이터 교환 형식입니다.
"" 사용)JSON.stringify(obj): JavaScript 객체를 JSON 문자열로 변환합니다. (직렬화)JSON.parse(jsonText): JSON 문자열을 JavaScript 객체로 변환합니다. (역직렬화)undefined, 심볼 등은 JSON으로 변환될 때 생략되거나 null로 처리됩니다.각 국가나 언어에 맞는 형식(날짜, 숫자, 통화 등)을 제공하는 국제화 API입니다.
Intl.DateTimeFormat(): 언어에 맞는 날짜와 시간 형식을 생성합니다.Intl.NumberFormat(): 언어에 맞는 숫자, 통화, 퍼센트 형식을 생성합니다.Intl.Collator(): 언어별 특성에 맞는 문자열 비교 및 정렬 기능을 제공합니다.Intl.RelativeTimeFormat(): "3일 전", "내일"과 같은 상대적 시간 표현을 생성합니다.자바스크립트는 프로토타입 기반 언어이며, 모든 객체는 자신의 부모 역할을 하는 '프로토타입' 객체와 연결되어 있습니다.
new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수입니다.함수.prototype: 생성자 함수가 가진 설계도 공간입니다.객체.__proto__: 생성된 객체가 자신의 부모 설계도를 참조하는 링크입니다.객체의 속성을 찾을 때 해당 객체에 없으면 부모 프로토타입을 타고 올라가며 찾는 과정을 말합니다.
__proto__를 따라 상위 프로토타입을 계속 검색합니다.Object.prototype이며, 여기서도 못 찾으면 null을 반환합니다.인스턴스 -> 생성자.prototype -> Object.prototype -> null 순으로 거슬러 올라갑니다.프로토타입 기반의 상속을 더 쉽고 명확하게 사용하기 위해 도입된 '문법적 설탕(Syntactic Sugar)'입니다.
class 키워드를 사용하며, 객체를 초기화하는 constructor() 메서드를 가집니다.static 키워드를 붙이며, 인스턴스 없이 클래스 이름으로 직접 호출합니다.extends: 부모 클래스의 기능을 물려받을 때 사용합니다.super(): 부모 클래스의 생성자를 호출하여 부모의 속성을 자식에게 전달합니다.this는 함수가 호출되는 방식에 따라 결정되는 "누가 나를 불렀는가"를 나타내는 예약어입니다.
this가 동적으로 변합니다. (단독 호출 시 전역 객체)this를 가지지 않습니다. 함수가 선언된 위치의 상위 스코프 this를 그대로 물려받습니다(Lexical this).new 연산자로 생성자 함수로 쓸 수 없으며, arguments 객체도 가지지 않습니다.변수에 접근할 수 있는 "유효 범위"를 말합니다.
var 키워드 특징){}로 둘러싸인 영역 안에서만 유효합니다. (let, const 키워드 특징)함수가 선언될 당시의 외부 환경(Lexical Environment)을 기억하여, 함수가 외부에서 호출되어도 그 환경에 접근할 수 있는 현상입니다.
자바스크립트 코드가 실행되기 위해 필요한 환경 정보를 담은 객체입니다.
this가 가리키는 객체.