-
Java 변수, 리터럴, 자료형, 형변환Knowledge/Java 2019. 10. 9. 21:29반응형
Java에서 변수는 타입과 변수 이름으로 선언한다.
123int count;// 타입 : int// 변수 이름 : count이때 변수 이름은 _ 나 $나 문자( 한글도 되지만 영어로 쓰자 )로 시작해야 한다 ( 필수 )
또한 java 변수 이름은 낙타표기법을 사용하는 것을 권장한다. ( 권장이지만 그냥 필수라고 외우자 )
( 낙타 표기법 : 소문자로 시작하고 띄어쓰기가 필요한 부분은 대문자로 쓰는 표기법 ex - camelCase )
변수는 단 하나의 값만을 담을 수 있다.
예를 들어
1234567891011count = 10;// 10을 담으면System.out.println(count);// count 값으로 10이 출력되지만count = 20;// 20을 담으면System.out.println(count);// count 값에 원래 담겨 있던 10은 사라지고 새로 담은 20이 출력된다이 때 count에 담은 10, 20 등을 '리터럴'이라고 표현한다.
그냥 수학에선 변수와 상수로 표현하지만
프로그래밍 언어에서 상수는 좀 다른 의미로 사용되기 때문에 '리터럴'이라고 표현한다.
ava는 모든 변수 타입이 컴파일시에 결정되는 강형 언어라
변수에 담을 데이터 타입을 정확히 선언하고 거기에 맞는 리터럴을 대입해야 한다.
예를 들어
123456// count =11.1// 정수 값만 담을 수 있는 int형 변수에// 11.1 이라는 실수를 담으려 하면 컴파일 에러가 발생한다.double avg = 11.1;// 실수는 실수형 변수에 담아야 한다.Java의 기본 자료형은 아래와 같다
여기서 타입별 자료형과 크기, 디폴트 값정도는 외워두는 게 좋다
간단히 필요한 부분만 짚고 넘어가자면
- 논리값
123boolean isFun = true;// 논리형 데이터 타입 변수엔 논리 리터럴을 넣어주면 된다.// 논리 리터럴 : true / false- 정수
12345678// 정수형 데이터타입 변수 역시 정수 리터럴을 넣어주면 된다.int x = 59;// 주로 int를 사용하고long bing = 343453434L;// 큰 정수를 쓸 때는 long을 사용하는데// long 형 변수에 리터럴을 대입할 때는 뒤에 L을 붙여줘야 한다.// 대소문자는 상관없지만 소문자 l은 다른 숫자와 구분이 쉽지 않아 대문자 L이 권장된다- 실수
123456float f = 32.4F;// float 형 변수에 실수 리터럴을 대입할 때는 뒤에 f를 붙여줘야 한다.// 역시 대소문자는 상관없다double d = 34324324234.5;// 실수형을 사용할 할때는 주로 double을 사용한다- 문자
문자가 좀 복잡한데 일단 표현범위가 0~65535 로 숫자인 점에 주목하자
자바는 모든 문자를 유니코드로 처리한다.
이 유니코드 값이 음수없이 0부터 65535까지이기 때문에 저런 표현 범위를 갖는것이다.
유니코드는 세계 각국의 문자들을 코드값으로 매핑한 국제 표준 규약인데
0 ~ 127까지는 아스키 문자 ( 특수기호 및 영어 알파벳 ) 가 할당되어 있고44032 ~ 55203까지는 한글 11172자가 할당되어 있다.
이 점을 기억하고 코드를 보자
1234567891011121314151617181920212223char c = 'f';// 문자 데이터 타입 변수 c에 'f' 리터럴을 입력한 후System.out.println(c);// c를 출력하면 입력한 f가 나오지만// 내부적으로는 f에 해당하는 유니코드 값을 저장한다.// 이런 유니코드 값은int uniCode = c;// 위와 같이 char 타입 변수를 정수형 변수에 대입해보면 확인할 수 있다.System.out.println(uniCode);// 102가 출력된다.// 이 점을 활용해 char 타입 변수에 아예 아스키 코드를 넣을 수도 있다.char cCode = 102;// 문자 자료형 데이터 타입에 숫자 102를 넣어보면System.out.println(cCode);// f가 출력된다.char 타입 변수는 유니코드 값을 저장한다는 점 때문에 유의할 부분이 하나 더 있다.
1234//int cTemp = '';// 아무것도 들어가있지 않은 유니코드는 없기 때문에 '' 은 에러가 발생한다.int cTemp = ' ';// 공백에 해당하는 유니코드는 존재하기 때문에 이는 에러가 발생하지 않는다.이런 자료형은 형변환이 가능하다.
다만 이 점을 기억해야 한다.
작은 데이터 타입의 값을 큰 데이터 값으로 옮길 때는 묵시적으로 형변환이 되지만
큰 데이터 값을 작은 데이터 값으로 옮길 때는 강제로 형변환을 해줘야 한다.
코드로 보면 이런 것이다.
12345678910111213141516171819202122232425262728293031323334353637int x = 50000;long y = x;// int (4byte) 가 long (8byte)보다 작은 자료형이기 때문에// int type의 값을 long으로 옮겨 담을 때는// 묵시적으로 형변환이 일어난다.long y2 = 5;//int x2 = y2;// 에러 발생// 그러나 long 은 int보다 큰 자료형이기 때문에// 설령 그 안에 작은 값 ( 이 경우엔 5 ) 이 담겨 있어도// long의 값을 int에 옮겨 담으려하면 에러가 발생한다.// 컴파일러는 데이터 타입의 크기를 보고 판단하지// 변수에 담긴 값을 보고 판단하지 않기 때문. 이럴때는int x2 = (int)y2;// 위와 같이 변환시킬 타입의 이름을 명시해서// 강제 형변환을 시켜줘야 한다.// 이 때long y3 = 21474836470L;// int의 범위를 넘어서는 값을 넣고System.out.println(Integer.MAX_VALUE);// int 최대값 : 2147483647int x3 = (int)y3;// 강제 형변환을 시도하면System.out.println(y3);// 21474836470 출력System.out.println(x3);// -10 출력// 쓰레기 값이 들어가니 주의하자출처 :
반응형'Knowledge > Java' 카테고리의 다른 글
JAVA - 증감 연산자를 앞에 붙일 때와 뒤에 붙일 때의 차이! ( 선위 증감연산자 / 후위 증감연산자 ) (0) 2019.10.10 Java 상수 ( final은 무엇인가 ) (0) 2019.10.10 더 빠르게 입력받고 출력해보자 BufferedReader/BufferedWriter (0) 2019.09.04 Java에서 날짜를 편하게 쓰자! LocalDate (0) 2019.09.04