2024-06-26 20:06:13

변수 (Variable)

2-3 변수

- 사람의 나이는 해가 바뀌면 변한다. (age)

- 두 수를 이용하여 사칙 연산을 하면 그 결과 값은 연산자에 따라 달라진다. (result)

- 게임을 하면 게임 레벨이 점점 올라간다. (level)

-> 프로그래밍에서 값(Data)을 사용하기 위해 선언하는 것을 변수라고 함.

  • 프로그램에서 사용되는 자료를 저장하기 위한 공간
  • 할당 받은 메모리의 주소 대신 부르는 이름
  • 프로그램 실행 중에 값 변경 가능
  • 사용되기 이전에 선언 되어야 한다.

자료형 (Data Type)

데이터형의 종류와 사용법 익히기

- 자바는 엄격한 정적 타입 지정 언어이므로 반드시 데이터형(Data type)을 선언

- 데이터형은 각각 메모리 크기가 다르며 저장할 수 있는 데이터의 종류도 다름

- 그러므로 변수 데이터의 목적에 맞는 데이터형 선택이 필요

- 개발자는 자신이 사용하고자 하는 데이터에 따라서 적절한 데이터형을 선택할 수 있어야 함

 

기본형 (Primitive Type)

- 숫자형 (Numeric Type)

    정수형 (Integral Type) : byte, short, int, long, char

    부동소수형 (Floating-Point Type) : float, double

- 불리언형 (boolean Type) : boolean

- 주소 반환형 (returnAddress) : 

참조형 (Reference Type)

- reference

    class type

    interface type

    array type

데이터형 메모리 크기 유효 저장 범위
byte 8bit -27 ~ 27 -1 사이의 값
short 16bit -215 ~ 215 -1 사이의 값
int 32bit -231 ~ 231 -1 사이의 값
long 64bit -263 ~ 263 -1 사이의 값
char 16bit 0 ~ 216 -1 사이의 값
float 32bit sing-precision float
double 64bit double-precision float

 

- 논리 타입

    boolean : 1bit, true 또는 false

- 문자 타입

    char : 2 바이트, Unicode

- 정수 타입 

    byte : 1 바이트, -128 ~ 127

    short : 2 바이트, -32,768 ~ 32,767

    int : 4 바이트,-231~ 231-1      *JDK8부터 양수(0~232-1)로도 사용 가능

    long : 8 바이트, -263 ~ 263-1 *JDK8부터 양수(0~ 264-1)로도 사용 가능

- 실수 타입

    float : 4 바이트, -3.4E38 ~ 3.4E38

    double : 8 바이트, 1.7E308 ~ 1.7E308

 

byte : 1 바이트 단위의 자료형으로 동영상, 음악 파일 등 실행 파일의 자료를 처리할 때 사용하기 좋은 자료형

short : 2 바이트 단위의 자료형으로 주로 c/c++ 언어와의 호환 시 사용

int : 4 바이트 단위의 자료형으로 자바에서 사용하는 정수에 대한 기본 자료 형, 프로그램에서 사용하는 모든 숫자(literal)은 기본적으로 int
       로 저장됨 * 32비트를 초과 하는 경우 long으로 처리를 해야함

long : 8 바이트 단위의 자료형으로 가장 큰 정수 자료형, 문자 뒤에 L or l 문자로 long임을 표시해주어야 한다.

char : 2 바이트 단위의 자료형으로 컴퓨터에서는 문자도 내부적으로는 비트의 조합으로 표현되므로 인코딩과 디코딩을 거쳐서 표현한다.

           * 인코딩 : 각 문자에 따른 특정한 숫자 값(코드 값)을 부여 // * 디코딩 : 숫자 값을 원래 문자로 변환

public class Character{
	public static void main(String[] args){
    	char ch1 = 'A';
        System.out.println(ch1);		// 문자 그대로 출력 A
        System.out.println((int)ch1);		// 문자에 해당하는 정수 값(아스키 코드 값)을 출력 여기에서는 (int)를 통해 강제 형변환을 시켜주었음. 65
        
        char ch2 = 66;				// ch2에 정수 값 66을 대입
        System.out.println(ch2);		// ch2는 char형으로 선언되었기 때문에 형변환이 이루어져 문자인 B가 출력됨.
        
        int ch3 = 67;				// 정수형 변수 ch3에 67을 대입
        System.out.println(ch3);		// 정수형 정수 값인 67이 출력
        System.out.println((char)ch3)		// 정수 값에 해당하는 문자로 (char)로 강제 형변환이 이루어짐으로 C가 출력됨
	}
}

문자세트 : 문자를 위한 코드 값 (숫자 값)들을 정해 놓은 세트

아스키 (ASCII) : 1 바이트로 영·문자, 숫자, 특수문자 등을 표현함

유니코드 (Unicode) : 한글과 같은 복잡한 언어를 표현하기 위한 표준 인코딩 UTF-8, UTF-16이 대표적

문자를 변수에 저장하면 ? 문자에 해당하는 코드 값이 저장됨

자바는 유니코드 UTF-16 인코딩 사용함.

float, double : 실수 자료형으로 float 는 4 바이트, double은 8 바이트 자료형임 이때 사용하는 방식이 부동 소수점 방식을 사용함

부동 소수점 방식 : 실수를 지수부와 가수부로 표현함, 무한의 실수를 표현하기 위한 방식

ex) 0.1을 표현 하면?

1.0 10-1(지수)
가수 밑수

실수는 기본적으로 double로 처리함

float 형으로 사용하는 경우에는 f  or F를 표시함

지수와 가수로 표현되는 부동 소수 점은 0을 표현할 수 없음, 따라서 부동 소수점 방식에서는 약간의 오차가 발생할 수 밖에 없음.

ex)

public class Double{
	public static void main(String[] args){
    	double dnum = 1;			// double형 변수 dnum에 1을 대입해줌
    	
        for(int i = 0; i < 10000; i++){		// for 문(추후 블로그에 기술예정)을 통해 10000번을 0.1을 더해줌
        	dnum = dnum + 0.1;		// 초기값은 1이기 때문에 결과 값은 1001이 되어야함
        }
        System.out.println(dnum);		// 하지만 출력해보면 1001.000000000159 이런식으로 출력이됨.
						// 이는 지수와 가수로 표현되는 부동 소수 방식에서는 0이 표현될 수 없기 때문에 
						// 넒은 범위의 수를 표현하여 오차를 최소화 시킨 것임
    }
}

boolean : true(참), false(거짓)을 표현하는 자료형 (while문 등에서 많이 사용함)

 

리터럴(literal)

프로그램에서 사용하는 모든 숫자, 값, 논리 값 (ex) 10, 3.14, 'A', true

리터럴에 해당되는 값은 특정 메모리 공간인 상수 풀(contant pool)에 존재하며 필요한 경우 상수 풀에서 가져와서 사용

상수 풀에 저장할 때는 정수는 int로 실수는 double로 저장

따라서, long이나 float 값으로 저장해야하는 경우 식별자(L, l, F, f)를 명시해야함.

형 변환(type conversion)

자료형은 각각 사용하는 메모리 크기와 방식이 다름

서로 다른 자료형의 값이 대입되는 경우 형 변환이 일어남

묵시적 형변환 : 작은 수에서 큰 수로 / 덜 정밀한 수에서 더 정밀한 수로 대입되는 경우 

ex) long num = 3; // int 값에서 long으로 자동 변환되며 L, l을 명시하지 않아도 됨

-> 반대의 경우? : 변환되는 자료 형을 명시해야 함 자료의 손실이 발생할 수 있음 

ex) double dnum = 3.14; 

int num = (int)dNum; // 자료형 명시

'Java' 카테고리의 다른 글

Java 정리 4-1  (0) 2024.07.01
Java 정리 3  (0) 2024.06.28
Java 정리 2-2  (0) 2024.06.25
Java 정리 2-1  (0) 2024.06.25
Java 정리 1-2  (0) 2024.06.25