[TypeScript] 변수와 스코프

변수 선언과 타입 지정

타입과 값 동시 선언

// student.ts
let studentName: string = "지민";
const studentScore: number = 95;

console.log(studentName); // "지민"
console.log(studentScore); // 95

선언 후 초기화

let courseCode: string;
console.log(courseCode); // undefined

courseCode = "CS101";
console.log(courseCode); // "CS101"

타입 추론

TypeScript는 초기값으로 타입을 자동 추론합니다.

let subject = "수학";
console.log(subject); // "수학"
// subject = 42; // 오류: number는 string에 할당 불가

선언 키워드: var, let, const

var: 함수 스코프와 호이스팅

function testScopeWithVar() {
  var points: number = 10;
  if (true) {
    var points: number = 20; // 재선언, 함수 전체에 영향
    console.log("블록 내:", points); // 20
  }
  console.log("함수 내:", points); // 20
}

testScopeWithVar();

let: 블록 스코프

function testScopeWithLet() {
  let grade: string = "A";
  if (true) {
    let grade: string = "B"; // 별도 변수
    console.log("블록 내:", grade); // "B"
  }
  console.log("함수 내:", grade); // "A"
}

testScopeWithLet();

const: 상수와 블록 스코프

재할당 불가, 초기화 필수

const MAX_USERS: number = 100;
console.log(MAX_USERS); // 100
// MAX_USERS = 200; // 오류: 상수 재할당 불가

스코프의 이해

전역 스코프

전역에서 선언된 변수는 어디서나 접근 가능

let appStatus: boolean = true;

function checkStatus() {
  console.log("앱 상태:", appStatus); // true
}

checkStatus();

지역 스코프

함수 내 변수는 외부 접근 불가

function calcTotal() {
  let totalPrice: number = 15000;
  console.log("총액:", totalPrice); // 15000
}

calcTotal();
// console.log(totalPrice); // 오류: 함수 외부 접근 불가

클래스 스코프

클래스 멤버는 접근 제어자로 범위 조정

class Product {
  private stock: number = 50;

  public updateStock(amount: number): void {
    this.stock += amount;
    console.log("재고:", this.stock);
  }
}

const prod = new Product();
prod.updateStock(10); // "재고: 60"
// console.log(prod.stock); // 오류: private 접근 불가

예제: 장바구니 담기

interface Item {
  name: string;
  price: number;
}

function manageCart() {
  const cartItems: Item[] = [];
  let itemCount: number = 0;

  function addItem(name: string, price: number) {
    const newItem: Item = { name, price };
    cartItems.push(newItem);
    itemCount++;
    console.log(`추가됨: ${name}, 총 개수: ${itemCount}`);
  }

  addItem("노트북", 1500000);
  addItem("마우스", 30000);
}

manageCart();

'TypeScript' 카테고리의 다른 글

[TypeScript] 문자열 다루기  (0) 2025.02.21
[TypeScript] 정밀한 숫자 처리  (0) 2025.02.21
[TypeScript] 데이터 타입 분석  (0) 2025.02.21
[TypeScript] 시작하기  (0) 2025.02.21
[TypeScript] 타입으로 강화된 JavaScript  (0) 2025.02.21