Knowledge/Java

Java 변수, 리터럴, 자료형, 형변환

TakeKnowledge 2019. 10. 9. 21:29
반응형

Java에서 변수는 타입과 변수 이름으로 선언한다.

 

1
2
3
int count;
// 타입 : int
// 변수 이름 : count

 

이때 변수 이름은 _ 나 $나 문자( 한글도 되지만 영어로 쓰자 )로 시작해야 한다 ( 필수 )

또한 java 변수 이름은 낙타표기법을 사용하는 것을 권장한다. ( 권장이지만 그냥 필수라고 외우자 )

( 낙타 표기법 : 소문자로 시작하고 띄어쓰기가 필요한 부분은 대문자로 쓰는 표기법 ex - camelCase )

 

변수는 단 하나의 값만을 담을 수 있다.

 

예를 들어 

 

1
2
3
4
5
6
7
8
9
10
11
count = 10;
// 10을 담으면 
        
System.out.println(count);
// count 값으로 10이 출력되지만
        
count = 20;
// 20을 담으면
        
System.out.println(count);
// count 값에 원래 담겨 있던 10은 사라지고 새로 담은 20이 출력된다 

 

이 때 count에 담은 10, 20 등을 '리터럴'이라고 표현한다. 

 

그냥 수학에선 변수와 상수로 표현하지만

프로그래밍 언어에서 상수는 좀 다른 의미로 사용되기 때문에 '리터럴'이라고 표현한다.

 

ava는 모든 변수 타입이 컴파일시에 결정되는 강형 언어라

변수에 담을 데이터 타입을 정확히 선언하고 거기에 맞는 리터럴을 대입해야 한다.

 

예를 들어

 

1
2
3
4
5
6
// count =11.1
// 정수 값만 담을 수 있는 int형 변수에
// 11.1 이라는 실수를 담으려 하면 컴파일 에러가 발생한다.
        
double avg = 11.1;
// 실수는 실수형 변수에 담아야 한다.

 

Java의 기본 자료형은 아래와 같다

 

여기서 타입별 자료형과 크기, 디폴트 값정도는 외워두는 게 좋다 

 

간단히 필요한 부분만 짚고 넘어가자면 

 

- 논리값

 

1
2
3
boolean isFun = true;
// 논리형 데이터 타입 변수엔 논리 리터럴을 넣어주면 된다.
// 논리 리터럴 : true / false

 

- 정수

 

1
2
3
4
5
6
7
8
// 정수형 데이터타입 변수 역시 정수 리터럴을 넣어주면 된다.
int x = 59;
// 주로 int를 사용하고 
        
long bing = 343453434L;
// 큰 정수를 쓸 때는 long을 사용하는데 
// long 형 변수에 리터럴을 대입할 때는 뒤에 L을 붙여줘야 한다. 
// 대소문자는 상관없지만 소문자 l은 다른 숫자와 구분이 쉽지 않아 대문자 L이 권장된다

 

- 실수

 

1
2
3
4
5
6
float f = 32.4F;
// float 형 변수에 실수 리터럴을 대입할 때는 뒤에 f를 붙여줘야 한다. 
// 역시 대소문자는 상관없다
        
double d = 34324324234.5;
// 실수형을 사용할 할때는 주로 double을 사용한다    

 

- 문자

 

문자가 좀 복잡한데 일단 표현범위가 0~65535 로 숫자인 점에 주목하자

 

자바는 모든 문자를 유니코드로 처리한다.

이 유니코드 값이 음수없이 0부터 65535까지이기 때문에 저런 표현 범위를 갖는것이다.


유니코드는 세계 각국의 문자들을 코드값으로 매핑한 국제 표준 규약인데
0 ~ 127까지는 아스키 문자 ( 특수기호 및 영어 알파벳 ) 가 할당되어 있고

 

아스키 코드표

44032 ~ 55203까지는 한글 11172자가 할당되어 있다. 

 

이 점을 기억하고 코드를 보자

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
char 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 타입 변수는 유니코드 값을 저장한다는 점 때문에 유의할 부분이 하나 더 있다.

 

1
2
3
4
//int cTemp = '';
// 아무것도 들어가있지 않은 유니코드는 없기 때문에 '' 은 에러가 발생한다.
int cTemp = ' ';
// 공백에 해당하는 유니코드는 존재하기 때문에 이는 에러가 발생하지 않는다.

 

이런 자료형은 형변환이 가능하다.

 

다만 이 점을 기억해야 한다.

 

작은 데이터 타입의 값을 큰 데이터 값으로 옮길 때는 묵시적으로 형변환이 되지만

큰 데이터 값을 작은 데이터 값으로 옮길 때는 강제로 형변환을 해줘야 한다.

 

코드로 보면 이런 것이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int 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 최대값 : 2147483647
 
int x3 = (int)y3;
// 강제 형변환을 시도하면
 
System.out.println(y3);
// 21474836470 출력
        
System.out.println(x3);
// -10 출력
 
// 쓰레기 값이 들어가니 주의하자

 

출처 :

 

자바 입문 | 프로그래머스

평가 4.8 28개의 평가 ★★★★★26 ★★★★1 ★★★1 ★★0 ★0 김연재 2019.10.06 13:55 자바뽀개기 2019.09.13 01:06 하유진 2019.09.10 11:19 정승철 2019.09.07 18:47 김치균 2019.09.01 13:54 리뷰 더보기

programmers.co.kr

 

반응형