JAVA/java 이론

[자바JAVA] 변수2 - 변수의크기, 명명규칙, 문자열, 형변환, 오버플로우

자바칩 프라푸치노 2020. 9. 1. 00:19

안녕하세요 자바칩 프라푸치노입니다.

오늘도 자바 공부를 해봅시다!
오늘은 변수에 대해서 알아보는 두번째 시간입니다.

(*본 게시물은 모바일 환경보다 PC환경에서 가독성이 좋습니다)

 

 

**첫번째 변수 이론 

 

[자바JAVA] 변수1 - 정의, data type, 종류

안녕하세요 ~! 자바칩 프라푸치노입니다. 저는 지금 자바를 배우고 있는데 배운 것들을 기록하고자 블로그를 작성하게 되었습니다. 부족함이 보인다면 댓글로 많은 가르침 부탁드립니다 ㅎㅎ ��

sso-feeling.tistory.com

 

1. 변수의 크기

오늘은 그 전 게시물에서 말씀드린 변수의 크기에 대해서 더 자세히 알아보겠습니다.

 

이렇게 타입별로 크기가 있다고 했는데요

1byte는 8bit입니다.

bit는 0과 1을 저장할 수 있는 최소한의 단위입니다.

여기서 부호가 있는 데이터 타입의 맨 앞 비트는 부호비트 입니다.

0이면 양수, 1이면 음수인 것이죠! 

그것은 조금 뒤에서 말씀드리겠습니다!

그래서 데이터 타입마다 들어갈 수 있는 수의 범위는 이렇습니다!

여기서 들어갈 수 있는 값의 범위가 넘어가면 오버플로우가 일어납니다. 이것은 뒤에서 또 설명을 하도록 하죠!

 

2. 명명규칙

 

변수의 이름을 짓는데는 규칙과 권장 사항이 있습니다.

더보기

 (1) 대소문자가 구분되며, 길이에 제한이 없다.

 - true와 True는 다르다.

 (2) 예약어를 사용해서는 안된다.

 - true는 예약어라서 사용불가지만 True는 사용가능

 (3) 숫자로 시작하면 안된다.

 (4) 특수문자는 ‘_’와 ‘$’만을 허용한다.

 

3. 권장사항

더보기

 (1) 클래스 이름의 첫글자는 대문자로 하고, 메서드와 변수의 첫글자는 소문자로 한다.

 (2) 여러 단어로 구성된 변수명은 단어의 첫글자를 대문자로 한다.

 - LastIndexOf

 (3)상수의 이름은 대문자로 한다. 단어는 ‘_’로 구분한다.

 

4. 변수, 상수, 리터럴, 접미사

변수외에도 상수와 리터럴이라는 것도 있습니다.

변수는 하나의 값을 저장할 수 있는 공간이라고 말씀드렸는데요,

상수는 딱 한번만 값을 저장할 수 있는 공간입니다.

변수처럼 이거 저장했다가 저거 저장했다가 할 수 없다는 뜻이죠

변수를 상수처럼 고정하고 싶으면 final을 앞에 붙이면 됩니다.

리터럴은 그 자체로 값을 의미하는 것입니다. 

접미사는 이렇게 사용합니다.

더보기

int bin = 0b10; //2진수나타내는 값

int oct = 0100; // 8진수 나타내는 값

int hex = 0x100; //16진수 나타내는 값

float f = 3.14f;

double d = 3.14d;

 

5. 변수의 기본값

변수는 기본값으로 아래의 값을 가집니다.

자료형 기본값
boolean false
char ‘\u0000’
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d 또는 0.0
참조형 변수 null

6. 문자와 문자열

 

문자 타입과 문자열 타입이 있습니다.

문자 타입은 char이고

문자열 타입은 String (참조변수) 라고 말씀드렸죠!

문자타입 char은 문자 하나만 저장할 수 있습니다.

 

더보기

char ch1 = 'A';

이런 식으로요!

char ch2 = 'AB'; //에러

이것은 안됩니다.

문자열을 쓰고 싶으면

String str = "AB";

이렇게 써줘야합니다. 

 

String타입에서 더하기를 할 수가 있는데요, 그러면 어떤 타입이든 문자열로 바껴서 합체됩니다.

String str1 = "A" + "B"; //"AB" 이렇게 합쳐집니다.

숫자 7과 "A"를 더하면 숫자 7이 문자 7이 되면서 7A가 됩니다.

이렇게 String타입은 어떤 타입이 플러스 되어도 다 문자열로 바뀐다는 점 알아두시면 될 것 같습니다.

 

7. 정수의 오버 플로우와 형변환

 

마지막으로 1번에서 말씀드렸던 오버플로우와 형변환에 대해 알아보겠습니다.

형변환은 말 그대로 데이터 타입을 변환하는 것을 말합니다.

boolean값을 제외한 기본형 정수들은 서로 형변환이 가능합니다.

크기가 작은 데이터타입을 크기가 큰 데이터 타입으로 변환하는 것은 자동 캐스팅이라고 하구요

크기가 큰 데이터 타입을 크기가 작은 데이터 타입으로 변환하는 것은 강제 캐스팅이라고 합니다.

 

작은 컵에 담긴 음료수를 큰 컵으로 옮기려면 그냥 부으면 되겠죠?

음료수가 그대로 큰 컵으로 옮겨갑니다.

그런데 큰 컵에 있던 음료수를 작은 컵으로 옮기면 음료수가 넘쳐서 바닥에 흐를 수도 있습니다.

이걸 바로 오버플로우라고 합니다.

큰컵에 있던 음료수가 작은 컵에 넣어도 괜찮은 양이라면 손실이 없겠지만 

작은 컵에 들어갈 수 있는 양보다 많으면 음료수가 손실이 되겠죠.

그래서 강제 캐스팅을 하면 데이터가 손실될 수도 있다고 합니다.

 

더보기

캐스팅을 할떄는 캐스팅하고 싶은 타입을 () 안에 쳐주면 됩니다.

byte b = 10;

int b2 = (byte)b;//요런식으로요

int를 byte로 변환하겠다 이런 뜻입니다.

 

 

마지막으로 오버플로우입니다.

변수에서 저장할 범위가 넘어가면 오버플로우가 생긴다고 하였는데요.

예를 들어서 

byte b = 127;

이렇게 하고

b = 128;

이것은 에러입니다. byte는 -128 부터 127까지 저장가능하죠.

그런데 강제로 캐스팅을 하면

byte b = (byte)(b+1); 

이렇게 하면 b는 127이고 +1은 128이니까 원래 byte가 안되는데

강제 캐스팅을 해서 byte형태로 만들어 줬습니다.

그러면 무슨 값을 가지냐면 -128을 가집니다.

왜냐!

이런식으로 종이를 동그랗게 접는다는 느낌으로

루핑을 돌기 때문입니다.

그러니까 127+2 는 -127이 되겠네요!

우리가 넣고 싶은 값은 128이었는데 -128이 되다니 완전 다른 값이 나와버렸잖아요!

그래서 강제 캐스팅은 조심해서 사용해야합니다.

 

진짜 마지막으로 양수였던 정수를 음수인 정수 비트로 어떻게 나타내는지 보겠습니다.

일단 5라고 예를 들면

(1)2진수로 바꾸면

00000101 

(2) 1의 보수를 취하면 (1과 0을 바꿈)

11111010

(3) +1을 하면

11111011

이렇게 하면 -5가 됩니다.

참 쉽죠?

 

 

오늘은 여기까지!

 

다음 포스팅에서 만나요 ~!!!

728x90