2-4. 자료형

CodingHoon·2021년 6월 1일
0

java-basic

목록 보기
7/13
post-thumbnail

✅ 자료형의 종류

1) 기본 자료형

자료 출처: Do it! 자바프로그래밍 입문 (이지스퍼블리싱)

▶ 정수형, 실수형, 문자형, 논리형으로 구분된다.

▶ JAVA 라이브러리에서 기본적으로 제공한다.

▶ 자료형이 사용하는 메모리의 크기가 정해져 있다.


2) 참조 자료형

▶ 클래스를 사용하는 자료형이다.

▶ 사용하는 클래스에 따라 할당되는 메모리가 다르다.

▶ JAVA 라이브러리에서 기본적으로 제공되는 클래스도 있고,
사용자가 직접 클래스를 만들어서 참조 자료형으로 사용할 수도 있다.


✅ 기본 자료형: 정수 자료형


1) byte형

▶ 크기: 1바이트

▶ 표현할 수 있는 수의 범위: -2^7 ~ 2^7 - 1 (-128 ~ 127)


2) short형

▶ 크기: 2바이트

▶ 표현할 수 있는 수의 범위: -2^15 ~ 2^15 - 1 (-32,768 ~ 32,767)


3) int형

▶ 크기: 4바이트

▶ 표현할 수 있는 수의 범위: -2^31 ~ 2^31 - 1

JAVA는 모든 정수 값을 기본적으로 int형으로 처리한다.


4) long형

▶ 크기: 4바이트

▶ 표현할 수 있는 수의 범위: -2^63 ~ 2^63 - 1

▶ 정수를 표현하는 가장 큰 단위의 자료형이다.

package datatype;

public class IntegerTypeTest1 {
    public static void main(String[] args) {
        byte bNum = 127;
        // byte bNum = 128;  /* 오류 발생 */

        short sNum = 32767;
        // short sNum = 32768;  /* 오류 발생 */
        
        int iNum = 1234567890;
        // int iNum = 12345678900;  /* 오류 발생 */

        System.out.println(bNum);
        System.out.println(sNum);
        System.out.println(iNum);
    }
}

[실행 결과]
127
32767
1234567890

▶ 자료형이 표현할 수 있는 범위를 초과하는 값을 대입하면 오류가 발생한다.


✅ JAVA는 모든 정수 값을 기본적으로 int형으로 처리한다!

package datatype;

public class IntegerTypeTest2 {
    public static void main(String[] args) {
        // int iNum = 12345678900;  /* 오류 발생 */
        // long lNum = 12345678900;  /* 오류 발생 */

        long lNum1 = 12345678900L;
        long lNum2 = 1000;

        System.out.println(lNum1);
        System.out.println(lNum2);
    }
}

[실행 결과]
12345678900
1000

자료형이 표현할 수 있는 범위를 초과하는 값을 대입하면 오류가 발생하므로,
int iNum = 12345678900; 문장은 오류가 발생하게 된다.

그렇다면, long lNum = 12345678900; 문장은 왜 오류가 발생하는 걸까?

위에서도 말했듯이, JAVA에서는 모든 정수 값을 기본적으로 int형(4바이트)으로 처리하게 된다. 따라서, 컴파일러는 정수 12345678900을 int형으로 처리하려고 하지만, 12345678900은 4바이트에 들어갈 수 없다. 그러므로, 12345678900은 4바이트가 아닌 8바이트로 처리해야 하고, long lNum1 = 12345678900L; 문장과 같이 long형을 나타내는 식별자 L 혹은 l을 반드시 정수 뒤에 붙여야 한다.

하지만, long lNum2 = 1000; 문장은 오류가 발생하지 않는다. 왜냐하면 1000이라는 숫자는 int형 범위 내에 존재하는 숫자이므로, 컴파일러가 1000을 내부적으로 int형으로 처리한 후, long형으로 자동으로 형 변환이 되기 때문이다.

한마디로, int형 범위 내의 정수 값을 사용할 때는 L 혹은 l 식별자가 필요없다.


✅ 기본 자료형: 실수 자료형

1) float형

▶ 크기: 4바이트 (부호 1비트, 지수부 8비트, 가수부 23비트)


2) double형

▶ 크기: 8바이트 (부호 1비트, 지수부 11비트, 가수부 52비트)

▶ float형에 비해, double형이 더욱 정밀한 실수를 표현할 수 있으므로,
JAVA는 모든 실수 값을 기본적으로 double형(8바이트)으로 처리한다.

package datatype;

public class DoubleTypeTest {
    public static void main(String[] args) {
        float fNum = 3.141592F;
        double dNum = 3.141592;

        System.out.println(fNum);
        System.out.println(dNum);
    }
}

[실행 결과]
3.141592
3.141592

▶ float형에서 식별자 F 혹은 f를 사용하는 이유는, 정수 자료형의 long형과 같다.


✅ 기본 자료형: 문자 자료형

(1) 문자 인코딩

컴퓨터 내부에서는 문자도 0과 1로 표현한다. 따라서, 표현하고자 하는 문자를 정해져 있는 코드 값으로 변환하는 과정이 필요한데, 이를 문자 인코딩이라고 한다. 대표적인 문자 인코딩에는 아스키 코드 (ASCII Code)가 있는데, 아스키 코드는 영문자, 숫자, 특수 문자 등을 1바이트로 표현한 문자 세트이다. 하지만, 1바이트만으로는 전 세계의 모든 문자를 표현하기가 어렵다. 따라서, JAVA는 각 언어의 표준 인코딩을 2바이트로 정의한 문자 세트인 유니코드 (Unicode)를 기반으로 문자를 표현한다. 유니코드는 1바이트는 아스키 코드 값을 그대로 사용하고, 나머지 1바이트로 그 이상의 문자를 표현한다.


(2) char형

▶ 크기: 2바이트

▶ 단 하나의 문자를 표현하는 자료형으로, 작은따옴표('')를 사용한다.

package datatype;

public class CharacterTypeTest {
    public static void main(String[] args) {
        char ch1 = 'A';
        System.out.println(ch1);
        System.out.println((int)ch1);

        char ch2 = 66;
        System.out.println(ch2);

        int ch3 = 67;
        System.out.println(ch3);
        System.out.println((char)ch3);
    }
}


[실행 결과]
A
65
B
67
C

▶ char형 변수에 저장된 문자 값을 int형으로 형 변환하여 출력하면, 해당 문자에 해당하는 정수 값이 출력된다. 반대로, int형 변수에 저장된 정수 값을 char형으로 형 변환하여 출력하면, 해당 정수에 해당하는 문자 값이 출력된다.

▶ 또한, 변수 ch2와 같이 char형 변수에는 정수 값을 직접적으로 대입할 수 있고, 해당 변수를 출력하면 정수 값에 해당하는 문자가 출력된다.


여기서 잠깐!

(int)ch1은 char형 변수 ch1을 int형으로 형 변환하는 문법입니다.
'2-5. 형 변환' 파트에서 자세히 다룰 내용입니다 😊
👉 'java-basic: 2-5. 형 변환' 문서 확인하러 가기


✅ 기본 자료형: 논리 자료형

(1) boolean형

▶ 크기: 1바이트

▶ 변수의 참(true), 거짓(false) 값을 나타냄

package datatype;

public class BooleanTypeTest {
    public static void main(String[] args) {
        boolean isMarried = false;
        boolean isStudent = true;

        System.out.println(isMarried);
        System.out.println(isStudent);
    }
}

[실행 결과]
false
true

✅ 참조 자료형: String 클래스 (문자열)

▶ String 클래스는 문자열을 사용할 수 있도록 기본적으로 제공하는 클래스

▶ 문자열을 표현할 때는 큰따옴표("")를 사용한다.

package datatype;

public class StringTypeTest {
    public static void main(String[] args) {
        String name = "John";
        System.out.println(name);
        
        char charA = 'A'; // 문자 자료형 변수 charA에 문자 'A'를 대입
        String strA = "A"; // String 클래스 변수 strA에 문자열 "A"를 대입 
    }
}

▶ 문자 'A'와 문자열 "A"는 엄연히 다른 값이다.


여기서 잠깐!
String 클래스를 비롯한 여러 참조 자료형들은 추후에 상세히 다룰 예정입니다.
지금은 단순히 String 클래스는 문자열을 다루는 자료형 알고 계시면 됩니다 😊

0개의 댓글