자바 변수
자바 변수
변수 선언 및 초기화하는 방법
변수
단 하나의 값을 저장할 수 있는 메모리 공간.
변수의 선언
String name;
String : 변수타입
name : 변수이름
name이라는 이름의 변수를 선언.
변수를 선언하면 메모리의 빈 공간에 변수타입에 알맞은 크기의 저장공간이 확보되고 이 공간을 변수이름을 통해 사용할 수 있게 된다.
변수의 초기화
변수를 사용하기 전에 처음으로 값을 저장하는 것.
변수를 선언한 이후 부터는 변수를 사용할 수 있다. 하지만 반드시 변수를 사용하기 전에 초기화를 해주어야 한다. 메모리는 프로그램이 공유하는 자원이므로 전에 다른 프로그램에서 만들어둔 Garbage 값들이 남아 있을수 있기 때문이다.
name = "choi" // name이라는 변수에 "choi"값 초기화.
변수에 값을 저장할 때는 대입연산자 '='을 사용해야 한다.
변수의 스코프와 라이프 타임
변수의 스코프
해당 변수를 사용 가능한 범위를 말한다.
변수의 라이프 타임
해당 변수가 메모리에서 살아있는 기간을 말한다.
Variable Type | Scope | LifeTime |
---|---|---|
Instance Variable | static 블록과 static 메서드를 제외한 클래스 전체 | 객체가 생성되고 객체가 메모리에 살아있는 동안 |
Class Variable | 클래스 전체0 | 클래스가 초기화되고 프로그램이 끝날때까지 |
Local Variable | 변수가 선언된 블록내부 | 변수 선언 이후 부터 블록을 벗어날 때까지 |
타입변환, 캐스팅, 타입 프로모션
모든 변수와 리터럴에는 타입이 있다. 프로그램을 만들다보면 다른 타입간의 연산을 수행해야 하는 경우가 있다. 그럴때는 연산을 하기전 타입을 일치 시켜야 한다. 변수나 리터럴을 다른 타입으로 변환하는 것을 형변환(casting)이라고 한다.
즉 타입변환은 변수의 타입을 다른 타입으로 변환하는 것이다.
형변환 방법
(타입)피연산자
() => 형변환 연산자
형변환 연산자는 그저 피연산자의 값을 읽어서 지정된 타입으로 형변환하고 그 결과를 반환한다.
기본형 타입에서 boolean을 제외한 나머지 타입들은 서로 형변환이 가능하다.
정수형간의 형변환.
큰타입에서 작은타입에서의 형변환이 일어날경우 값이 크기의 차이만큼 값이 잘려나간다.
예를들어 300을 이진수로 바꾸면 100101100이다. 이것을 int에서 byte로 형변환을 한다면 byte의 경우 8비트의 값만 가질수 있기에 00101100까지의 값만 가지게 되고 변환을하면 44가 된다.
이렇게 정수형에서의 큰타입에서 작은타입의 형변환은 값손실이 발생할 수 있다.
반대로 작은타입에서 큰타입의 경우에는 값손실이 일어나지 않고 큰타입의 빈공간을 0으로 채운다.
(음수일 경우 1로 채움)
실수형간의 형변환
실수형에서 작은타입(float)에서 큰타입(double)로 변환하는 경우 지수는 float의 기저인 127을 빼고 double의 기저인 1023을 더한 후 변환하고 가수는 23자리를 채우고 남은자리를 0으로 채운다.
반대로 큰타입에서 작은타입으로 변환하는 경우 지수는 1023을 뺀 후 127을 더하고 가수는 52자리중 23자리만 저장되고 나머지는 버려진다. 단 여기서 가수의 24번째 자리에서 반올림이 발생할 수 있다.
정수형을 실수형으로 변환
정수를 2진수로 변환한 다음 실수의 저장형식으로 저장한다.
단 실수형의 정밀도의 제한으로 인한 오차가 발생할 수 있다.
→8자리 이상의 값을 실수형으로 변환할때는 double로 변환.
실수형을 정수형으로 변환
실수형의 소수점 이하의 값은 버려진다.(이때는 반올림 x)
자동 형변환(프로모션)
서로 다른 타입간의 연산을 할때 형변환을 일치시키는것이 원칙이다.
하지만, 편의상의 이유로 형변환을 생략할 수 있다.
만일 변수에 담을 수 있는 값보다 값이 커져서 값손실이 일어날경우에 생략할경우 에러가 발생한다.
이때는 묵시적으로 캐스팅을 보여주면 에러가 발생하지 않는다.
자동 형변환 규칙
1.boolean을 제외한 기본타입 7가지는 서로 형변환이 가능하다.
2.기본형과 참조형은 서로 형변환할 수 없다.
3.값의 범위가 작은타입에서 큰타입의 형변환은 생략할 수 있다. 단 반대의 경우에는 생략 시 에러가 발생한다.
1차 및 2차 배열 선언하기
배열은 같은 타입의 여러 변수를 하나의 묶음으로 다룬 것이다.
//1차원 배열
(1)배열 선언방식
int[] number = {1, 2, 3, 4, 5};
(2)배열 선언 방식
int[] number = new int[5];
number[0] = 1;
number[1] = 2;
number[2] = 3;
number[3] = 4;
number[4] = 5;
//2차원 배열
int number[][] = new int[4][3]
int number[][] = {
{100, 100, 100}
,{20,20,20}
.{30,30.30}
,{40,40,40}
};