정수 (Integer)
정수(Integer)는 소수점이 없는 양수, 음수, 0을 표현하는 데이터 타입으로, 컴퓨터에서는 이진수로 표현되며, 일정 범위의 정수를 표현할 수 있다.
특징과 특성
- 고정된 크기의 메모리 사용
- 빠른 연산 속도
- 범위의 제한 (오버플로우 가능성)
- 직접적인 산술 연산 지원
종류
byte
- 범위: -128 ~ 127
- 8비트
- 비트 구성: 1비트 부호 + 7비트 값
- 특징:
- 가장 작은 정수 타입
- 메모리 효율적이지만 표현 범위가 제한적
- 주로 작은 범위의 데이터나 문자 표현에 사용
short
- 범위: -32,768 ~ 32,767
- 16비트
- 비트 구성: 1비트 부호 + 15비트 값
- 특징:
- 8비트보다 넓은 범위 표현 가능
- 메모리 사용량과 표현 범위의 균형이 좋음
- 작은 정수 값을 다룰 때 효율적
int
- 범위: -2,147,483,648 ~ 2,147,483,647
- 32비트
- 비트 구성: 1비트 부호 + 31비트 값
- 특징:
- 가장 일반적으로 사용되는 정수 타입
- 대부분의 정수 연산에 충분한 범위 제공
- 현대 컴퓨터 아키텍처에 최적화됨
long
- 범위: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
- 64비트
- 비트 구성: 1비트 부호 + 63비트 값
- 특징:
- 가장 넓은 범위의 정수 표현 가능
- 대규모 계산이나 매우 큰 값을 다룰 때 사용
- 메모리 사용량이 더 많지만, 정밀도가 높음
각 언어별 예시
Java:
JavaScript:
JavaScript는 모든 숫자를 64비트 부동소수점으로 처리하지만, 비트 연산 시 32비트 정수로 처리한다.
Python
Python 3에서는 정수의 크기 제한이 없다. 하지만 특정 크기로 제한하려면 다음과 같이 할 수 있다:
연산 종류
- 산술 연산: 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)
- 비교 연산: 크기 비교(<, >, <=, >=), 동등 비교(==,!=)
- 비트 연산: AND(&), OR(|), XOR(^), NOT(~), 시프트(«, »)
실제 활용 사례
- 카운터, 인덱스, 루프 변수
- 연령, 수량, 가격 등의 정수 데이터 표현
- 배열의 크기 지정
주의사항
각 언어에서 정수를 다룰 때 주의할 점은:
- 오버플로우 처리: 특히 Java와 같이 고정 크기 정수를 사용하는 언어에서는 오버플로우를 주의해야 한다.
- 형변환: 다른 숫자 타입과의 변환 시 데이터 손실 가능성을 고려해야 한다.
- 나눗셈 연산: 정수 나눗셈은 항상 결과를 내림하여 정수로 반환한다.
- 성능 고려: 상황에 따라 적절한 크기의 정수 타입을 선택하여 메모리 사용을 최적화할 수 있다.
오버플로우(Overflow)
오버플로우는 데이터 타입이 표현할 수 있는 최대값을 초과하는 경우 발생한다.
예를 들어, 8비트 부호 있는 정수의 최대값인 127에 1을 더하면 -128이 되는 현상이다.
이는 비트 표현에서 가장 왼쪽의 부호 비트가 변경되어 발생한다.언더플로우(Underflow)
언더플로우는 데이터 타입이 표현할 수 있는 최소값보다 작은 값을 저장하려 할 때 발생한다.
예를 들어, 8비트 부호 있는 정수의 최소값인 -128에서 1을 빼면 127이 되는 현상이다.주요 특징:
- 정수형에서 발생: 주로 정수형 데이터 타입에서 발생하며, 계산 결과가 예상치 못한 값으로 변할 수 있다.
- 에러 메시지 없음: 오버플로우나 언더플로우가 발생해도 별도의 에러 메시지가 표시되지 않아 주의가 필요하다.
- 보안 위험: 정수형 오버플로우는 보안상 문제를 유발할 수 있어 주의가 필요하다.
방지 방법:
- 적절한 데이터 타입 선택: 표현하고자 하는 범위의 숫자를 포함할 수 있는 충분히 큰 데이터 타입을 사용한다.
- 범위 검사: 연산 전후로 값의 범위를 검사하여 오버플로우나 언더플로우를 방지한다.
- 안전한 연산 사용: 일부 프로그래밍 언어에서 제공하는 안전한 산술 연산 함수를 사용한다.
언어별 예시
Java
JavaScript
Python
정수는 프로그래밍에서 가장 기본적이고 널리 사용되는 데이터 타입 중 하나로, 다양한 계산과 데이터 표현에 활용된다.