언어/Java

[Java 개념] Chapter 2-2 : 기본 타입

장효창 2021. 12. 12. 00:20

2021.12.11 - [코드/Java] - Chapter 2-1 : 변수

 

Chapter 2-1 : 변수

변수 : 값을 저장할 수 있는 메모리의 특정 번지에 붙이는 이름 - 프로그램은 변수를 통해 메모리의 특정 번지에 값을 저장하고 읽을 수 있다. 사용자가 메모리에 값을 저장하고 싶다면 변수를

arcticfox96.tistory.com

- 기본 타입

자바는 정수, 실수, 논리값을 저장할 수 있는 총 8개의 기본 타입을 제공한다. 

정수를 저장할 수 있는 타입은 byte, char, short, int, long

소수점이 있는 실수를 저장할 수 있는 타입은 float, double

 true, false와 같은 논리값을 저장할 수 있는 타입은  boolean

<타입별 메모리 사용 크기와 허용범위>

- 정수 리터럴

소스 코드에서 프로그래머에 의해 직접 입력된 값을 리터럴 이라고 한다.

<자바가 정수로 인식하는 경우 - 정수 리터럴>

public class ex2_5 {
    public static void main(String[] args){
        int var1 = 0b1011;
        int var2 = 0206;
        int var3 = 365;
        int var4 = 0x83;

        System.out.println("var1 = " + var1);
        System.out.println("var2 = " + var2);
        System.out.println("var3 = " + var3);
        System.out.println("var4 = " + var4);
    }
}

위의 코드를 실행하면 

var1 = 11
var2 = 134
var3 = 365
var4 = 131 의 결과 값을 얻는다.

public class ex2_6 {
        public static void main(String[] args){
            byte var1 = -128;
            byte var2 = -30;
            byte var3 = 0;
            byte var4 = 30;
            byte var5 = 127;
            byte var6 = 128;
    
            System.out.println("var1 = " + var1);
            System.out.println("var2 = " + var2);
            System.out.println("var3 = " + var3);
            System.out.println("var4 = " + var4);
            System.out.println("var5 = " + var5);
            System.out.println("var6 = " + var6);
        }
    
}

해당 코드 실행 시 컴파일 오류 발생. byte의 표현 범위를 넘었기 때문이다.

 

- long 타입

 

long 타입은 수치가 큰 데이터를 다루는 프로그램에서 사용 - 은행 or 과학

 

기본적으로 컴파일러는 정수리터럴을 int 타입으로 간주하고 int 범위를 넘는 경우 컴파일러에게 long 타입임을 명시

간단하게 값 끝에 L값을 붙여주면 된다.

long balance = 3000000000; // 컴파일 에러
long balance = 3000000000L;
public class ex2_7 {
    public static void main(String[] args){
        long var1 = 10;
        long var2 = 20L;
        // long var3 = 100000000000;
        long var4 = 100000000000L;

        System.out.println("var1 = " + var1);
        System.out.println("var2 = " + var2);
        // System.out.println("var3 = " + var3);
        System.out.println("var4 = " + var4);

    }
}

-char 타입

하나의 문자를 작은따옴표로 감싼 것을 문자 리터럴이라고한다. 문자 리터럴은 유니코드로 변환되어 저장된다.

char var1 = 'A'; // 유니코드: 65
char var2 = 'B'; // 유니코드: 66
char var3 = '가'; // 유니코드: 44032
char var4 = '각'; // 유니코드: 44033

유니코드가 정수이기 때문에 char도 정수 타입에 속한다. 따라서 다음과 같은 표현도 가능하다.

char c = 65;		//10진수
char c = 0x0041;	//16진수

※ 문자 리터럴을  int 타입에 저장하는 경우

문자 리터럴은 유니코드로 변환되기 때문에 int 타입에도 저장할 수 있지만 유니코드 자체를 출력한다.

public class ex2_8 {
    public static void main(String[] args){
        char c1 = 'A';
        char c2 = 65;
        char c3 = '\u0041';

        char c4 = '가';
        char c5 = 44032;
        char c6 = '\uac00';

        System.out.println(c1);
        System.out.println(c2);
        System.out.println(c3);
        System.out.println(c4);
        System.out.println(c5);
        System.out.println(c6);
    }
}

출력 결과

A
A
A


 

- String 타입

작은따옴표로 감산 문자는 char 타입으로 저장되어 유니코드로 저장되지만 큰따옴표로 감싼 문자 또는 여러 개의 문자들은 유니코드로 변환되지 않는다.

char var1 = "A";
char var2 = "홍길동";

자바에서 큰 따옴표로 감싼 문자들을 문자열이라고 부른다.

public class ex2_9 {
    public static void main(String[] args){
        String name = "홍길동";
        String job = "프로그래머";
        System.out.println(name);
        System.out.println(job);
    }
}

해당코드는 홍길동, 프로그래머를 출력한다.

 

※ 이스케이프 문자

문자열 내부에 역슬래시가 붙은 문자를 사용할 수 있는데 이를 이스케이프 문자라고 한다.

이스케이프 문자를 사용하면 문자열 내부에 특정 문자를 포함시킬 수 있다.

String str = "나는 \"자바\"를 좋아합니다.";
System.out.println(str)

=> 나는 "자바"를 좋아합니다.

- 자주 사용되는 이스케이프 문자

public class ex2_10 {
   public static void main(String[] args){
       System.out.println("번호\t이름\t직업");
       System.out.print("행 단위 출력\n");
       System.out.print("행 단위 출력\n");
       System.out.println("우리는 \"개발자\" 입니다.");
       System.out.print("봄\\여름\\가을\\겨울");
   } 
}

출력은 다음과 같다.

번호    이름    직업
행 단위 출력
행 단위 출력
우리는 "개발자" 입니다.
봄\여름\가을\겨울

 

- 실수 타입.

소수점이 있는 실수 리터럴을 저장할 수 있는 타입에는 float과 double이 있다.

다음은 float 타입과 double 다입이 저장할 수 있는 사용 크기와 허용 범위이다.

float 타입과 double 타입의 허용범위

자바는 실수 리터럴은 기본적으로 double 타입으로 해석하기 때문에 double 타입 변수에 저장한다.

실수 리터럴을 float 타입 변수에 저장하면 컴파일 에러가 발생한다.

float var = 3.14;		// 컴파일 에러 발생.
double var = 3.14;
double var = 314e-2

실수 리터럴을 float 타입으로 저장하고 싶다면 뒤에 f 나 F를 붙여 명시해야한다.

float var = 3.14;
float var = 3.14f;
float var = 3E6F;

double 타입은 float 타입보다 2배 정도 정밀도가 높아 정확한 데이터 저장이 가능하다.

public class ex2_11 {
    public static void main(String[] args){
        // float var1 = 3.14;
        float var2 = 3.14f;
        double var3 = 3.14;

        // 정밀도 테스트
        float var4 = 0.1234567890123456789f;
        double var5 = 0.1234567890123456789;

        System.out.println("var2: " + var2);
        System.out.println("var2: " + var3);
        System.out.println("var2: " + var4);
        System.out.println("var2: " + var5);
    }
}

출력 결과는 다음과 같다.

var2: 3.14
var2: 3.14
var2: 0.12345679
var2: 0.12345678901234568

 

- 논리 타입

자바는 참과 거짓을 의미하는 논리 리터럴도 true와 false를 사용한다.

1byte 크기의 boolean 타입 변수에 저장할 수 있다.

 

 boolean stop = true;
 boolean state = false;

논리 타입은 주로 두 가지 상태값에 따라 조건문과 제어문의 실행 흐름을 변경하는 데에 사용.

public class ex2_12 {
    public static void main(String[] args){
        boolean stop = true;
        if(stop){
            System.out.println("중지합니다.");
            }
        else{
            System.out.println("시작합니다.");
        }
    }
}