TypeScriptSTUDY _ 2장 . 타입 [ 2.1 타입이란 ]

zeroha·2024년 11월 17일
0

TypeScriptStudy

목록 보기
2/32
post-thumbnail

2.1 타입이란

.
.
.

1. 자료형으로서의 타입

변수 : 값을 저장할 수 있는 공간 = 값을 가리키는 상징적인 이름
개발자 : 변수 선언 -> 그 변수에 특정한 값인 데이터를 할당


var name = 'zig'
var year = 2024;

특정 메모리에 값을 효율적으로 저장하려면 해당 메모리 공간을 차지할 값의 크기 알아야 함.
메모리 크기를 알아야 값 훼손 x 그래도 가져올 수 있음.

예) 메모리 = 숫자 타입 값이 할당
자바스크립트 엔진 : 이 값을 숫자로 인식 -> 8바이트 단위로 메모리 저장 공간 읽어옴.

  • 변수에 저장할 수 있는 값의 종류 : 프로그래밍 언어마다 다름.
    데이터 타입 : 여러 종류의 데이터를 식별하는 분류 체계 ( 컴파일러에 값의 형태를 알려줌. )
    개발자 : 타입 사용 -> 값의 종류 명시, 메모리 더욱 효율적으로 사용

2. 집합으로서의 타입

프로그래밍에서의 타입 = 수학의 집합 = 값이 가질 수 있는 유효한 범위의 집합

  • number타입 값만 할당할 수 있도록 제한 -> number의 집합에 속하지 않는 string 타입의 str을 func() 함수의 인자로 사용하면 에러 발생.

타입 시스템 : 코드에서 사용되는 유효한 값의 범위를 제한 -> 런타임에서 발생할 수 있는 유효하지 않은 값에 대한 에러를 방지

  • 함수 인자에 들어갈 값의 타입을 정의하지 않은 경우
    : double() = 숫자를 인자로 받을 거라 기대 = 숫자x타입값 전달시 원하는 값 얻지 못함.
    ... but 함수의 매개변수 타입 명시? 곧바로 에러 발생

  • 일단 타입을 제한하면 타입스크립트 컴파일러는 함수를 호출할 때 호환되는 인자로 호출됐는지 판단
    2의 타입 = number
    double()의 매개변수 타입 = number에 할당
    ... but string타입은 number에 할당 x : 에러발생

3. 정적 타입과 동적 타입

만약 자바스크립트만을 사용? 변수와 값을 다룰 때 타입은 고려하지 않고 코드 작성 가능 ... but 자바스크립트에도 타입이 존재하긴 함.
다만 개발자가 직접 정의할 필요 x

타입을 결정하는 시점에 따라_

  • 정적 타입 static type
    : 모든 변수의 타입이 컴파일 타임에 결정
    : C, 자바, 타입스크립트
    : 컴파일타임에 타입 에러 발견 = 프로그램의 안정성 보장

  • 동적 타입 dynamic type
    : 변수타입이 런타임에서 결정
    : 파이썬, 자바스크립트
    : 에러없이 맘껏 코드 작성 가능 ...but 언제 어디서 오류 날지 모름

런타임에서 타입을 예측할 수 업다면 매우 위험한 상황.
( 예상치 못한 결과 반화 : 오류 발생 )

컴파일타임 : 기계(컴퓨터, 엔진)가 이해할 수 있는 기계어로 변환되는 시점
런타임 : 이후 변환된 파일이 메모리에 적재, 실행되는 시점


4. 강타입과 약타입

암묵적 타입 변환 Implicit coercion conversion
: 의도적으로 타입을 명시하거나 바꾸지 않았는데도 컴파일러 또는 엔진 등에 의해서 런타임에 타입이 자동으로 변경됨.

암무적 타입 변환 여부에 따라_

  • 강타입 특징을 가진 언어
    : 서로 다른 타입을 가는 값끼리 연산을 시도하면 컴파일러 또는 인터프리터에서 에러가 발생
    : C++, 자바, 자바스크립트

  • 약타입 특징을 가진 언어
    : 서로 다른 타입을 같는 값끼리 연산할 때 컴파일러 또는 인터프리터가 내부적으로 판단해서 특정값의 타입을 변환해서 연산을 수행한 후 도출
    : 파이썬, 루비, 타입스크립트

이것들 코드 예시 넣을지말지 고민 - 좀 주제흐리는 논외인 거 같음

: 편리하지만 예기치 못한 오류 발생 가능성 o
예) 자바스크립트는 타입이 명백하게 잘못 작성된 오류라도 어떻게든 결과 도출 o

const a = 3 + []; // "3"
const b = null + 12; // 12
let obj = {};
obj.foo;
function foo() {
    return num / 2;
}
foo("bar"); //NaN

: 3 + [ ] = 숫자 타입 값과 배열 간의 연산 결과 문자열 타입의 값이 도출 됨.
-> 이런 상황 발생시 에러가 발생하는 게 오히려 안전함.

자바스크립트는 약타입 언어라서 런타임에서 발생할 수 있는 에러 예측, 방지하는 코드 = 프로그램을 안전(타입 안전성)하게 만드는데 도움 o
: 타입 사용 -> 프로그램이 유효하지 않은 작업을 수행하지 않도록 방지
: 타입 명시 코드 작성 후, 개발자 의도 합당한지 검사 기준 필요


5. 컴파일 방식

컴파일 : 고수준 high-level 언어 -(변환)-> 바이너리 binary 코드

바이너리 binary 코드 : 0과 1로 이루어진 이진 코드

.. but 타입스크립트의 컴파일 결과물은 여전히 자바스크립트 파일
타입스크립의 탄생 이유 : 쉬운 방식으로 코드를 작성하기 위해, 런타임에서 사전 에러를 잡아내기 위해


도서참조 : 우아한 타입스크립트 with 리액트

profile
하 영

0개의 댓글

관련 채용 정보