본문 바로가기
  • 🕊️ A Piece of Peace
🖥️ PC/JAVA

6. 자바의 기본 데이터 타입 (Primitive Data Types)

by Moom2n 2024. 6. 26.

값 타입과 참조 타입

값 타입 (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);

 

연산 시 타입 변환

  1. 정수형 간의 산술 연산 시 타입 변환 정수형 간의 산술 연산 시, 기본적으로 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로 암시적 타입 변환