정수 (Integer)

정수(Integer)는 소수점이 없는 양수, 음수, 0을 표현하는 데이터 타입으로, 컴퓨터에서는 이진수로 표현되며, 일정 범위의 정수를 표현할 수 있다.

특징과 특성

  1. 고정된 크기의 메모리 사용
  2. 빠른 연산 속도
  3. 범위의 제한 (오버플로우 가능성)
  4. 직접적인 산술 연산 지원

종류

  1. byte

    • 범위: -128 ~ 127
    • 8비트
    • 비트 구성: 1비트 부호 + 7비트 값
    • 특징:
      • 가장 작은 정수 타입
      • 메모리 효율적이지만 표현 범위가 제한적
      • 주로 작은 범위의 데이터나 문자 표현에 사용
  2. short

    • 범위: -32,768 ~ 32,767
    • 16비트
    • 비트 구성: 1비트 부호 + 15비트 값
    • 특징:
      • 8비트보다 넓은 범위 표현 가능
      • 메모리 사용량과 표현 범위의 균형이 좋음
      • 작은 정수 값을 다룰 때 효율적
  3. int

    • 범위: -2,147,483,648 ~ 2,147,483,647
    • 32비트
    • 비트 구성: 1비트 부호 + 31비트 값
    • 특징:
      • 가장 일반적으로 사용되는 정수 타입
      • 대부분의 정수 연산에 충분한 범위 제공
      • 현대 컴퓨터 아키텍처에 최적화됨
  4. long

    • 범위: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
    • 64비트
    • 비트 구성: 1비트 부호 + 63비트 값
    • 특징:
      • 가장 넓은 범위의 정수 표현 가능
      • 대규모 계산이나 매우 큰 값을 다룰 때 사용
      • 메모리 사용량이 더 많지만, 정밀도가 높음

각 언어별 예시

Java:

1
2
3
4
byte b = 127;
short s = 32767;
int i = 2147483647;
long l = 9223372036854775807L; // L 접미사 필요

JavaScript:
JavaScript는 모든 숫자를 64비트 부동소수점으로 처리하지만, 비트 연산 시 32비트 정수로 처리한다.

1
2
let num = 2147483647; // 32비트 정수 최대값
let bigInt = 9223372036854775807n; // BigInt 사용 (64비트)

Python
Python 3에서는 정수의 크기 제한이 없다. 하지만 특정 크기로 제한하려면 다음과 같이 할 수 있다:

1
2
3
4
5
6
import numpy as np

int8 = np.int8(127)
int16 = np.int16(32767)
int32 = np.int32(2147483647)
int64 = np.int64(9223372036854775807)

연산 종류

  1. 산술 연산: 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)
  2. 비교 연산: 크기 비교(<, >, <=, >=), 동등 비교(==,!=)
  3. 비트 연산: AND(&), OR(|), XOR(^), NOT(~), 시프트(«, »)

실제 활용 사례

  • 카운터, 인덱스, 루프 변수
  • 연령, 수량, 가격 등의 정수 데이터 표현
  • 배열의 크기 지정

주의사항

각 언어에서 정수를 다룰 때 주의할 점은:

  1. 오버플로우 처리: 특히 Java와 같이 고정 크기 정수를 사용하는 언어에서는 오버플로우를 주의해야 한다.
  2. 형변환: 다른 숫자 타입과의 변환 시 데이터 손실 가능성을 고려해야 한다.
  3. 나눗셈 연산: 정수 나눗셈은 항상 결과를 내림하여 정수로 반환한다.
  4. 성능 고려: 상황에 따라 적절한 크기의 정수 타입을 선택하여 메모리 사용을 최적화할 수 있다.

오버플로우(Overflow)
오버플로우는 데이터 타입이 표현할 수 있는 최대값을 초과하는 경우 발생한다.
예를 들어, 8비트 부호 있는 정수의 최대값인 127에 1을 더하면 -128이 되는 현상이다.
이는 비트 표현에서 가장 왼쪽의 부호 비트가 변경되어 발생한다.

언더플로우(Underflow)
언더플로우는 데이터 타입이 표현할 수 있는 최소값보다 작은 값을 저장하려 할 때 발생한다.
예를 들어, 8비트 부호 있는 정수의 최소값인 -128에서 1을 빼면 127이 되는 현상이다.

주요 특징:

  1. 정수형에서 발생: 주로 정수형 데이터 타입에서 발생하며, 계산 결과가 예상치 못한 값으로 변할 수 있다.
  2. 에러 메시지 없음: 오버플로우나 언더플로우가 발생해도 별도의 에러 메시지가 표시되지 않아 주의가 필요하다.
  3. 보안 위험: 정수형 오버플로우는 보안상 문제를 유발할 수 있어 주의가 필요하다.

방지 방법:

  1. 적절한 데이터 타입 선택: 표현하고자 하는 범위의 숫자를 포함할 수 있는 충분히 큰 데이터 타입을 사용한다.
  2. 범위 검사: 연산 전후로 값의 범위를 검사하여 오버플로우나 언더플로우를 방지한다.
  3. 안전한 연산 사용: 일부 프로그래밍 언어에서 제공하는 안전한 산술 연산 함수를 사용한다.

언어별 예시

Java

1
2
3
4
int count = 10;
long population = 7_000_000_000L;
System.out.println(count + 5); // 15
System.out.println(population > 1_000_000_000); // true

JavaScript

1
2
3
4
let year = 2025;
let daysInYear = 365;
console.log(year % 4 === 0); // false (윤년 체크)
console.log(Math.floor(year / 100)); // 20 (세기 계산)

Python

1
2
3
4
age = 30
score = 100
print(age * 2) # 60
print(score // 3) # 33 (정수 나눗셈)

정수는 프로그래밍에서 가장 기본적이고 널리 사용되는 데이터 타입 중 하나로, 다양한 계산과 데이터 표현에 활용된다.


참고 및 출처