반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- 자바 스터디
- 해외유학
- 개인 프로젝트 개발일지
- 미국대학생활
- i-20
- 미국대학
- 자바
- 케네스
- 케네스로그
- 개발일지
- 만다라트프로젝트
- 유학생대학생활
- JVM아키텍처
- 미국유학생활
- 복수학위제도
- Kenneth Park
- 사이드프로젝트
- 유학생 준비물
- 미국유학
- CSUS
- java
- 비전공자 git
- California State University Sacramento
- 미국유학생
- jpa
- 2+2
- 파이데이아창의인재학과
- F1학생비자
- Java 스터디
- 부산외대
Archives
- Today
- Total
케네스로그
[Java] 변수의 스코프와 라이프타임 본문
반응형
변수의 스코프
변수는 해당 변수가 선언된 위치에 따라 적용되는 범위가 달라지게 됩니다.
class A {
int instanceValue; // 인스턴스 변수
static int classValue; // 클래스 변수(static, 공유 변수)
void method() {
int localValue = 0; // 지역변수
}
}
클래스 내부에 선언되는 변수를 멤버변수라고 합니다다. 여기서 static 키워드를 사용한 변수는 클래스 변수, static 키워드가 없는 변수를 인스턴스 변수라고 부릅니다. 메소드 내부에 위치한 변수는 해당 메소드에서만 사용할 수 있는 지역변수입니다.
- 인스턴스 변수
클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어집니다. 인스턴스 변수 값을 읽어오거나 저장하기 위해서는 먼저 인스턴스를 생성해야만 합니다.
- 클래스 변수
멘버변수에 static키워드를 붙힐 경우 클래스 변수가 되며, 한 클래스의 모든 인스턴스가 값을 공유합니다. 클래스 변수는 인스턴스를 생성하지 않고 클래스가 메모리에 올라갔을때 선언되기 때문에 인스턴스에서는 언제든 바로 접근해서 사용할 수 있습니다. 그렇기에 어디서나 접근 가능한 전역변수의 성격을 가집니다.
class LottoTicket {
public static final LOTTO_PRICE = 1000;
}
public static void main(String[] args) {
System.out.println("Lotto price is " + LottoTicket.LOTTO_PRICE);
}
}
- 지역 변수
메소드 내에 선언되어 메소드 내에서만 사용 가능하며 메소드 종료와 함께 메모리에서 사라집니다. for문이나 while에서 사용되는 변수 또한 지역변수이며, 해당 블럭을 벗어나면 사용할 수 없습니다.
종류 | 선언위치 | 생성시기 |
클래스 변수 | 클래스 영역 | ClassLoader에 의해 클래스가 초기화되고 프로그램 종료 시 까지 유지 |
인스턴스 변수 | 클래스 영역 | 인스턴스가 생성되고, 메모리에 상주하는 동안유지 |
지역 변수 | 클래스 영역 이외의 영역 (메소드 생성자, 초기화 블록 내부) |
블록 영역 내에서만 유지 |
static 변수는 인스턴스 변수를 사용할 수 없다!
static변수는 클래스가 로드될 때 생성되며, 인스턴스 변수는 인스턴스가 생성될 때 만들어집니다. 따라서, static 변수가 인스턴스 변수의 값을 참조한다면, 오류가 발생할 수 있습니다.
public class App {
private static int number = getNumber(); // 오류발생
private int getNumber() {
return 10;
}
}
위의 예시에서 getNumber는 인스턴스가 생성된 이후에 사용이 가능합니다. 따라서, 클래스 변수인 number는 사용할 수 없습니다.
클래스 로드 → 클래스 변수 생성 → 인스턴스 생성 → 인스턴스 변수 생성
반응형
'Dev > Java' 카테고리의 다른 글
[Java] 배열의 선언과 메모리 할당 (0) | 2022.01.30 |
---|---|
[Java] 타입 변환, 캐스팅, 타입 프로모션 (0) | 2022.01.30 |
[Java] 변수의 선언 및 초기화 방법 (0) | 2022.01.30 |
[Java] 자바 데이터 타입 - 리터럴, 원시형, 참조형 (0) | 2022.01.30 |
[Java] 데이터 타입, 범위, 기본값 (0) | 2022.01.30 |