언어/Java

변수와 타입

O_oz 2023. 8. 18. 15:07
반응형

1. 변수와 타입

변수 : 값을 저장할 수 있는 메모리 공간 / 한 가지 타입의 값만 저장 가능

타입 : 변수에 저장되는 값의 종류와 범위를 결정짓는 요소

변수 이름 작성 규칙
첫 번째 글자는 문자이거나 '$' 또는 '_' / 숫자로 시작 불가능
대소문자가 구분됨
첫 문자 시작은 영어 소문자, 연속되는 단어의 시작은 대문자로
문자 수의 제한은 없음
자바 예약어는 사용 불가능

 

2. 변수

변수 사용 : 변수에 값을 저장하고 읽는 행위 / 대입 연산자 (=)를 사용

int A;
A = 90;
int B = 90;

초기화 : 변수에 초기값을 주는 행위 / 1, 2 라인처럼 초기화를 나누어 할 수도, 3 라인처럼 한 번에 할 수도 있음

리터럴 (literal) : 소스 코드 내에서 직접 입력된 값

    - 정수 리터럴 : byte, char, short, int, long 타입 / 소수점 없음 = 10진수 / 0으로 시작 = 8진수 / 0x 또는 0X로 시작 = 16진수

    - 실수 리터럴 : float, double 타입 / 소수점으로 표현 = 10진수 실수 / E 또는 e로 표현 = 10진수 지수와 가수

    - 문자 리터럴 : char 타입 / 작은 따옴표로 묶은 텍스트

    - 문자열 리터럴 : String 타입 / 큰 따옴표로 묶은 텍스트

    - 논리 리터럴 : boolean 타입

 

변수의 사용 범위 : 변수는 중괄호 {} 블록 내에서 선언되고 사용됨 (클래스, 생성자, 메소드, 제어문)

    - 로컬 변수 : 메소드 블록 내에서 선언된 변수 / 메소드 실행이 끝나면 메모리에서 자동으로 제거

public class Example {
	public static void main (String[] args) {
    	int a = 15;
        if (a > 10) {
        	int b = a - 10;
        }
        int c = a + b + 5;	// "b cannot be resolved to a variable" 에러
    }
}

 

3. 타입

값의 종류 기본 타입 메모리 사용 크기 값의 범위
정수 byte 1 byte 8 bit -$2^7$ ~ ($2^7$ - 1)
char 2 byte 16 bit 0 ~ $2^{16}$ - 1
short 2 byte 16 bit -$2^{15}$ ~ ($2^{15}$ - 1)
int 4 byte 32 bit -$2^{31}$ ~ ($2^{31}$ - 1)
long 8 byte 64 bit -$2^{63}$ ~ ($2^{63}$ - 1)
실수 float 4 byte 32 bit  
double 8 byte 64 bit  
논리 boolean 1 byte 8 bit true, false

각 타입에 저장할 수 있는 값의 범위를 초과하게 되면 쓰레기 값이 저장됨

정수 타입

    - 기본 정수 연산은 int 타입 : byte 타입 + short 타입 = 두 변수 모두 int 타입으로 변환 후 연산, 결과는 int 타입

    - byte 타입 : 색상 정보 및 파일 또는 이미지 등의 이진 데이터를 처리할 때 사용

    - char 타입 : 자바는 모든 문자를 유니코드로 처리 / 특정 문자의 유니코드를 안다면 10진수 또는 \u + 16진수 형태로 값을 저장해도 됨 /  문자열을 저장하고 싶다면 String 타입을 사용 (String은 클래스 타입이고 String 변수는 참조 변수)

public class Example {
	public static void main (String[] args) {
    	char c1 = 'A';					// 문자 직접 저장
        char c2 = 65;					// 10진수로 저장
        char c3 = '/u0041';				// 16진수로 저장
        int unicode = c1;
        
        System.out.println(c1);			// A
        System.out.println(c2);			// A
        System.out.println(c3);			// A
        System.out.println(unicode);	// 65
    }
}

    - short 타입

    - int 타입 : 정수값을 8진수, 10진수, 16진수 형태로 저장 할 수 있으며, 8진수는 숫자앞에 '0', 16진수는 '0x'를 붙임

    - long 타입 : 초기화 시 정수값 뒤에 'l'이나 'L'을 붙임

 

실수 타입 (float, double)

    - 실수는 부동 소수점 (floating-point) 방식으로 저장됨 / float 타입과 double 타입은 가수와 지수를 저장하기 위해 전체 bit를 나누어 사용하기 때문에 할당 bit가 큰 double은 더 정밀한 값을 저장할 수 있음

    - 실수 리터럴의 기본 타입은 double

    - float 타입 변수에 실수 리터럴을 저장하기 위해선 실수 리터럴 뒤에 'f'나 'F'를 붙여야 함

 

논리 타입

    - 논리값 (true / false)을 저장할 수 있는 데이터 타입

    - 상태값에 따라 조건문과 제어문의 실행 흐름을 변경하는데 주로 이용

 

4. 타입 변환

데이터 타입을 다른 데이터 타입으로 변환하는 것으로 자동 타입 변환과 강제 타입 변환이 존재

 

자동 타입 변환 : 작은 크기를 가지는 타입이 큰 크기를 가지는 타입에 저장될 때 발생

    - 변환 이전의 값과 변환 이후의 값은 동이

    - 정수 타입을 실수 타입으로 변환 시 무조건 자동 타입 변환 발생 (200 > 200.0으로 변환)

    - 음수가 저장된 byte 타입을 char 타입으로 변환 불가능 (char 타입은 음수를 저장할 수 없기 때문)

    - 서로 다른 타입의 피연산자들 끼리의 연산에서도 발생 : 두 피연산자 중 크기가 큰 타입으로 자동 변환 후 연산이 수행되고 결과는 변환 된 타입으로 저장됨

 

강제 타입 변환 (캐스팅 : Casting) : 강제적으로 큰 데이터 타입을 작은 데이터 타입으로 쪼개어서 저장하는 것 / 캐스팅 연산자 () 사용

    - 기존 타입의 값이 보존되지 않을 수 도 있음

    - 실수 타입을 정수 타입으로 변환 시 소수점 이하 부분은 버려지고, 정수 부분만 저장됨

    - 강제 타입 변환 시 값이 손실될 수 있으므로 변환 전 값이 보존되는지 확인이 필요함

    - 정수 타입을 실수 타입으로 변환 시 실수 타입의 가수 비트 수에 따라 변환 값이 달라질 수 있음 >> double 타입으로 변환하자

public class Example {
	public static void main (String[] args) {
    	int i = 128;
        
        if ( (i < Byte.MIN_VALUE) || (i > Byte.MAX_VALUE) ) {
        	System.out.println("byte 타입으로 변환할 수 없습니다.");        
        }
        else {
        	byte b = (byte) i;
            System.out.println(b);
        }
    }
}
기본 타입 최대값 상수 최소값 상수
byte Byte.MAX_VALUE Byte.MIN_VALUE
short Short.MAX_VALUE Short.MIN_VALUE
int Integer.MAX_VALUE Integer.MIN_VALUE
long Long.MAX_VALUE Long.MIN_VALUE
float Float.MAX_VALUE Float.MIN_VALUE
double Double.MAX_VALUE Double.MIN_VALUE
반응형

'언어 > Java' 카테고리의 다른 글

클래스  (2) 2023.08.23
참조 타입  (0) 2023.08.21
조건문과 반복문  (0) 2023.08.20
연산자  (0) 2023.08.20
자바 시작  (0) 2023.08.17