본문 바로가기
내일배움 강의/강의-TypeScript 문법 종합반

3주차

by GREEN나무 2025. 1. 18.
728x90

기본 타입

- 1. boolean
    2가지의 상태를 표현 → `boolean`
    3가지 이상의 상태를 표현하고 싶은 경우 → `enum` or `string`
    ☑️ ex   

    function isValidPassword(password: string): boolean {
      return password.length >= 8;
    }
    
    const password = "q1w2e3r4!";
    const valid = isValidPassword(password);
    
    // 8자 이상의 문자열
    if (valid) {
      console.log("유효한 패스워드입니다!");
    } else {
      console.log("유효하지 않은 패스워드입니다!");
    }


- 2. number
    TypeScript에서는 number 타입이 정수, 실수 뿐 아니라 2, 8, 16진수까지 표현
    - 모든 수치 연산에 사용되는 값은 number 타입으로 명시.
    ☑️ ex - Math.PI * radius * radius와 같이 무리수와 정수를 곱한 값도 number로 취급  

    function calculateArea(radius: number): number {
      return Math.PI * radius * radius;
    }
    
    const radius = 5;
    const area = calculateArea(radius);
    console.log(`반지름이 ${radius}인 원의 넓이: ${area}`);

     
- 3.string
  - 작은 따옴표(’), 큰 따옴표(”), 백쿼트(`) 를 사용하여 문자열을 표현.
    ☑️ ex

    function greet(name: string): string {
      return `안녕, ${name}!`;
    }
    
    const name = "Spartan";
    const greeting = greet(name);
    console.log(greeting);


- 4. 배열
    `기본타입에 []가 붙은 형태`의 타입    
    ☑️ ex

    function calculateSum(numbers: number[]): number {
      let sum: number = 0;
      for (let i = 0; i < numbers.length; i++) {
        sum += numbers[i];
      }
      return sum;
    }
    
    const testScores: number[] = [90, 85, 78, 92, 88];
    const sumScore = calculateSum(testScores);
    console.log(`점수의 총합: ${sumScore}`);


    
- 5. 튜플(tuple)    
    - `튜플`은 서로 다른 타입의 원소를 순서에 맞게 가질 수 있는 특수한 형태의 배열.


    - 튜플과 배열의 차이    
      배열은 number[], string[] 처럼 동일한 타입의 원소만 가짐 .
        - `const testScores: number[] = [90, 85, 78, 92, “88”];`
            - 위의 코드처럼 마지막 원소를 string 타입으로 넣으면 에러가 발생.
      튜플은 어떤 타입의 원소를 허용할 것인지 정의만 해주면 됨.


    - 튜플은 정의된 데이터 타입의 개수와 순서에 맞추어 저장해야함.
    - 튜플에서도 배열의 메소드인 push를 사용하여 정의된 데이터 타입의 개수보다 더 저장할 수는 있으나 이렇게 데이터를 넣으면 튜플 구조가 내부적으로 변경이 되니 지양
            
    ☑️ ex - string, number, boolean이라는 3개의 각각 다른 타입의 데이터를 보관하게 정의.   

    const person: [string, number, boolean] = ['Spartan', 25, false];
    const person2: [string, number, boolean] = [25, 'Spartan', false]; // 오류!

     
- 6. enum
    - enum은 열거형 데이터 타입으로 명확하게 관련된 상수 값들을 그룹화 하고자 할 때 사용.

        (ex - 핼맷, 중절모자, 캡 중에 선택 )
    - 값의 수가 많고, 값들 사이의 관계가 뚜렷한 경우 사용 
    - 다양한 상수를 보다 더 이해하기 쉬운 문자열 이름으로 접근하고 사용할 수 있게 하는 타입.
    - enum 안에 있는 각 요소의 default값 : 숫자 0
    - enum 안에 있는 요소에는 `number` 혹은 `string`타입의 값만을 할당
    ☑️ ex   

    enum UserRole {
      ADMIN = "ADMIN",
      EDITOR = "EDITOR",
      USER = "USER",
    }
    
    enum UserLevel {
      NOT_OPERATOR, // 0
      OPERATOR // 1
    }
    
    function checkPermission(userRole: UserRole, userLevel: UserLevel): void {
      if (userLevel === UserLevel.NOT_OPERATOR) {
        console.log('당신은 일반 사용자 레벨이에요');
      } else {
        console.log('당신은 운영자 레벨이군요');
      } 
    
      if (userRole === UserRole.ADMIN) {
        console.log("당신은 어드민이군요");
      } else if (userRole === UserRole.EDITOR) {
        console.log("당신은 에디터에요");
      } else {
        console.log("당신은 사용자군요");
      }
    }
    
    const userRole: UserRole = UserRole.EDITOR;
    const userLevel: UserLevel = UserLevel.NOT_OPERATOR;
    checkPermission(userRole, userLevel);

    
- 7. const, readonly
 const와 readonly는 불변성을 보장

 - 7-1. let    
    - `let`키워드를 사용하여 값을 변경할 수 있는 변수선언    
    ☑️ ex   

    let num: number = 5;
    console.log(num);  // 출력: 5
    
    num = 10;
    console.log(num);  // 출력: 10


- 7-2. const       
    - `const`키워드를 사용하여 값을 변경할 수 없는 상수 선언
    ☑️ ex

    const num: number = 5;
    console.log(num);  // 출력: 5
    
    num = 10;  // 에러: 'num'은 const로 선언되었으므로 재할당 불가


    
- 7-3. readonly    
    - 클래스의 속성에 const 키워드를 사용할 수 없다(에러발생)
    - `readonly`는 TypeScript에서 객체의 속성을 불변으로 만드는 데 사용되는 키워드.
        클래스의 속성이나 인터페이스의 속성을 변경할 수 없게함
    ☑️ ex

    class Person { // 클래스는 다른 강의에서
      readonly name: string;
      readonly age: number;
    
      constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
      }
    }
    
    const person = new Person('Spartan', 30);
    
    console.log(person.name);  // 출력: 'Spartan'
    console.log(person.age);   // 출력: 30
    
    person.name = 'Jane';  // 에러: 'name'은 readonly 속성이라 재할당 불가
    person.age = 25;       // 에러: 'age'은 readonly 속성이라 재할당 불가

    
- 8. any와 unknown, union    
  - 일반적으로 가변적인 타입의 데이터 저장은 unknown
  - 가변적인 타입을 일일이 정의할 수 있다면 union

  - 8-1. any 타입
    - TypeScript에서 `any` 타입은 어떤 타입의 값이든 저장할 수 있는는 모든 타입의 슈퍼 타입.
    - any 타입은 코드의 안정성과 유지 보수성을 저해할 수 있어요. 가급적 지양
    - JavaScript의 `object` 타입과 같은 최상위 타입
    ☑️ ex

    let anything: any;
    anything = 5; // 최초에는 숫자
    anything = 'Hello'; // 문자열도 가능
    anything = { id: 1, name: 'John' }; // JSON도 가능

     
  - 8-2. unknown 타입
    - `unknown` 타입은 `any` 타입과 비슷한 역할(모든 타입의 값을 저장가능)을 하지만 다른 타입의 변수에 할당하려면 명시적으로 타입을 확인해야하기에 더 안전한 방식으로 동작함.
    - `stringValue = unknownValue as string;` 코드를 Type Assertion(타입 단언)이라고 합니다.
    
    ☑️ ex   

    let unknownValue: unknown = '나는 문자열이지롱!';
    console.log(unknownValue); // 나는 문자열이지롱!
    
    let stringValue: string;
    stringValue = unknownValue; // 에러 발생 - unknownValue가 string임이 보장되지 않음음
    stringValue = unknownValue as string;
    console.log(stringValue); // 나는 문자열이지롱!

    
    ☑️ ex - unkwown 타입의 변수를 다른 곳에서 사용하려면 타입 단언을 통해 타입 보장을 해야함.   

    let unknownValue: unknown = '나는 문자열이지롱!';
    let stringValue: string;
    
    if (typeof unknownValue === 'string') {
      stringValue = unknownValue;
      console.log('unknownValue는 문자열이네요~');
    } else {
      console.log('unknownValue는 문자열이 아니었습니다~');
    }

    - `typeof` 키워드를 이용하여 타입 체크를 미리한 후 unknown 타입의 변수를 string 타입의 변수에 할당할 수 있음

- 8-3. union    
    - unknown 타입은 재할당을 할 때 타입 체크가 되어서 안전함을 보장하나 재할당이 일어나지 않으면 타입 안전성이 보장이 되지 않음음 
    - `union` 은 여러 타입 중 하나를 가질 수 있는 변수를 선언할 때 사용됩니다
    - union은 `|` 연산자를 사용하여 여러 타입을 결합하여 표현.
    ☑️ ex   

    type StringOrNumber = string | number; // 원한다면 | boolean 이런식으로 타입 추가가 가능
    
    function processValue(value: StringOrNumber) {
      if (typeof value === 'string') { // value -> string 타입으로 간주
        console.log('String value:', value);
      } else if (typeof value === 'number') { // value -> number 타입으로 간주
        console.log('Number value:', value);
      }
    }
    
    processValue('Hello');
    processValue(42);


   
    



 

 

'내일배움 강의 > 강의-TypeScript 문법 종합반' 카테고리의 다른 글

4주차  (0) 2025.01.18
2주차  (0) 2025.01.17
nvm 설치  (0) 2025.01.17