티스토리 뷰

이번 글에서는 자바의 primitive 타입 8개 중에서 내가 몰랐던, 또는 애매하게 알고 있었던 부분을 정리하려고 한다. 

내용은 "이것이 자바다(신용권, 임경균)" 책(1권)을 참고하였다.

 

🟩 변수가 메모리에 할당되는 순간 

변수가 메모리에 할당되는 순간 = 변수 초기화 순간 

이다. 

 

보충설명을 하겠다. 

여기서 말한 변수 초기화라는 건, 

변수에 최초로 값이 대입될 때를 말한다. 

즉, 아래코드를 보면 

mathScore은 변수에 최초로 값이 대입되었으니, 변수 초기화가 이루어진 것이고, 해당 변수는 메모리에 할당된다

반면에 englishScore은 변수 초기화가 이루지지않고, 단순히 변수 선언(= 저장되는 값의 타입과 이름만 결정하는 행위)만을 한 것이므로, 메모리에 할당되지 않았다

class HelloWorld {
    public static void main(String[] args) {
        int mathScore = 90;
        int englishScore;
    }
}

 

따라서, 초기화되지 않은 변수는 아직 메모리에 할당되지 않았기 때문에 변수를 통해 메모리 값을 읽을 수 없기 때문에, 

아래사진과 같이 초기화되지않았다고 에러가 난다.

 

 

🟩 정수 타입 5개

이렇게 자바에는 총 5개의 정수 타입이 있다. 

( 이렇게 사진을 붙인 이유는 각각 메모리 크기와 저장되는 값의 허용 범위를 조금이라도 기억하기 위해서이다. )

 

각각 타입이 메모리 크기에 따라 어떻게 저장되는지는 교재 41쪽을 참고하자. 

 

 

또,

코드에서 프로그래머가 직접 입력한 값을 리터럴(literal)이라고 부르는데,

변수에 대입할 정수 리터럴은 진수에 따라 작성하는 방법이 다르다. 

 

🔵 2진수 : 0b 또는 0B로 시작하고 0과 1로 작성 

int x = 0b1011;
int y = 0B10100;

 

🔵 8진수 : 0으로 시작하고 0~7 숫자로 작성

int x = 013;
int y = 0206;

 

🔵 10진수 : 소수점이 없는 0~9 숫자로 작성

int x = 12;
int y = 365;

 

🔵 16진수 : 0x 또는 oX로 시작하고 0~9나 A, B, C, D, E, F 또는 a, b, c, d, e, f로 작성 

int x = 0xB3;
int y = 0X2A0F;

 

예시)

package com.koDong;

class HelloWorld {
    public static void main(String[] args) {

        int var1 = 0b1011; // 2진수
        int var2 = 0206;  // 8진수
        int var3 = 365; // 10진수
        int var4 = 0xB3; // 16진수

        System.out.println(var1);
        System.out.println(var2);
        System.out.println(var3);
        System.out.println(var4);
    }
}
결과)
11
134
365
179

 

 

+) 

기본적으로 컴파일러는 정수 리터럴을 int타입 값으로 간주하기 때문에 int 타입의 허용범위를 초과하는 리터럴은 (long타입의 경우) "l"(소문자) 이나 "L"(대문자)을 붙여 long타입 값임을 컴파일러에게 알려줘야한다.

 

아래는 그 예시이다.

package com.koDong;

class HelloWorld {
    public static void main(String[] args) {

        long var1 = 10; // int타입의 허용범위 내이기에, "l"이나 "L"붙일 필요 X
        long var2 = 20L;
        long var3 = 1000000000000; // Error!!
        long var4 = 1000000000000L;

    }
}

 

 

 

🟩 문자 타입 (문자열 타입 아님)

하나의 문자를 작은따옴표(')로 감싼 것을 문자 리터럴이라한다.

문자 리터럴은 유니코드로 변환되어 저장된다.

여기서 유니코드란 세계 각국의 문자를 0~65535숫자로 매핑한 국제 표준 규약이다. 

자바는 이러한 유니코드를 저장할 수 있도록 char타입을 제공한다.

char var1 = 'A'; // 'A' 문자와 매핑되는 유니코드 : 65로 대입
char var2 = '가'; // '가' 문자와 매핑되는 유니코드 : 44032로 대입

 

유니코드가 정수이므로, char타입도 정수 타입에 속한다. 

그렇기 때문에, char 변수에 바로 유니코드 숫자를 직접 대입할 수도 있다.

char var1 = 65; // 10진수 65와 매핑되는 문자: : 'A'
char var2 = 0x0041 // 16진수 0x0041과 매핑되는 문자 : 'A'

 

그리고 추가적으로 설명하자면,

char타입은 내부적으로는 정수(문자의 유니코드값)을 저장한다. 

하지만, 출력할 때는 저장된 유니코드값으로 해당 문자를 출력하기 때문에 일반적으로 아래와 같이 그냥 하나의 문자를 저장하는 타입이라고 설명하는 것이다.

 

🟩 실수 타입 

실수 타입에는 float과 double 총 두 개가 있다.

 

메모리 크기가 double이 더 큰 만큼, 

double이 float보다 약 2배정도의 정밀도를 갖는다고 한다. 

 

추가로 컴파일러는 실수 리터럴을 기본적으로 double 타입으로 해석한다. 

하지만, 만약 float타입에 대입하고 싶다면 리터럴 뒤에 'f''F'를 붙여 컴파일러가 float타입임을 알 수 있도록 해야한다

double doubleVar = 3.14;
float floatVar = 3.14f;

 

🟩 논리 타입 (boolean) (생략함)

 

🟩 문자열 타입

작은 따옴표(')로 감싼 한 개의 문자는 char타입이지만, 큰따옴표(")로 감싼 여러 개의 문자들은 유니코드로 변환되지 않는다

char var1 = "A"; // Error!
char var2 = "알파메일"; // Error!

 

즉, 문자열을 변수에 저장하고 싶다면, 다음과 같이 String 타입을 사용해야한다. (물론 String타입은 기본타입이 아닌 참조타입이다.)

String var1 = "A";
String var2 = "알파메일";

 

아래는 문자열에 사용할 수 있는 이스케이프 문자의 종류와 예제이다.

 

class HelloWorld {
    public static void main(String[] args) {

        String name = "고동";
        String job = "soccer player";

        String str = "나는 \"자바를\" 배웁니다.";
        System.out.println(str);

        str = "번호\t이름\t직업";
        System.out.println(str);

        System.out.println("나는\n");
        System.out.println("자바를\n");
        System.out.println("배움니다.");
    }
}

 

 

여기까지.. 

 

--------------------------- 

Mvp캠프를 무사히 갔다왔고, 수강신청도 마쳤다(18학점). 

이제 찐 대학생이다!!!! 

+) Mvp캠프 정말 재미있었다!!! 시간가는 줄 모르고 계속 재미있게 논거같다! 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함