일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 로켓펀치 #취준컴퍼니 #취업 #일상 #취준생
- til
- try-catch-finally 블록
- 개발자취업
- 다중 catch 블록
- 99클럽
- 일반 예외
- 예외클래스
- 예외
- 항해99
- throws 키워드
- 코딩테스트준비
- 예외 처리
- 실행 예외
- Today
- Total
innn
[JAVA] 변수 (클래스 변수, 인스턴스 변수, 지역 변수) 본문
자바에서 변수는 클래스 변수, 인스턴스 변수, 지역 변수가 있다.
변수의 종류를 결정짓는 것은 "변수가 선언된 위치"다.
public class test {
int iv; // 인스턴스 변수 (왜? 객체마다 다 다르게 초기화되는 인스턴스별로 다 다른 변수니까)
static int cv; // 클래스 변수 (왜? 클래스 끼리 모두가 공유하는 변수니까)
void method() {
int lv; // 지역 변수 (왜? 블록 안에서 설정된 지역 내부에서만 활동하는 변수니까)
}
}
위의 코드엔 모두 3개의 int 타입 변수가 선언되어 있다.
여기서 iv와 cv는 클래스 내부에 선언되어 있으므로 멤버 변수이다. 그 중 cv는 static으로 선언되어있으니 클래스 변수이고, iv는 인스턴스 변수이다. lv는 메소드 내에 선언되어 있으므로 지역 변수이다. 왜냐면 메소드 중괄호 블록 내부에서만 활동하는 활동 지역이 정해진 변수니까.
변수의 종류에 따라 선언위치가 다르고, 메모리에 할당되는 생성시기가 다르다.
1. 클래스 변수
선언 위치는 클래스 영역 내이다. 생성시기는 클래스가 메모리에 올라갈 때 메모리에 할당을 받는다.
2. 인스턴스 변수
선언 위치는 클래스 영역 내이다. 생성시기는 인스턴스가 생성될 때(객체가 생성될 때이다)
3. 지역 변수
선언 위치는 클래스 이외의 영역이다. 가령 위의 코드에선 메소드 내부 블록 인 것처럼. 생성자나 초기화 블록 내부에 있을 수 있다. 생성시기는 변수 선언문이 수행될 때다.
인스턴스 변수
인스턴스 변수는 인스턴스가 생성될 때 생성된다. 그렇기 때문에 인스턴스 변수의 값을 읽어오거나 저장하려면 인스턴스를 먼저 생성해야한다. 인스턴스 별로 다른 값을 가질 수 있으므로, 각각의 인스턴스마다 고유의 값을 가져야할 때는 인스턴스 변수로 선언하는 것이다.
클래스 변수
클래스 변수는 인스턴스 변수에 static만 붙여주면 된다. 인스턴스 변수는 각각 고유한 값을 가지는 반면, 클래스 변수는 원주율 PI파이 값 처럼 클래스에서 생성된 어떤 인스턴스에서나 동일한 값을 지닐 때 선언한다. 즉, 클래스 변수는 모든 인스턴스가 공통된 값을 공유하게 된다. 한 클래스의 모든 인스턴스들이 공통적인 값을 가져야할 때, 3.141592처럼, 클래스 변수로 선언하는 것이다.
클래스가 로딩될 때 생성된다. 그러므로 메모리에 딱 한 번만 올라간다.
종료될 때까지 유지되는 클래스 변수는 public을 붙이면 같은 프로그램 내에서 어디서든 접근할 수 있는 전역 변수가 된다. 또한 인스턴스 변수의 접근법과 다르게 인스턴스를 따로 생성하지 않고. 클래스 이름.클래스변수명을 통해서 접근하게 된다.
지역 변수
메소드 내에서 선언되며 메소드 내에서만 사용할 수 있는 변수이다. 메소드가 실행될 때 메모리를 할당받으며 메소드가 끝나면 소멸되어 사용할 수 없다.
'JAVA > 스터디 자료 필타' 카테고리의 다른 글
[3주차] 연산자 (0) | 2022.06.05 |
---|---|
[2주차] 자바 데이터 타입, 변수 그리고 배열 (0) | 2022.06.04 |