본문으로 바로가기
제품데스크톱 도구TASTECAD도면 확인TASTEFILES파일 관리TASTEFTP파일 전송TASTESSH원격 작업공간TASTEZIP압축과 해제개발 도구TASTECODERust 통합 개발 환경TASTESTUDIO통합 개발·테스트 환경TASTEETL데이터 통합(ETL)서버TASTEREMOTE원격 데스크톱 서버TASTEGEO공간정보 서버TASTEMAIL메일 작업공간시작하기다운로드문서구매모든 제품
마켓플레이스
소식
개발소식오늘의 개발 소식개발 문서프로그래밍 언어RustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDart프런트엔드 프레임워크Next.jsReactVue.js · NuxtSvelteKitAngular서버 프레임워크Spring BootDjangoFastAPIASP.NET CoreNestJS · Express앱 · 데스크톱 프레임워크TauriFlutterReact NativeElectron알고리즘알고리즘 기초알고리즘 핵심알고리즘 심화실무 알고리즘
커뮤니티프로젝트개발 로그프롬프트AI 도구 이슈쇼케이스커뮤니티 안내
협업기술 전수홈페이지 구축데스크톱 앱 구축릴리스·결제 파이프라인판매 파트너문의
서비스원격 데스크톱설치 패키지 커스텀
TASTEDEV
제품

데스크톱 도구

TASTECAD복잡한 도면을 가볍게 열다TASTEFILES필요한 파일만, 가장 빠르게TASTEFTP파일이 오가는 가장 단정한 길TASTESSH서버와 나 사이, 더 단단한 연결TASTEZIP더 빠르게 묶고, 더 안전하게 풀다

개발 도구

TASTECODERust 앱을 편집 · 빌드 · 디버깅 · 테스트까지 한 창에서TASTESTUDIO편집부터 원격 테스트와 승인 기반 AI 수정까지TASTEETL값을 보며 데이터를 옮깁니다

서버

TASTEREMOTE우리 회사 서버로 운영하는 원격 데스크톱TASTEGEOGeoServer 호환 공간정보 서버를 Rust로 다시 세웁니다TASTEMAIL메일의 주도권을 다시 내 손에

시작하기

다운로드모든 제품 최신 판문서제품 사용법구매구독 · 영구 라이선스모든 제품모든 제품 한눈에
모든 제품
마켓플레이스소식
개발

소식

오늘의 개발 소식언어 · 프레임워크 · GitHub · AI 공식 발표개발 문서언어 · 프레임워크 · 알고리즘 안내서

프로그래밍 언어

RustTypeScriptJavaScriptPythonGoC#JavaCC++KotlinDart

프레임워크

프런트엔드 프레임워크Next.jsReactVue.js · NuxtSvelteKitAngular
서버 프레임워크Spring BootDjangoFastAPIASP.NET CoreNestJS · Express
앱 · 데스크톱 프레임워크TauriFlutterReact NativeElectron

알고리즘

알고리즘 기초복잡도 분석 · 정렬 · 탐색 · 기본 자료구조 · 트리와 힙알고리즘 핵심그래프 탐색 · 최단 경로와 최소 신장 트리 · 동적 계획법 · 탐욕 알고리즘 · 분할 정복 · 백트래킹알고리즘 심화문자열 알고리즘 · 수학과 정수론 · 비트 연산 · 구간 트리 · 유니온 파인드실무 알고리즘코딩 면접 풀이 전략 · LRU 캐시 · 레이트 리미터 · 일관된 해시
개발 문서 전체 보기
커뮤니티
프로젝트빌더와 작업 발견개발 로그결정과 시행착오프롬프트재사용 가능한 지시AI 도구 이슈Claude · Codex · Gemini 문제와 우회법쇼케이스완성된 결과커뮤니티 안내공개하고 함께 만드는 방식
협업
기술 전수Rust·egui 네이티브 앱 만들기홈페이지 구축10개 언어, 계정, 문서·다운로드데스크톱 앱 구축Rust·egui, WebView 없이릴리스·결제 파이프라인서명 · MSI·deb·rpm·AppImage · 해시판매 파트너소개하고 결제액의 30% 받기문의구축 · 제휴 · 투자 문의
서비스
원격 데스크톱브라우저로 내 컴퓨터에 접속설치 패키지 커스텀필요한 기능만, 설정은 미리
구매
KO
한국어EnglishDeutschEspañolFrançaisItalianoPortuguês (Brasil)日本語简体中文繁體中文
로그인
로그인
TASTEDEV

작은 도구부터, 더 좋은 개발까지.

support@tastedev.netTASTEDEV 후원하기
제품제품군구매문서다운로드마켓플레이스고객 지원
커뮤니티프로젝트개발 로그프롬프트AI 도구 이슈쇼케이스
정책개인정보처리방침이용약관구독 약관환불 정책커뮤니티 운영 정책
계정로그인가입하기
방문자
오늘
012345678901234567890123456789012345678901234567890123456789
어제
012345678901234567890123456789012345678901234567890123456789
누적 조회
0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
상호
지엑스소프트
대표자
최영구
사업자등록번호
853-44-00368
주소
인천광역시 미추홀구 경인로 351 9층 V24
전화
+82-10-4404-1523
이메일
whitecalvin@tastedev.net
개인정보 보호책임자
최영구

© 2026 TASTEDEV제품 정보는 현재 검증된 개발 소스를 기준으로 합니다.출시·고도화 중

JavaScript 문서
JavaScript
시작하기기본 문법타입과 데이터모듈과 패키지오류 처리와 테스트핵심 개념: 비동기와 클로저
토론

JavaScript 안내서 · 2/6

기본 문법

이 장에서는 JavaScript 코드를 읽고 쓰는 데 매일 필요한 문법을 다룹니다. 변수 선언, 함수, 조건과 반복, 템플릿 리터럴, 그리고 현대 JavaScript에서 아주 자주 보이는 구조 분해와 전개 문법까지 차례로 살펴봅니다.

변수 선언: let, const, var

변수를 선언하는 키워드는 세 가지입니다. 새 코드에서는 기본으로 const를 쓰고, 값을 다시 대입해야 할 때만 let을 씁니다. var는 오래된 코드에서 볼 수 있지만 새로 쓸 이유는 거의 없습니다.

키워드다시 대입범위(scope)비고
const불가블록기본 선택
let가능블록값이 바뀌는 변수
var가능함수끌어올림(hoisting) 때문에 혼동이 잦음
const greeting = "안녕하세요";
let count = 0;
count += 1;

if (true) {
  let inside = "블록 안";
  var leaked = "함수 범위";
}
console.log(leaked); // "함수 범위" — var는 블록을 벗어납니다
// console.log(inside); // ReferenceError — let은 블록 안에서만 보입니다

const user = { name: "민수" };
user.name = "지은"; // 가능: const는 변수의 재대입만 막고, 객체 내용은 바꿀 수 있습니다

const가 객체를 "얼려 주지" 않는다는 점에 주의하세요. 객체 자체를 바꾸지 못하게 하려면 Object.freeze()를 써야 합니다.

함수와 화살표 함수

함수를 만드는 방법도 여러 가지입니다. 함수 선언은 파일 어디에서든 호출할 수 있고, 화살표 함수는 짧은 콜백을 쓸 때 특히 편합니다. 매개변수에는 기본값과 나머지 매개변수(...)를 쓸 수 있습니다.

// 함수 선언
function add(a, b) {
  return a + b;
}

// 화살표 함수: 본문이 식 하나면 중괄호와 return을 생략할 수 있습니다
const square = (x) => x * x;
const makeUser = (name) => ({ name, createdAt: Date.now() }); // 객체를 돌려줄 땐 괄호로 감쌉니다

// 기본값과 나머지 매개변수
function greet(name = "손님", ...tags) {
  return `${name}님 (${tags.join(", ")})`;
}

console.log(add(2, 3));             // 5
console.log(square(4));             // 16
console.log(greet());               // "손님님 ()"
console.log(greet("하나", "vip", "new")); // "하나님 (vip, new)"

화살표 함수는 자기만의 this를 갖지 않는다는 차이도 있습니다. 이 내용은 6장에서 자세히 다룹니다.

조건과 반복

비교에는 항상 ===와 !==를 쓰는 습관을 들이세요. ==는 비교 전에 타입을 바꾸기 때문에 0 == ""가 true가 되는 식의 예상치 못한 결과가 나옵니다.

const items = ["사과", "배", "포도"];

for (const item of items) {
  console.log(item); // 값을 하나씩
}

for (let i = 0; i < items.length; i += 1) {
  if (items[i] === "배") continue;
  console.log(i, items[i]);
}

const score = 82;
const grade = score >= 90 ? "A" : score >= 80 ? "B" : "C";

switch (grade) {
  case "A":
    console.log("훌륭합니다");
    break;
  case "B":
    console.log("좋습니다");
    break;
  default:
    console.log("조금 더 힘내세요");
}

// 값이 없을 수 있을 때: ?. 와 ??
const config = { server: { port: 0 } };
const port = config.server?.port ?? 3000; // 0 (??는 null/undefined일 때만 기본값)
const host = config.server?.host ?? "localhost";

for...of는 배열의 값을, for...in은 객체의 키를 돌며 꺼냅니다. 배열에는 for...of를 쓰는 것이 안전합니다. 기본값을 줄 때 || 대신 ??를 쓰면 0이나 빈 문자열 같은 정상 값이 덮어써지지 않습니다.

템플릿 리터럴

백틱으로 감싼 문자열 안에서는 ${...}로 식을 넣을 수 있고, 여러 줄도 그대로 쓸 수 있습니다.

const product = "키보드";
const price = 45000;

const message = `${product}의 가격은 ${price.toLocaleString("ko-KR")}원입니다.
배송비 포함 금액: ${(price + 3000).toLocaleString("ko-KR")}원`;

console.log(message);

구조 분해 할당

객체나 배열에서 필요한 값만 꺼내 변수로 만들 수 있습니다. 이름 바꾸기와 기본값도 함께 지정할 수 있고, 함수 매개변수에서도 그대로 쓸 수 있습니다.

const order = { id: 17, customer: "서연", items: ["펜", "노트"], memo: undefined };

const { id, customer: buyer, memo = "메모 없음" } = order;
console.log(id, buyer, memo); // 17 "서연" "메모 없음"

const [first, second] = order.items;
console.log(first, second); // "펜" "노트"

// 값 맞바꾸기
let a = 1;
let b = 2;
[a, b] = [b, a];

// 매개변수에서 구조 분해
function printOrder({ id, items }) {
  console.log(`#${id}: ${items.length}개`);
}
printOrder(order);

전개 문법(spread)

...를 배열이나 객체 앞에 붙이면 그 안의 요소를 펼칩니다. 원본을 바꾸지 않고 복사본을 만들거나 합칠 때 자주 씁니다. 다만 한 단계만 복사하는 얕은 복사라는 점을 기억하세요.

const base = [1, 2, 3];
const more = [...base, 4, 5]; // [1, 2, 3, 4, 5]

const defaults = { theme: "light", lang: "ko" };
const settings = { ...defaults, theme: "dark" }; // 뒤에 쓴 값이 이깁니다

console.log(Math.max(...base)); // 3

// 원본 객체는 그대로입니다
console.log(defaults.theme); // "light"

정리

  • 변수는 기본으로 const, 다시 대입할 때만 let을 쓰고 var는 피합니다.
  • 함수는 선언문과 화살표 함수를 상황에 맞게 쓰며, 기본값과 나머지 매개변수를 활용합니다.
  • 비교는 ===, 값이 없을 수 있으면 ?.와 ??를 씁니다.
  • 템플릿 리터럴, 구조 분해, 전개 문법은 현대 JavaScript 코드 곳곳에 등장하므로 손에 익혀 두면 좋습니다.
이 장에 대해 질문이 있나요?
이전 장시작하기다음 장타입과 데이터

댓글 0개

인기 댓글순최신순

로그인 · 로그인하면 댓글을 남길 수 있습니다.