1.1 변수란?
- 값을 저장할 수 있는 메모리상의 공간을 의미한다.
- 하나의 변수에는 단 하나의 값만을 저장할 수 있다.
- 그래서 값을 여러 번 저장하면 마지막에 저장한 값을 갖게 된다.
1.2 변수의 선언
- 변수가 선언되면 메모리에 변수의 타입에 맞는 크기의 저장공간이 확보되어, 값을 저장할 준비가 된다.
- 변수타입은 변수에 담을 값의 종류와 범위를 충분히 고려하여 결정해야 한다.
- 변수의 종류에 따라 변수의 초기화를 생략할 수 있는 경우도 있지만, 변수는 사용되기 전에 적절한 값으로 초기화 하는 것이 좋다.
- [참고] 지역변수는 사용되기 전에 초기화를 반드시 해야 하지만, 클래스변수와 인스턴스 변수는 초기화를 생략할 수 있다.
1.3 변수의 명명규칙
[필수규칙]
- 대소문자가 구분되며 길이제한이 없다. : True와 true는 다르다
- 예약어를 사용해서는 안 된다. : true는 예약어라서 사용할 수 없지만, True는 가능하다.
- 숫자로 시자해서는 안 된다.
- 특수문자는 '_'와 '$'만을 허용한다.
[권장규칙]
-
클래스 이름의 첫 글자는 항상 대문자로 한다.
: 변수와 메소드의 이름의 첫 글자는 항상 소문자로 한다.
-
여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다.
-
상수의 이름은 모두 대문자로 한다. 여러단어로 이루어진 경우 '_'로 구분한다.
[참고]
- 자바에서는 모든 이름에 유니코드에 포함된 문자들을 사용할 수 있지만, 적어도 클래스이름은 ASCII코드(영문자)로 하는 것이 좋다. 유니코드를 인식하지 못하는 운영체계(os)도 있기 때문이다.
2.변수의 타입
[변수의 타입]
- 기본형 변수(Primitive type)는 실제 값(data)를 저장하는 반변,
- 참조형 변수(Reference type)는 어떤 값이 저장되어 있는 주소를 값으로 갖는다.
- 자바는 c언어와는 달리 참조형변수 간의 연산을 할 수 없으므로, 실제 연산에 사용되는 것은 모두 기본형 변수이다.
- 기본형의 개수는 모두 8개이고, 참조형은 프로그래머가 직접 만들어 추가할 수 있으므로 그 수가 정해져 있지 않다.
- 참조형 변수를 선언할 때는 변수의 타입으로 클래스의 이름을 사용하므로, 클래스의 이름이 변수의 타입이 된다. 그래서 새로운 클래스를 작성한다는 것은 새로운 참조형을 추가하는 셈이다.
- 참조변수의 초기화는 null로 한다.
- 모든 참조형은 종류에 관계없이 4byte의 주소를 저장하기 때문에, 참조형 변수들은 값이 아닌 어떤 객체의 주소를 담을 것인가에 따른 객체의 종류에 의해 구분되므로, 참조형 변수의 종류를 구분할 때에는 자료형 대신 타입이라는 용어를 사용한다.
2-1. 기본형
데이터 오버플로우
- 맨 앞자리에서 catty가 발생하면 부호가 바뀜.
- 최대값 + 1 = 최소값
- 시간이 23:59 에서 1분이지나면 00:00 이 되는 것과 비슷하다고 생각하면 됌.
- 에러개념이 아니다!
형변환
- 같은 종류의 형끼리만 연산 가능 하기 때문에 서로 다른 형끼리의 연산을 할 땐 형변환 필요
- 자료형을 바꾸는건 JVM이 실행
1) 강제형변환
-
(=명시적 형변환)
-
자동형변환이 일어나지 않을 때.
(1) 실수를 정수로 바꿀 때
: ex) 10.0 → 10
2) 자동형변환
-
(=묵시적 형변환)
-
자동형변환이 일어나는경우
(1) 작은 자료형애서 큰 자료형으로 변환할 때
: ex) byte → short → int → long
ex) float → double(2) 정수는 실수로 자동 형변환 된다.
: long → float
- float의 경우 4byte임에도 불구하고 저장하는 매커니즘이 달라서(지수를 따로저장) 훨씬 많은 데이터를 포함 할 수 있다. 그래서 long이 8이고 float가 4임에도 자동 형변환 함.
(3) 문자는 int로 자동 형변환 된다.
: char (2byte)가 변환될 대 short(2)가 아닌 int(4)로 변환.
- 바이트 맨 앞에 부호를 쓰지 않지 때문에 char가 훨씬 많은 데이터를 포함 할 수 있다. 그래서 short에는 안들어감.
(4) boolean은 형변환 불가하다.
-
예외
byte + byte ↘
byte + short = int로 변환됌.
short + short ↗
- ex) bnum + snum 의 경우 byte가 short로 자동형변환되어 s+s 으로 되겠다고 생각하면 오류가 남! int sum으로 해야한다.
3) 예시
-
ex1) int + long의 경우 int 는 4byte, long은 8byte이다 작은 값이 큰 자료형에 들어갈 수 있으므로 큰 자료형에 맞춰짐.
-
ex2)
int inum = 10;
long lnum = 20L;
1) long에 맞추는 경우 (자동형변환/데이터손실 없음) : long sum = inum + lnum;
2) int에 맞추는 경우 (강제형변환/데이터손실이 일어남) : int sum = inum + (int) lnum;
→ 2)의 (int) 이런식으로 괄호안에 쓰는 연산자를 형변환 연산자라고 함.
'Dev Note > JAVA' 카테고리의 다른 글
[JAVA] 난수생성 Math.random() vs Random (2) | 2020.10.22 |
---|---|
[JAVA] replace()와 replaceAll()의 차이_정규표현식 vs 문자열 (0) | 2020.09.10 |
[JAVA기초] 변수(Variable)의 개념과 명명규칙 (0) | 2020.05.19 |