728x90
자바를 제대로 활용하고 있는지 의문이 들어서 복습을 하고 있습니다. 복습하는 도중에 새롭게 알게 된 사실등을 정리하므로 해당 포스팅에서는 많은 내용을 다루지 않습니다.
변수란?
하나의 값을 저장하기 위한 메모리 공간에 이름 붙인 것입니다.
int age = 5;
위의 예제에서는 age가 변수가 됩니다.
메모리에서 int형에 해당하는 byte만큼 자리를 배정하고 거기에 age라는 이름을 붙입니다.
그 공간에 5라는 값을 담아주면 되겠죠.
참고로 int는 변수의 타입이고 5라는 상수 값은 리터럴이라고 부릅니다.
자바의 상수를 int age 앞에 final이라는 키워드를 붙이면 상수가 되며 값을 수정할 수 없는 점 유의바랍니다.
선언 위치에 따른 변수
클래스 변수, 인스턴스 변수, 지역 변수 이 세 종류는 선언 위치에 따라 구분이 됩니다.
멤버 변수를 제외한 나머지 변수들은 모두 지역 변수입니다.
그 중에서 static이 붙은 쪽은 클래스 변수, 붙지 않은 쪽이 인스턴스 변수입니다.
class Example{
int a; //인스턴스 변수
static int b;//클래스 변수
void test(){
int c;//지역 변수
}
}
클래스 변수는 클래스가 메모리에 올라갈 때 생성됩니다.
인스턴스 변수는 인스턴스가 생성되는 시기에 생성됩니다.
지역 변수는 변수 선언문이 수행되는 시점에 생성됩니다.
일반적으로 모든 인스턴스(객체)마다 고유의 값을 가져야 되는 상황에서는 인스턴스 변수로 선언합니다.(각각 다른 메모리에 생성)
반대로 모든 인스턴스(객체)에 공통되는 값이 있다? 그러면 클래스 변수로 선언합니다.(같은 메모리 공유)
Example test1 = new Example();
Example test2 = new Example();
test1.a = 1;
test2.a = 2;
//test1의 a와 test2의 a 값이 각각 다르게 들어감
test1.b = 3;
//Example.b = 3; 도 동일하게 작동합니다.
//test2의 b도 3이라는 값이 적용
메서드에도 static을 붙일 수 있습니다만 static 메서드에서 인스턴스 변수를 사용할 수 없다는 점 참고해주세요.
728x90
'Java' 카테고리의 다른 글
[JAVA] JVM 구성 요소 (0) | 2021.03.29 |
---|---|
[java] JIT 컴파일러란? (0) | 2021.03.25 |
바이트 코드란? (0) | 2021.03.23 |
JVM이란? - 특징 (0) | 2021.03.22 |
자바 산술변환 (0) | 2021.03.11 |