키모스토리

변수 및 기본 타입 본문

Java/Java Basic

변수 및 기본 타입

키모형 2023. 2. 22. 13:27

1. 변수선언

변수는 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름.

변수는 선언될 때의 타입에 따라 저장 할 수 있는 값의 종류와 허용 범위가 달라진다.

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

 

기본타입 8가지

정수 타입 : byte, short, char, int, long

실수 타입 : float, double

논리 타입 : boolean

 

변수 선언 형식 : 변수타입 변수명

int age;   // 정수타입 변수 age 선언 

double value;  // 실수타입 변수 value 선언

 

int score;       // 변수선언

score = 100;  // 변수에 값을 대입 

int number = 200; // 변수 선언 과 동시에 초기값 설정 가능

 

2. 정수 타입

타입 메모리크기 저장되는 값의 허용범위
byte 1byte 8bit -128 ~ 127
short 2byte 16bit -32,768 ~ 32,767
char 2byte 16bit 0 ~ 65535 (유니코드)
int 4byte 32bit -2,147,483,648 ~ 2,147,483,647
long 8byte 64bit -9,223,372,036,854,775,808~
 9,223,372,036,854,775,807

자바에서는 정수 연산은 기본적으로 int 타입으로 처리한다.

현재 사용하려는 숫자의 범위에 따라 타입을 선택 하여 이용한다.

 

* 오버플로우 / 언더플로우

byte의 경우 최대값 127 을 넘어가게 된다면, 다시 -128 부터 돌아가서 시작하게 된다. (오버플로우 : Overflow)
반대로 -128 에서 -1 을 더하게 된다면, 최대값 127로 돌아가게 된다. (언더플로우 : Underflow)

 

char 타입

C 언어와 C ++ 에서는 아스키코드를 이용하여 문자를 표현하지만,
자바에서는 유니코드(unicode)를 사용해서 문자를 표현한다.

  • char 타입에는 문자를 직접 저장할 뿐만 아니라 10 진수, 16 진수 정수도 저장이 가능하다.
  • 정수로 저장할 경우, 출력 시 정수 값에 해당되는 유니코드 문자가 출력된다.
public static void main(String[] args) {

		char c1 = 'A';    		//문자를 직접 저장 가능
		char c2 = 65;   		//10 진수 문자로 저장
		char c3 = '\u0041';  	// 16 진수 문자로 저장
		char c4 = '가';  		// 문자 저장
		char c5 = 44032;  		// 10 진수 정수 저장
		int uniCode = c1;  		// 유니코드 정수값을 저장하기 위한 변수
		
		System.out.println(c1);   // A
		System.out.println(c2);   // A
		System.out.println(c3);   // A
		System.out.println(c4);   // 가
		System.out.println(c5);   // 가        
		System.out.println(uniCode);   // 65
        
}

 

int 타입

정수 연산의 기본 타입으로 사용된다.
byte, short 타입을 연산할 시 int 타입으로 변환되고, 연산 결과 역시 int 타입으로 변환되어 저장된다. (자동 타입 변환)

어떠한 진수로 입력하더라도, 모두 2 진수로 변환되어 비트에 저장된다.

(10진수 10 은 2진수  00000000 00000000 00000000 00001010 (4 byte) 로 저장된다)

public static void main(String[] args) {
    int var1 = 10;    // 10 진수로 저장
    int var2 = 012;   // 8 진수로 저장 (앞에 0을 붙이고 뒤에 8진수 숫자)
    int var3 = 0xA;   // 16 진수로 저장 (앞에 0x를 붙이고 뒤에 16진수 숫자)

    System.out.println(var1);    // 10 출력
    System.out.println(var2);    // 10 출력
    System.out.println(var3);    // 10 출력
}

 

 

3. 실수 타입

타입 메모리크기 저장되는 값의 허용범위 유효 소수 이하 자리
float 4byte 32bit 1.4E-45 ~ 3.4028235E38  7자리
double 8byte 64bit 4.9E-324 ~ 1.7976931348623157E308 15자리

실수 타입에는 float 과 double 타입이 있다.

자바에서는 실수 연산은 기본적으로 double 타입으로 처리한다.

정수 리터럴에 10 의 지수를 나타내는 e 또는 E 가 포함되어 있다면 (부동 소수점 방식)
실수 타입 변수 (float, double) 에 저장해야 한다.

 

자바의 실수 타입의 기본 처리는 double 타입이므로,

float 타입에 값을 저장하려면 실수 리터럴 뒤에 f 또는 F 를 붙여야 한다.

float flovar1= 3.14;     // f 를 붙이지 않고 저장하면 컴파일 에러 발생!
float flovar2= 3.14f;    // 3.14 실수 리터럴이 저장된다.

 

실수 타입 float, double 의 메모리 사용은 각각 정수 타입 int, long과 같지만,

부동 소수점 방식으로 저장되어 더 큰 범위의 값을 저장할 수 있다.

float 타입은 소수점 아래 9 자리까지만 표현할 수 있는 반면,

double 타입은 소수점 아래 18 자리까지도 표현할 수 있다.

public static void main(String[] args) {
    // 실수 저장
    double var1 = 3.14;
    float var2 = 3.14f;

    // 정밀도 테스트
    double var3 = 0.1234567890123456789;
    float var4 = 0.1234567890123456789F;

    System.out.println("var1 : "+var1); //var1 : 3.14
    System.out.println("var2 : "+var2); //var2 : 3.14
    System.out.println("var3 : "+var3); //var3 : 0.123456789012345678 
    System.out.println("var4 : "+var4); //var4 : 0.123456789  

    //e 사용해서 저장
    int var5 = 3000000; 
    double var6 = 3e6; 
    float var7 = 3e6F; 
    double var8 = 2e-3;

    System.out.println("var5 : "+var5); //var5 : 3000000 
    System.out.println("var6 : "+var6); //var6 : 3000000.0 
    System.out.println("var7 : "+var7); //var7 : 3000000.0 
    System.out.println("var8 : "+var8); //var8 : 0.002
}

부동 소수점 방식

하나의 실수를 가수와 지수 부분으로 나누어 소수점을 움직이면서 표현하는 방식이다.
대부분의 시스템에서는 실수를 IEEE 754 표준 부동 소수점 방식으로 표현하고 있다.

 

부동 소수점 방식의 오차

고정 소수점 방식보다 표현 범위가 더 넓지만,
부동 소수점으로 표현하는 실수는 항상 오차가 존재하는 단점을 가지고 있다.

즉, 컴퓨터에서 실수를 표현할 때는 정확한 표현이 아닌 근사치를 표현하는 것이다.

 

 

4. 논리 타입 (boolean)

타입 메모리크기 저장되는 값의 허용범위
boolean 1byte 8bit true / false 

1 byte (8 bit) 크기를 갖는다.  true / false 값을 갖는다.

조건문과 제어문에서 실행의 흐름을 변경하는데 주로 이용한다.

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

 

 

반응형

'Java > Java Basic' 카테고리의 다른 글

콘솔로 변수값 출력 - print(), println(), printf()  (0) 2023.02.24
문자열 타입 (String)  (0) 2023.02.22
타입 변환  (0) 2023.02.22
Java 입문  (0) 2023.02.21