값 타입과 참조 타입
값 타입 (Value Type)
값 타입은 스택 영역에 데이터가 저장됩니다. 예를 들어, 아래 코드를 보겠습니다.
public class Swap {
public static void main(String[] args) {
int i = 5;
int j = 10;
swap(i, j);
System.out.printf("MAIN i: %d, j: %d", i, j);
}
public static void swap(int i, int j) {
int tmp = i;
i = j;
j = tmp;
System.out.printf("SWAP i: %d, j: %d", i, j);
System.out.println();
}
}
위 코드에서 swap 메소드를 호출할 때 i와 j의 값을 전달합니다. 이 값들은 swap 메소드의 지역 변수로 복사됩니다. 따라서 swap 메소드 내에서의 변경은 main 메소드의 변수에 영향을 주지 않습니다. swap 메소드가 종료되면 그 스택은 사라지고, main 메소드의 값은 보존됩니다.
참조 타입 (Reference Type)
참조 타입인 배열을 선언하게 되면 swap 메소드를 이용해도 값이 바뀔 수 있습니다. 이는 배열이 힙 영역에 저장되기 때문입니다.
public class Swap {
public static void main(String[] args) {
int[] array = {5, 10};
swap(array);
System.out.printf("MAIN array[0]: %d, array[1]: %d", array[0], array[1]);
}
public static void swap(int[] array) {
int tmp = array[0];
array[0] = array[1];
array[1] = tmp;
System.out.printf("SWAP array[0]: %d, array[1]: %d", array[0], array[1]);
System.out.println();
}
}
위 코드에서 array는 힙 영역에 저장된 배열을 가리키고 있습니다. swap 메소드 내에서도 같은 배열을 가리키기 때문에 배열의 값이 변경됩니다.
기본 데이터 타입
자바의 기본 데이터 타입은 값 타입으로 8가지가 있습니다.
- 정수형: byte(8bits), short(16bits), int(32bits), long(64bits), char(16bits)
- 부동소수점 실수형: double(64bits), float(32bits)
- 부울대수: boolean
기본 데이터 타입은 자바가 기본적으로 제공하는 타입으로, 사용자가 편집할 수 없습니다. 예를 들어 Scanner 클래스는 기본적으로 포함되어 있지만 변경 가능합니다.
- char는 내부적으로 정수입니다.
- 가장 넓은 범위는 double이고, 지수를 표현할 수 있습니다.
변수 선언
변수는 final 키워드를 사용해 상수로 선언할 수 있습니다.
- 카멜케이스 (Camel Case) 단어 연결 시 첫 글자(소문자)를 제외한 각 단어의 첫 글자를 대문자로 표기하는 명명 규칙입니다. 주로 변수나 함수의 이름을 지을 때 사용합니다. 예: myVariableName, calculateDiscountAmount
- 파스칼케이스 (Pascal Case) 첫 단어의 첫 글자도 대문자로 표기하는 명명 규칙입니다. 주로 클래스나 타입의 이름을 지을 때 사용됩니다. 예: MyClass, CalculateDiscountAmount
데이터 타입 변환
암시적 타입 변환
자바는 작은 타입을 큰 타입으로 자동 변환합니다.
int intValue = 123;
long longValue = intValue;
System.out.printf("(long) %d = %d", intValue, longValue);
명시적 타입 변환
큰 타입을 작은 타입으로 변환할 때는 명시적 타입 변환이 필요합니다.
long longValue = Long.MAX_VALUE;
int intValue = (int) longValue;
System.out.printf("(long) %d = %d", longValue, intValue);
연산 시 타입 변환
- 정수형 간의 산술 연산 시 타입 변환 정수형 간의 산술 연산 시, 기본적으로 32bit 정수형(int)으로 암시적 타입 변환한 후 계산합니다. 예를 들어, byte와 byte 간의 연산이나, short와 byte 연산 등의 계산 결과는 int 타입입니다.
byte byteValue = 6;
short shortValue = 7;
// short result = byteValue + shortValue; // 오류 발생
int result = byteValue + shortValue; // 동작함
short result = (short) (byteValue + shortValue); // short으로 할당할 경우 명시적 타입 변환
2. 정수와 실수의 산술 연산 시 타입 변환 정수와 실수의 산술 연산 시, float 타입과의 산술 연산은 32bit 실수형으로, double 타입과의 산술 연산은 64bit 실수형으로 암시적 타입 변환됩니다.
float floatValue = 12.5F;
int intValue = 5;
float result = floatValue + intValue; // float으로 암시적 타입 변환
double doubleValue = 12.5;
int intValue = 5;
double result = doubleValue + intValue; // double로 암시적 타입 변환
'🖥️ PC > JAVA' 카테고리의 다른 글
8. 메소드 (0) | 2024.06.26 |
---|---|
7. 예외처리 Exception (0) | 2024.06.26 |
5. Java 기초: 변수, 연산자, 조건 & 반복문, 배열 (0) | 2024.06.26 |
4. Java 기초: Hello, World! 프로그램과 기본 개념 (0) | 2024.06.26 |
3. JDK와 JRE의 차이 (0) | 2024.06.24 |