본문으로 건너뛰기

타입

이런 느낌으로 써달라고는 했는데 너무 잘써준다...!

## 왜 타입이 필요한가?

타입이란 어떤 변수에 엮인 메모리 공간에 존재할 수 있는 값의 집합과 그 값들이 가질 수 있는 성질

  • 컴퓨터에게는 메모리의 특정 위치에 있는 이진수 데이터를 얼마나 읽어서(크기), 어떻게 해석하고(의미), 무엇을 할지(연산) 알려주는 명확한 가이드라인을 제공합니다.
  • 개발자에게는 데이터의 의도를 명확히 하고, 해당 데이터로 할 수 없는 잘못된 작업을 시도할 경우 미리 에러를 알려주어 프로그램의 안정성을 높이는 안전장치 역할을 합니다.

결국, 모든 것이 0과 1일 뿐인 세상에서, 우리가 의미 있는 데이터를 안전하고 효율적으로 다루기 위해 만들어낸 최소한의 규칙이 바로 타입인 것입니다.

## 컴퓨터에게 0과 1은 그냥 '신호'일 뿐

컴퓨터의 가장 낮은 수준에서 CPU는 단순히 0과 1의 전기적 신호(켜짐/꺼짐)를 처리합니다. 예를 들어, 메모리에 01000001이라는 8비트 데이터가 저장되어 있다고 해봅시다.

컴퓨터에게 이 데이터는 그 자체로 아무 의미가 없습니다. 그냥 '켜지고 꺼진 신호의 나열'일 뿐이죠. 이게 숫자 65를 의미하는 걸까요, 아니면 **알파벳 대문자 'A'**를 의미하는 걸까요? 아니면 특정 색깔을 나타내는 코드일 수도 있습니다.

이처럼 컴퓨터는 스스로 해석할 능력이 없습니다. 그냥 주어진 명령대로 데이터를 옮기고 계산할 뿐이에요. 이때 개발자가 컴퓨터에게 "이 0과 1 덩어리는 이런 식으로 해석하고 다뤄줘!"라고 알려주는 약속이자 규칙이 바로 **타입(Type)**입니다.

## 타입(Type): '이진수 데이터 사용 설명서'

타입은 이진 데이터 덩어리에 대한 두 가지 핵심 정보를 담고 있는 '사용 설명서'와 같습니다.

  1. 크기 (메모리 공간): 이 데이터가 메모리에서 얼마나 많은 공간을 차지하는지 알려줍니다.

    • number 타입은 64비트(8바이트)의 공간을 사용하라고 약속합니다.
    • boolean 타입은 보통 1바이트 공간만 사용해도 충분하죠.
    • 컴퓨터는 이 정보를 보고 데이터를 어디까지 읽어야 할지 정확히 알 수 있습니다.
  2. 해석 방법과 허용된 연산: 이 데이터를 어떻게 해석해야 하고, 어떤 작업을 할 수 있는지 알려줍니다.

    • 01000001number 타입으로 해석해! → 그럼 이건 숫자 65이고, +, -, *, / 같은 산술 연산을 할 수 있어.
    • 01000001string 타입으로 해석해! → 그럼 이건 문자 'A'이고, .toUpperCase() 같은 문자열 관련 작업을 할 수 있어.

만약 타입이 없다면, 우리는 숫자 65에 대고 .toUpperCase()를 호출하는, 의미 없는 작업을 시도할 수 있습니다. 이는 당연히 프로그램 오류로 이어지겠죠.

참고