[Java] 변수 기본 타입

soheeoott·2021년 8월 28일
0

Java

목록 보기
5/12

기본 타입은 변수를 선언할 때 사용한다.
변수 타입에 따라 변수에 저장할 수 있는 값의 종류와 허용 범위가 달라진다.
그러므로 타입의 종류와 허용 범위에 대해 알아두어야 한다.

기본 타입 (Primitive Type)

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


리터럴 (literal)

소스 코드에서 프로그래머에 의해 직접 입력된 값을 말한다.
정수로 인식되는 리터럴이 있는데, 2진수, 8진수, 10진수, 16진수 별로 리터럴을 작성하는 방법이 다르다.
진수를 다른 진수로 변환할 때 뒤에서 앞으로 계산한다.

2진수
0b 또는 OB로 시작하고, 0과 1로 구성된다.

0b1011; 
// 1x(2^0)=1, 1x(2^1)=2, 0, 1x(2^3)=8 
// 1+2+8=11

8진수
0으로 시작하고, 0~7의 숫자로 구성된다.

013; 
// 3x(8^0)=3, 1x(8^1)=8 
// 8+3=11

10진수
소수점이 없는 0~9 숫자로 구성된다.

12
365

16진수
0x 또는 0X로 시작한다.
0~9 숫자와 A, B, C, D, E, F 또는 a, b, c, d, e, f로 구성된다.

0xB3; 
// 3x(16^0)=3, B(11)x(16^1)=176
// 3+176=179

정수 타입

각각의 타입마다 사용하는 메모리의 크기가 다르기 때문에,
메모리를 사용하는 크기와 저장되는 값의 허용 범위가 각각 다르다.

메모리
0과 1로 저장되는 저장소를 말한다.
한 칸의 단위를 bit라고 하는데, 8개가 모이면 1byte가 된다.

값의 범위
byte : -2⁷ ~ (2⁷-1)
1. 첫 번째 칸의 bit는 양수와 음수를 구분한다 (0 = 양수, 1 = 음수)
2. 나머지 7개의 bit로 수의 크기가 결정된다.
3. 2진수이므로 10진수로 변환하기 위해 2의 제곱으로 계산한다.
4. 중간에 0이 포함되어 있기 때문에 값의 범위에서 하나를 뺀다.

char 타입은 문자 코드를 저장하는 용도로 사용하는데, 문자 코드에는 음수가 없다.

값의 범위를 초과한 값을 저장하면 컴파일 오류가 발생한다.

public class ByteExample {
 
    public static void main(String[] args) {
 
        byte value1 = -128;
        byte value2 = 200; // 값의 범위 초과
    }
}

주의사항
자바 컴파일러는 정수 리터럴을 기본적으로 int 타입으로 인식한다.
int 타입 값의 범위를 초과하면 컴파일 에러가 발생한다.
컴파일러에게 long 타입임을 알려주려면 리터럴 뒤에 L(대문자) 또는 l(소문자)을 붙여주면 된다.

public class LongExample {
 
    public static void main(String[] args) {
 
        long value1 = 10;
        long value2 = 200000000000;  // 컴파일 에러, int 타입으로 인식
        long value3 = 200000000000L; // long 타입으로 인식
    }
}

char 타입

작은 따옴표(')로 감싼 하나의 문자 리터럴을 저장할 수 있는 타입이다.
유니코드 값으로 변환되어 저장된다.
정수 타입이므로 10진수 또는 16진수 형태의 유니코드 값을 저장할 수 있다.
문자 코드에는 음수가 없으므로 음수값을 저장하면 컴파일 에러가 발생한다.
유니코드의 또다른 표현 방식으로 /u(이스케이프 문자)가 있지만 잘 쓰이지는 않는다.

public class UnicodeExample {

    public static void main(String[] args) {

        char value1 = '한'; // 유니코드 : 54620
        char value2 = '국'; // 유니코드 : 44397

        char value3 = '\u0041'; // A
        char value4 = 54620; // '한'
        char value5 = 44397; // '국'
    }
}

유니코드 (Unicode)
전 세계의 모든 문자를 숫자로 매겨놓은 것을 의미한다.

문자열
자바는 문자와 문자열을 다르게 구분한다.
큰따옴표로 감싼 문자들을 문자열이라고 한다.
char 타입에 저장할 수 없고, String 타입 변수에 저장해야 한다.
String 타입은 기본 타입이 아닌 참조 타입이다.

String nation = "대한민국";

이스케이프 문자 (escape)

문자열 안에 \를 함께 사용한 문자를 말한다.
특정 문자를 포함시키거나, 문자열의 출력을 제어할 수 있다.

문자열 내부에 " 문자를 포함
큰 따옴표는 문자열을 감싸는 기호로 사용된다.
문자열 안에 또 다른 큰 따옴표를 사용하려면 이스케이프 문자를 활용해야 한다.

String str = "나는 \"자바\"를 공부합니다.";
// 나는 "자바"를 공부합니다.

문자열 출력 제어
문자열과 문자열의 사이가 탭키를 눌렀을 때 생기는 공백만큼 멀어진다.

String str = "이름\t생년월일";
// 이름	생년월일

개행을 의미하며 이스케이프 문자를 기준으로 앞과 뒤의 문자열이 줄 바꿈 된다.

String str = "이름\n생년월일";
// 이름	
// 생년월일

종류

이스케이프 문자 출력 용도
\t 탭만큼 띄움
\n 줄 바꿈 (라인 피드)
\r 캐리지리턴
\* " 출력
\' ' 출력
\\ \ 출력
\u16진수 16진수 유니코드에 해당하는 문자 출력

실수 타입

자바는 두 가지의 실수 타입을 제공한다.
float 타입은 부동 소수점 방식이어서 0을 정확하게 저장할 수 없다.

double 타입은 float 타입보다 좀 더 정확한 데이터를 저장할 수 있다.

float value1 = 0.1234567890123456789012345f;
// 0.12345679 

double value2 = 0.1234567890123456789012345;
// 0.12345678901234568

자바 컴파일러는 실수 리터럴을 기본적으로 double 타입으로 인식한다.
double 타입의 값을 float 타입에 저장할 수 없으므로 컴파일 에러가 발생한다.
실수 리터럴을 double 타입에 저장하거나,
컴파일러에게 float 타입임을 알려주기 위해 리터럴 뒤에 F(대문자) 또는 f(소문자)을 붙여주면 된다.

float value1 = 3.14  // 컴파일 에러
double value2 = 3.14 // 해결 방법 1
float value3 = 3.14f // 해결 방법 2

실수 리터럴

실수 리터럴을 표현하는 방법은 두 가지가 있다.

소수점 작성

3.14, -3.14

알파벳 e 또는 E
10은 지수, e 또는 E 뒤에 입력한 숫자는 가수가 된다.

5e2     // 5.0 x 10² = 500.0
0.12E-2 // 0.12 x 10-² = 0.0012

논리 타입

참과 거짓에 해당하는 true와 false 리터럴을 저장하는 타입이다.
boolean 타입에 저장해야 한다.
두 가지 상태값(true, false)에 따라 제어문의 실행 흐름을 변경할 수 있다.

boolean stop = true;
 
if (stop) {
    // true 일 때 실행
    System.out.println("정지");
} else {
    // false 일 때 실행
    System.out.println("시작");
}
// 정지
boolean stop = false;
 
if (stop) {
    // true 일 때 실행
    System.out.println("정지");
} else {
    // false 일 때 실행
    System.out.println("시작");
}
// 시작

혼공자 강의를 기반으로 작성하였습니다. 🙏
8강 9강

profile
📚 글쓰는 습관 들이기 📚

0개의 댓글