✅ 00.  변수 선언

컴퓨터 메모리(RAM)는 수많은 번지들로 구성된 데이터 저장 공간이다. 프로그램은 데이터를 메모리에 저장하고 읽는 작업을 빈번히 수행한다. 이때 데이터를 어디에, 어떤 방식으로 저장할지 정해져 있지 않다면 메모리 관리가 무척 어려워진다. 프로그래밍 언어는 이 문제를 해결하기 위해 변수를 사용한다.

 

 

 

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

 

 

 

※ 자바의 변수는 다양한 타입의 값을 저장할 수 없다. 즉, 정수형 변수에는 정수값만 저장할 수 있고, 실수형 변수에는 실수값만 저장할 수 있다.

 

변수를 사용하려면 변수 선언이 필요한데, 변수 선언은 어떤 타입의 데이터를 저장할 것인지 그리고 변수 이름이 무엇인지를 결정하는 것이다.

 

int age  // 정수(int) 값을 저장할 수 있는 age 변수 선언
double value //실수(double) 값을 저장할 수 있는 value 변수 선언
char korea //문자(char) 값을 저장할 수 있는 korea 변수 선언
String St //문자열(String) 값을 저장할 수 있는 St 변수 선언

 

변수 이름은 첫 번쨰 글자가 문자여야 하고, 중간부터는 문자, 숫자, $, _를 포함할 수 있다. 

 

여기서 주의할점은 변수 선언은 저장되는 값의 타입과 이름만 결정된 것이지 아직 메모리에 할당된 것은 아니다. 변수에 최초로 값이 대입될 때 메모리에 할당되고, 해당 메모리에 값이 저장된다. ※ 

 

 

 

변수 선언(컴파일에러)

이처럼 변수에 저장되는 값의 타입과 이름만을 결정하여 실행하면, 다음과같이 Debug가 자동으로 실행되며, 컴파일에러가 된다!!!

 

 

컴퓨터는 너무 똑똑해서 문제야.... 대충 넘어가지그냥..

 

 

 

 그렇다면, 변수선언을 정상적으로 실행하기 위해서는 변수에 최초로 값을 대입하는 행위인 "변수 초기화"를 실행해줘야 하고 이때의 값을 초기값이라고 한다. 

 

 

int age = 5; // 정수(int)값을 5로 초기화함
double value = 11.5; //실수(double)값을 11.5로 초기화함
char korea = "가"; //문자(char)값을 '가'로 초기화함
String St = "가나다"; //문자열(String)값을 "가나다"로 초기화함

 

 

변수 선언(정상실행)

이처럼 변수 초기화를 정상적으로 실행해줘서 옳바른 출력값이 나오게 됐다. (야호)

 

 

 

✅ 01. 타입 (정수, 실수, 문자(열), 논리)

가. 데이터 타입

변수는 선언될 때의 타입에 따라 저장할 수 있는 값의 종류와 허용 법위가 달라진다. 자바는 정수, 실수, 논리값을 저장할 수 있는 기본 타입이 있다.

 

 

나. 자동 타입 변환

자동 타입 변환은 말 그대로 자동으로 타입 변환이 일어나는 것을 말한다. 자동 타입 변환은 값의 허용 범위가 작은 타입이 허용 범위가 큰 타입으로 대입될 때 발생한다.

byte < short < char < int < long < float < double

(기본 타입을 허용 범위 순으로 나열)

 

 

 

int 타입이 byte 타입보다 허용범위가 더 크기 때문에 다음 코드는 자동 타입 변환이 된다. (byte < int)

byte byteValue=10; 
int intValue = byteValue;

 

 

그러나 자동 타입 변환에서 예외가 있다. char 타입보다 허용 범위가 작은 byte 타입은 char 타입으로 자동 변환될 수 없다. 왜냐하면 char 타입의 허용 범위는 음수를 포함하지 않는데. byte 타입은 음수를 포함하기 때문이다. 

 

byte byteValue =65;
char cahrValue = byteValue;

 

이처럼 허용 범위를 만족하지 못해서 컴파일 에러가 발생하면서, Debug가 나온다. 그렇다면 이렇게 허용 범위를 만족하지 못하면 영원히 타입 변환을 할 수 없을까? 다음 파트에서 공부해보자

 

 

 

다. 강제 타입 변환

큰 허용 범위 타입은 작은 허용 범위 타입으로 자동 타입 변환될 수 없다. 하지만 큰 허용 범위를 작은 허용 범위 단위로 쪼개어서 일부분만 넣는 것은 가능하다. 

큰 허용 범위 타입을 작은 허용 범위 타입으로 쪼개어서 저장하는 것을 강제 타입 변환(casting)이라고 한다. 강제 타입 변환은 캐스팅 연산자로 괄호 () 를 사용하는데, 괄호 안에 들어가는 타입은 쪼개는 단위이다.

 

 

다음과 같이 큰 허용 범위에서 작은 허용 범위를 강제로 타입변경하는 중요한 예시를 몇개 들어봤다. 

 

 

long → int

long longValue = 300;
int intValue = (int) longValue;

long 타입은 int 타입보다 큰 허용 범위를 가진다. 따라서 강제로 (int) 캐스팅을 해서 변환 시킨 결과 long 타입 변수는 8byte를 갖고 있지만 int 타입으로 강제 변환하면서 앞 4byte 는 버려지고 끝 4byte만 int 타입 변수에 저장되고, 300의 값은 그대로 유지된다.

 

 

int → char

int intValue = 65;
char charValue = (char) intValue;
System.out.println(charValue);

int 타입은 char 타입보다 큰 허용 범위를 가진다. 따라서 int 타입은 char 타입으로 자동 변환 되지 않고, (char) 캐스팅을 해서 강제 변환시켜야한다. 주의할 점은 char 타입의 허용 범위인 0~65535 사이의 값만 원래 값을 유지한다.

 

 

실수 →  정수

double doubleValue = 3.14;
int intValue = (int) doubleValue;

실수타입은 정수 타입보다 항상 큰 허용 범위를 가진다. 따라서 대상 정수 타입으로 캐스팅해서 강제 변환시켜야 한다. 이 경우 소수점 이하 부분은 버려지고, 정수 부분만 저장된다.

 

 

intValue 변수명은 중복되어서 숫자로 나누었습니다.

 

전체코드를 실행본 결과 Console에 공부한대로 출력되는것을 볼 수 있다!

 

 

 

뭘하던 시작이 가장중요.. 오늘꺼는 평생 외우자.. 메모..

'Java' 카테고리의 다른 글

05. Java - 참조 타입(1)_변수편  (3) 2024.05.02
04. Java - ★조건문과 반복문★  (1) 2024.04.30
03. Java - ★연산자★  (3) 2024.04.29
01. Java - 자바 코드의 구조  (1) 2024.04.29
00. Java - 공부에 들어가기전에  (1) 2024.04.29
2024. 4. 29. 10:28