원시 타입 변수란
자바에서 프로그램을 작성할 때는 다양한 종류의 데이터를 다루게 됩니다. 이러한 데이터를 저장하고 사용하기 위해 변수를 선언해야 합니다. 자바에서는 두 가지 주요한 변수 유형이 있습니다: 원시 타입(primitive type)과 참조 타입(reference type). 이 섹션에서는 원시 타입 변수를 생성하는 방법에 대해 자세히 설명합니다.
기본 자료형(원시 타입)
byte
- 정수형 타입으로 -128부터 127까지의 값을 저장할 수 있습니다.
- 메모리 사용량: 1바이트 (8 비트)
- 주로 대용량 배열에서 메모리를 절약할 때 사용되거나, 변수의 범위를 명확히 하기 위해 사용됩니다.
- 예시:
byte myByte = 100;
short
- 정수형 타입으로 -32,768부터 32,767까지의 값을 저장할 수 있습니다.
- 메모리 사용량: 2 바이트 (16 비트)
- 대용량 배열에서의 메모리 절약이나 변수의 범위 제한을 위해 사용됩니다.
- 예시:
short myShort = 32000;
int
- 정수형 타입으로 -2,147,483,648부터 2,147,483,647까지의 값을 저장할 수 있습니다.
- 메모리 사용량: 4 바이트(32비트)
- Java SE 8 이상에서는 unsigned 32비트 정수로도 사용 가능합니다(0부터 4,294,967,295까지).
- 예시:
int myInt = 2147483647;
- Unsigned int 사용 예:
Integer.compareUnsigned(int1, int2);
long
- 정수형 타입으로 -9,223,372,036,854,775,808부터 9,223,372,036,854,775,807까지의 값을 저장할 수 있습니다.
- 메모리 사용량: 8 바이트(64비트)
- Java SE 8 이상에서는 unsigned 64비트 정수로도 사용 가능합니다 (0부터 18,446,744,073,709,551,615까지).
- 예시:
long myLong = 9223372036854775807L;
- Unsigned long 사용 예:
Long.compareUnsigned(long1, long2);
float
- 부동소수점 숫자를 표현합니다.
- 메모리 사용량: 4 바이트 (32 비트)
- 정확한 계산이 필요한 경우에는 적합하지 않습니다 (예: 통화 계산).
- 대용량 배열에서의 메모리 절약을 위해 double 대신 사용할 수 있습니다.
- 예시: float myFloat = 3.14159f;
double
- 더 큰 범위의 부동소수점 숫자를 표현합니다.
- 메모리 사용량: 8 바이트 (64비트)
- 소수점 연산의 기본 선택입니다.
- 정확한 계산이 필요한 경우에는 적합하지 않습니다(예: 통화 계산).
- 예시:
double myDouble = 3.14159265358979323846;
boolean
- true 또는 false 두 가지 값만을 가질 수 있는 논리형 타입입니다.
- 메모리 사용량: 일반적으로 1 바이트(8비트)로 구현되지만, 정확한 크기는 명확히 정의되어 있지 않습니다.
- 단순한 true/false 조건을 추적하는 플래그에 사용됩니다.
- 예시:
boolean isTrue = true;
char
- 단일 문자를 저장할 수 있는 문자형 타입입니다.
- 유니코드 문자를 저장하며, 0부터 65,535까지의 값을 가질 수 있습니다.
- 메모리 사용량: 2 바이트(16비트)
- 예시:
char myChar = 'A';
주요 특징
- 모든 변수는 사용 전에 선언되어야 합니다.
- 각 원시 타입은 고정된 메모리 크기를 가지고 있습니다.
- null 값이 될 수 없습니다.
- 자동으로 박싱(autoboxing)과 언박싱(unboxing)을 지원합니다.
- String 클래스는 원시 타입은 아니지만 특별한 언어 지원을 받습니다.
사용 시 주의사항
- 정수형 타입에서 오버플로우에 주의해야 합니다.
- 부동소수점 타입(float, double)은 정확한 계산이 필요한 경우에는 적합하지 않을 수 있습니다.
- boolean은 true 또는 false만 가질 수 있으므로 다른 값으로 초기화할 수 없습니다.
- unsigned int와 long을 사용할 때는 Integer와 Long 클래스의 특별한 메서드를 사용해야 합니다.
- 정확한 통화 계산에는 BigDecimal 클래스를 사용하는 것이 좋습니다.
변수 초기화와 기본값
자바에서 변수를 선언할 때 항상 값을 할당해야 하는 것은 아닙니다. 필드(field)는 선언 시 초기화를 생략할 수 있으며, 컴파일러가 적절한 기본값을 자동으로 설정합니다. 하지만 이러한 방식은 일반적으로 나쁜 프로그래밍 스타일로 간주됩니다.
필드의 기본값
다음 표는 각 데이터 타입의 기본값을 요약합니다:
데이터 타입 | 필드의 기본값 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | \u0000 |
String(또는 모든 객체) | null |
boolean | false |
로컬 변수의 특징
로컬 변수(local variable)는 필드와 다르게 동작합니다:
- 컴파일러가 자동으로 기본값을 할당하지 않습니다.
- 선언 시 초기화를 생략할 수 있지만, 사용하기 전에 반드시 값을 할당해야 합니다.
- 미초기화된 로컬 변수에 접근하려고 하면 컴파일 오류가 발생합니다.
예시:
public class LocalVariableExample {
public static void main(String[] args) {
// 메서드 호출
printValues();
}
public static void printValues() {
// 로컬 변수 선언
int localInt;
boolean localBool;
String localStr;
// 미초기화된 로컬 변수 사용 시 컴파일 오류
// System.out.println("localInt: " + localInt); // 컴파일 오류
// System.out.println("localBool: " + localBool); // 컴파일 오류
// System.out.println("localStr: " + localStr); // 컴파일 오류
// 로컬 변수 초기화 후 사용
localInt = 42;
localBool = true;
localStr = "Hello, World!";
System.out.println("localInt: " + localInt);
System.out.println("localBool: " + localBool);
System.out.println("localStr: " + localStr);
// 메서드 내에서 선언된 로컬 변수는 메서드 종료 시 소멸
// System.out.println("localInt outside method"); // 컴파일 오류
}
public static void printFieldValues() {
// 필드 값 출력 (필드는 자동 초기화됨)
System.out.println("fieldInt: " + fieldInt);
System.out.println("fieldBool: " + fieldBool);
System.out.println("fieldStr: " + fieldStr);
}
// 클래스 필드 (자동 초기화됨)
private static int fieldInt;
private static boolean fieldBool;
private static String fieldStr;
}
주의사항 및 팁
- 명시적 초기화: 가능한 경우 항상 변수를 선언할 때 초기화하는 것이 좋습니다.
- 기본값 의존 피하기: 코드의 가독성과 유지보수성을 위해 기본값에 의존하지 않는 것이 좋습니다.
- null 안전성: 객체 참조 변수는 null로 초기화되므로, 사용 전에는 항상 null 체크를 수행하세요.
- 상수 사용: 변경되지 않는 값이라면 final 키워드를 사용하여 상수로 정의하는 것이 좋습니다.
편히 모아진 글 보시려면 아래 위키독스 링크 >>
https://wikidocs.net/book/17111
'JAVA' 카테고리의 다른 글
정수리터럴, 부동소수점 리터럴 [코딩백과 with JAVA] (1) | 2024.12.20 |
---|---|
리터럴과 원시 타입 변수 초기화 [코딩백과 with JAVA] (0) | 2024.12.20 |
자바 변수 이해하기 - 코딩백과 with JAVA (0) | 2024.12.20 |
Java 클래스 정의에 대해 알아보기 (1) | 2024.12.17 |
Part&Chapter 목록 | [Java The Complete Reference] 12th Edition - 재발자의 번역 프로젝트 (0) | 2024.11.08 |