1. 변수(Variable)란??
변수란 데이터(값)를 저장할 수 있는 메모리 공간을 의미합니다.
이렇게 저장된 값은 변경될 수 있습니다.
변수를 선언하게 되면, 메모리의 빈 공간에 변수 타입에 알맞은 크기의 저장 공간이 확보되고 이 저장공간은 변수 이름으로 사용할 수 있습니다.
2. 변수 선언 및 초기화 방법
변수 선언
변수를 선언한다는 것은 변수 타입에 맞는 저장 공간을 확보하겠다는 의미이며, 선언하는 방법은 아래와 같습니다.
[변수의 타입] [변수를 지칭하는 이름]
int a;
boolean b;
double c;
이렇게 변수를 선언한다면, 해당 변수의 타입에 맞게 저장 공간을 확보하게 되며 그 저장공간을 지칭하는 이름은 a, b, c를 의미하게 됩니다.
변수 초기화
프리미티브 변수는 기본값이 있기에 초기화를 생략해도 되지만, 지역 변수의 경우 초기화를 해줘야 합니다.
명시적 초기화 방법
[변수 타입] [변수 명칭] = [값]
ex) int a = 20;
ex) boolean b = true;
ex) double c = 2.32;
이 밖에도 생성자 활용 초기화 방법, 초기화 블록을 이용한 초기화 방법이 있으나, 내용을 다루지는 않습니다.
3. 변수의 스코프와 라이프 타임
변수의 스코프는 범위를 나타내며 아래의 표를 참고하자.
변수의 종류 | 선언 위치 | 변수의 스코프 | 생성시기(메모리 할당시기) |
클래스 변수 | 클래스 영역 | 클래스 전역(클래스 기반으로 생성된 각각의 인스턴스에 공유) | 클래스가 메모리에 올라갈 때 |
인스턴스 변수 | 클래스 영역 | 각각의 인스턴스 | 인스턴스가 생성될 때 |
지역 변수 | 메소드 영역 | 메소드 안 | 변수 선언문이 수행되었을 때 |
1. 클래스 변수(class variable)
멤버 변수에 static 키워드를 붙일 경우 클래스 변수가 되며 한 클래스의 모든 인스턴스가 값을 공유한다.
클래스 변수는 인스턴스를 생성하지 않고 클래스가 메모리에 올라갔을 때 선언되기 때문에 인스턴스에서는 언제든 바로 접근해서 사용할 수 있다.
그렇기에 어디서나 접근 할 수 있는 전역 변수(global variable)의 성격을 가진다.
2. 인스턴스 변수(instance variable)
클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어진다.
그렇기에 인스턴스 변수 값을 읽어오거나 저장하기 위해서는 먼저 인스턴스를 생성해야 한다.
3. 지역 변수(local variable)
메서드 내에 선언되어 메소드 내에서만 사용 가능하며 메소드 종료와 함께 소멸된다.
for문이나 while문 같은 반복문도 동일하게 블록 내에서 선언된 지역변수는, 블록을 벗어나면 소멸된다.
초기화 시점
클래스 변수 | 클래스가 처음 로딩될 때 단 한번 초기화 된다. |
인스턴스 변수 | 인스턴스가 생성될 때마다 각 인스턴스 별로 초기화가 이뤄진다. 객체를 참조하는 변수가 없을 경우 JVM의 Garbage Collector가 제거하게 된다. |
지역 변수 | 메소드가 끝나면 소멸되어 사용할 수 없습니다. |
참고 사항
초기화의 순서
클래스 변수 | 기본값 -> 명시적 초기화 -> 클래스 초기화 블록 |
인스턴스 변수 | 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블록 -> 생성자 |
4. 타입 변환, 캐스팅 그리고 타입 프로모션
타입 변환 이란?
변수 또는 상수의 타입을 다른 타입으로 변환하는 것을 의미한다.
서로 다른 타입 간의 연산을 수행해야 하는 경우, 연산을 수행하기 전 서로의 타입을 일치시켜야 하는데 이럴 때 형변환을 시켜서 연산을 수행한다.
형 변환 방법
형변환 방법에는 타입 캐스팅, 타입 프로모션 방법이 있다.
type 변수명 = (Type)형변환할 변수
ex) double c;
int a = (int)c;
타입 캐스팅(Type Casting)
크기가 더 큰 자료형을 크기가 더 작은 자료형에 대입하는 것
ex) double(8byte) -> int(4byte) 의 경우
데이터가 더 크기 때문에 변환과정에서 데이터의 손실이 올 수 있다.
타입 프로모션(Type Promotion)
크기가 작은 자료형에 크기가 더 큰 자료형을 대입하는 것
ex) int(4byte) -> double(8byte)의 경우
데이터의 손실이나, 변환이 오지 않음으로 캐스팅할 때처럼 명시적으로 적지 않아도 자동으로 변환이 가능
'3층 개발관 > JAVA' 카테고리의 다른 글
[JAVA] 2주차 자바 기초 지식 정리(프리미티브, 래퍼런스 타입) #1 (0) | 2023.07.02 |
---|---|
[JAVA] 1주차 자바 기초 지식 정리(JVM) (0) | 2023.06.21 |