새소식

기술 습관/Javascript

[프로그래머스] 타입스크립트로 함께하는 웹 풀 사이클 개발 11-2

  • -

타입스크립트

  • 자바스크립트 코드가 너무 지저분
  • 코드의 스케일이 커지면서 코드관리가 되지 않는다.
  • JS 기반보다 버그를 줄일 수 있다
  • 유지보수가 쉽다
  • 강력한 높은 퀄리티의 코드 생산 가능
  • 자바스크립트 + 타입 체크
  • 타입스크립트 환경에 자바스크립트를 코딩하면 동작

// JS function plus(a,b) { return a+b; } console.log(plus(3,5)); // TS function plus(a : number,b : number) { return a+b; } console.log(plus(3,5));
  • 컴파일 타임시 오류 체크

  • 타입 스크립트를 자바스크립트로 컴파일하는 과정 필요

환경 설정

  • VSCode 설치 후 타입스크립트 설치Typescript 설치 및 컴파일 방법npm i -g typescript 전역 설치
    tsc 명령어 사용
    tsc [파일이름] 입력시 컴파일 진행 -> 동일한 이름의 js파일이 생성됨
  • 매번 실행하기 귀찮지 않나.
    • tsc -w : watch. 해당 파일이 변화하는지 계속 감시하며 수정될 때마다 자동으로 컴파일되도록 설정
    • eg) tsc -w app.tsTypescript의 설정 초기값을 세팅해보자tsc --init : ts파일의 기본 설정값들이 설치된다 (tsconfig.json)

데이터타입과 추론

  • 기본 데이터타입 / 객체타입 / 특수타입
  • 기본 데이터타입
    • number : 숫자 타입. 정수와 실수 모두 포함
    • string : 문자열 타입
    • boolean : 참 거짓
    • null : 값이 없음을 나타내는 타입(참조하는 메모리 주소값이 없음을 의미. 능동적)
    • undefined : 값이 할당되지 않는 변수의 기본값인 타입(수동적. 아무값도 리턴하지 않을 경우 undefined가 리턴됨. C의 return 0와 동일)
  • 객체 타입
    • object : 객체
    • array : 동일한 타입의 요소를 가진 배열을 나타내는 타입(객체로 지원)
    • tuple : 각 요소가 다른 타입을 가질 수 있는 배열을 나타내는 타입 (잘 안씀)
  • 특수 타입
    • any : 어떠한 타입이든 할당될 수 있는 타입 (JS의 var와 비슷. 모호할 경우에 임시로 쓰이게 됨)
    • unknown : 타입을 미리 알 수 없는 경우 사용되는 타입. any와 비슷

타입스크립트 타입 명시

  • 변수 선언 시 변수값의 타입을 명시함으로써 변수의 데이터타입을 지정
let x:string = '나는 문자열이다.'; // int x 정의방식과 유사
  • 정의 시 데이터타입과 다른 타입이 재정의될 경우 Syntax 에러 발생
// TS function plus(a : number,b : number):number { // 함수의 리턴값 데이터타입 명시 가능 return a+b; // 리턴값이 number이게 됨 } console.log(plus(3,5)); // 더 복잡한 값 반환 디테일하게 설정 function getInfo(id: number) : { stdId : number; stdName : string; age: number; gender: string; course: string; completed: boolean; } { return null; }

인터페이스

interface Student { stdId : number; stdName? : string; age?: number; // 선택적 프로퍼티 gender?: string; course?: string; completed?: boolean; // setName(name: string) : void; 아래와 동일 setName? : (name: string) => void; getName? : () => string; } function getInfo(id: number) : Student { return { stdId : id; stdName : 'eom'; age: 20; gender: 'female'; course: 'typescript'; completed: false; }; } console.log(getInfo(5678)); function plus(a : number,b? : number):number { //b가 선택적 매개변수 return a+b; } function setInfo(student : Student) : void { // 인터페이스 재사용 console.log(student); } let std = { stdId : 93, stdName : 'eom', age: 20, gender: 'female', course: 'typescript', completed: false }; setInfo(std); // 인터페이스 클래스로 상속 class MyStudent implements Student { stdId = 93; stdName = 'eom'; age= 20; gender= 'female'; course= 'typescript'; completed= false; setName(name: string) :void { this.stdName = name; console.log('이름 설정 : ' + this.stdName); } } const myInstance = new MyStudent(); myInstance.setName('앨리스');
  • 인터페이스는 string이나 number타입처럼 데이터 타입으로 사용 가능
  • 선택적 프로퍼티로 지정하려면 속성값 뒤 ? 붙이기
  • 메서드도 인터페이스 내에서 선언 가능
  • 인터페이스를 클래스에 상속 가능

열거형

interface Student { stdId : number; stdName? : string; age?: number; // 선택적 프로퍼티 // gender?: string; // Female Male 두가지밖에 없음. // 값을 보장하기 위한 방법 1. 열거형(enum)으로 제한 두기 gender? : enum; course?: string; completed?: boolean; // setName(name: string) : void; 아래와 동일 setName? : (name: string) => void; getName? : () => string; } // 열거형 : 사용자 정의 타입 enum GenderType { Male, Female } class MyStudent implements Student { stdId = 93; stdName = 'eom'; age= 20; gender= GenderType.Female; // string이 아닌 enum으로 받도록 변경 course= 'typescript'; completed= false; setName(name: string) :void { this.stdName = name; console.log('이름 설정 : ' + this.stdName); } }

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.