웹 프로그래밍 1주차 학습일지

TypeScript란?

JavaScript에 정적 타입 시스템을 추가한 프로그래밍 언어입니다. : 타입명 문법을 통해 명시적으로 타입을 지정할 수 있어 개발 시 오류를 미리 잡아낼 수 있습니다.

기본 자료형

1. 원시 타입 (Primitive Types)

boolean: truefalse
number: 정수와 실수를 포함한 모든 숫자
string: 문자열 데이터
null: 의도적으로 값이 없음을 표현
undefined: 값이 할당되지 않은 상태
symbol: 고유하고 변경 불가능한 식별자
bigint: 큰 정수값 처리용

2. 객체 타입 (Object Types)

object: 원시 타입이 아닌 모든 값
array: 동일한 타입의 요소들로 구성된 배열
let numbers: number[] = [1, 2, 3];let strings: Array<string> = ["a", "b", "c"];
TypeScript
복사
tuple: 고정된 길이와 각 위치별 타입이 정해진 배열
let userInfo: [string, number] = ["김철수", 25];
TypeScript
복사

3. 특수 타입

any: 모든 타입 허용 (타입 검사 우회)
unknown: any보다 안전한 최상위 타입
void: 반환값이 없는 함수의 반환 타입
never: 절대 발생하지 않는 값의 타입

4. 고급 타입 시스템

타입 별칭: 기존 타입에 새로운 이름 부여
type Point = { x: number; y: number };
TypeScript
복사
인터페이스: 객체의 구조를 정의
interface Person { name: string; age: number;}
TypeScript
복사

5. 조합 타입

유니온(Union): 여러 타입 중 하나를 허용
let id: string | number;
TypeScript
복사
인터섹션(Intersection): 여러 타입을 모두 만족
type Employee = Person & { employeeId: number };
TypeScript
복사

타입 별칭 vs 인터페이스

구분
타입 별칭 (type)
인터페이스 (interface)
주요 용도
모든 타입에 이름 부여
객체 구조 정의
확장 방법
교차 타입(&) 사용
extends 키워드
선언 병합
불가능 (중복 시 오류)
가능 (자동으로 속성 합쳐짐)
적용 범위
원시/객체/유니온 모든 타입
객체 타입에 특화
// 타입 별칭 예시 type UserRole = "ADMIN" | "USER" | "GUEST"; type User = { id: number; name: string; role: UserRole; }; // 인터페이스 예시 interface Person { name: string; age: number; } interface Employee extends Person { employeeId: string; department: string; }
TypeScript
복사

클래스와 객체

클래스 정의

TypeScript의 클래스는 ES6 클래스 문법을 확장하여 타입 안정성을 제공합니다.
class User { // 생성자에서 접근 제어자로 속성 자동 선언 constructor( public name: string, public age: number, private role: string ) {} // 메서드 정의 introduce(): string { return `안녕하세요, ${this.name}입니다. ${this.age}살이고 ${this.role} 역할입니다.`; } // getter/setter get userRole(): string { return this.role; } } // 상속 예시 class AdminUser extends User { constructor(name: string, age: number) { super(name, age, "ADMIN"); } manageUsers(): string { return "사용자 관리 권한이 있습니다."; } } // 인터페이스 구현 interface Printable { print(): void; } class Document implements Printable { constructor(private content: string) {} print(): void { console.log(this.content); } }
TypeScript
복사

주요 특징

접근 제어자: public, private, protected
상속: extends 키워드로 클래스 확장
인터페이스 구현: implements 키워드
추상 클래스: abstract 키워드로 추상화 지원