타입(Type)이란?
**타입(Type)**이란 값의 종류(데이터의 유형)를 나타내는 개념입니다.
프로그래밍에서 변수를 선언할 때, 해당 변수가 가질 수 있는 값의 종류를 결정하는 것이 "타입"입니다.
타입이 왜 중요할까?
- 데이터를 안전하게 다룰 수 있음 → 잘못된 값이 들어가는 것을 방지
- 코드의 가독성이 높아짐 → 변수나 함수가 어떤 값을 다루는지 명확하게 이해 가능
- 디버깅이 쉬워짐 → 잘못된 타입 사용을 사전에 방지
📌 잘못된 타입 사용 예시 (TypeScript에서 오류 발생)
let age: number = "스물다섯"; // ❌ 오류: number 타입에 string을 할당할 수 없음
✅ 올바른 타입 사용
let age: number = 25; // 정상 동작
정적 타입 vs 동적 타입
프로그래밍 언어에서 타입을 언제 결정하는지에 따라 **정적 타입(Static Type)**과 **동적 타입(Dynamic Type)**으로 나뉩니다.
✅ 정적 타입 (Static Typing)
- 컴파일 시 타입이 결정됨 → 실행 전에 타입 오류를 잡아낼 수 있음
- 예: TypeScript, Java, C, C++
📌 TypeScript 예제 (컴파일 시 오류 감지)
let username: string = "홍길동"; username = 123; // ❌ 오류 발생: string 타입에 number를 할당할 수 없음
✅ 동적 타입 (Dynamic Typing)
- 실행 중에 타입이 결정됨 → 유연하지만, 잘못된 타입이 들어가도 실행되므로 오류 발생 가능성이 높음
- 예: JavaScript, Python, Ruby
📌 JavaScript 예제 (런타임 오류 가능)
let username = "홍길동"; // 처음에는 string username = 123; // ✅ 오류 없이 실행됨 (하지만, 나중에 문제 발생 가능)
Java script 자바스크립트 | Type script 타입스크립트 | |
타입 지정 | 자동 (동적 타입) | 명시적 (정적 타입) |
오류 감지 | 실행 중 오류 발견 | 컴파일 시 오류 감지 |
코드 안정성 | 낮음 (런타임 오류 발생 가능) | 높음 (타입 검사를 통해 안정성 확보) |
✅ TypeScript는 타입을 명확하게 지정하여 안전한 코드 작성을 돕는 언어입니다. 마이크로소프트에서 자바스크립트에 동적 타입을 집어넣은 언어이기 때문에, 조금 더 디버깅하기 쉽습니다.
JavaScript와 TypeScript의 기본 타입 정리
(1) 기본 타입 (Primitive Type)
타입 | 설명 | Java script 예제 | Type script 예제 |
number | 숫자 (정수, 실수) | let n = 10; | let n: number = 10; |
string | 문자열 | let s = "hello"; | let s: string = "hello"; |
boolean | 참/거짓 | let b = true; | let b: boolean = true; |
undefined | 값이 정의되지 않음 | let u; | let u: undefined; |
null | 값이 없음 | let n = null; | let n: null = null; |
symbol | 고유한 값 생성 | let sym = Symbol("id"); | let sym: symbol = Symbol("id"); |
bigint | 큰 정수 | let big = 123n; | let big: bigint = 123n; |
(2) 객체 타입 (Reference Type)
타입 | 설명 | Java script 예제 | Type script 예제 |
object | 객체 | let obj = { name: "Kim" }; | let obj: { name: string } = { name: "Kim" }; |
array | 배열 | let arr = [1, 2, 3]; | let arr: number[] = [1, 2, 3]; |
function | 함수 | function sum(a, b) { return a + b; } | function sum(a: number, b: number): number { return a + b; } |
(3) 특수 타입 (TypeScript 전용
타입 | 설명 | 예제 |
any | 모든 타입 허용 (비추천) | let value: any = 10; value = "hello"; |
unknown | 안전한 any (타입 검사 필요) | let value: unknown = "hello"; |
void | 반환값이 없는 함수 | function log(): void { console.log("Hello"); } |
never | 절대 반환되지 않는 값 | function error(): never { throw new Error("Error!"); } |
tuple | 고정된 타입 배열 | let tuple: [string, number] = ["Kim", 30]; |
enum | 열거형 타입 | enum Role { Admin, User }; let role: Role = Role.Admin; |
union | 여러 타입 허용 | `let id: string |
(4) 타입을 활용하는 예제 (TypeScript)
📌 올바른 타입 적용 예제
// 변수 선언
let age: number = 25;
let username: string = "홍길동";
let isStudent: boolean = false;
// 배열 타입
let scores: number[] = [85, 90, 78];
// 객체 타입
let person: { name: string; age: number } = {
name: "홍길동",
age: 25
};
// 함수 타입
function add(a: number, b: number): number {
return a + b;
}
// 유니온 타입
let id: string | number = 123; /* 타입이 스트링이거나 숫자면됨 */
id = "ABC123";
✅ 타입을 명확하게 지정하면, 코드가 더 안전하고 유지보수하기 쉬워집니다.
(5) 결론
✔ 타입(Type)이란?
- 데이터가 어떤 종류인지 알려주는 개념
- JavaScript는 동적 타입, TypeScript는 정적 타입
✔ 타입을 사용하면?
- 코드 안정성 증가 (잘못된 타입 방지)
- 가독성이 좋아짐 (명확한 변수 및 함수 타입)
- 디버깅이 쉬워짐 (컴파일 단계에서 오류 발견 가능)
개념 | Java script | Type script |
정적 타입 | ❌ 없음 (동적 타입) | ✅ 있음 (컴파일 시 타입 체크) |
숫자 타입 | number (정수, 실수 포함) | number (JS와 동일) |
문자열 타입 | string | string |
불리언 타입 | boolean | boolean |
객체 타입 | object | object, interface, type |
배열 타입 | Array | Array<T>, T[] |
튜플 타입 | ❌ 없음 | ✅ [string, number] |
열거형 (Enum) | ❌ 없음 | ✅ enum Role { Admin, User } |
유니온 타입 | ❌ 없음 | ✅ `string |
any 타입 | 있음 (암묵적으로) | any (명시적으로 사용 가능) |
never 타입 | ❌ 없음 | ✅ never (반환되지 않는 함수) |
타입 추론 | 동적 타입 (실행 시 결정) | 정적 타입 (컴파일 시 체크) |
✅ 컴파일 시 오류 방지 → 잘못된 타입을 미리 감지
✅ 코드 자동 완성 & 문서화 → 개발 생산성 향상
✅ 명확한 타입 지정 → 코드 유지보수 용이
✅ JS와 100% 호환 → 기존 JS 코드에 점진적으로 적용 가능
즉, JavaScript는 유연하지만 오류 발생 가능성이 높고, TypeScript는 타입 안정성을 제공하여 버그를 줄이고 개발 속도를 높이는 역할을 합니다.
이로서 글을 마치도록 하겠습니다. 오늘도 고생하셨습니다, 행복한 하루 되세요 :)
'프로그래밍 > 개발할때 알아야하는 필수 기초 개념' 카테고리의 다른 글
#1. Java script/ Type script 함수 선언 기초 (0) | 2025.03.17 |
---|