[Java] Scope of Variable

게맛살맛게·2021년 12월 6일
0

Java

목록 보기
11/18
post-thumbnail

Scope

변수의 종류선언위치생성시기
static클래스 영역클래스가 메모리에 올라갈때
instance클래스 영역인스턴스 생성 시
local메서드 영역변수 선언문 수행시

Static : 공유 영역 (전역)

같은 클래스의 모든 인스턴스들이 공유하는 변수

  • 해당 클래스로 생성된 인스턴스
  • new로 생성하지 않고도 접근 가능 (class명.변수(or method)명으로 접근 가능)
  • 하나의 저장공간 공유하므로 항상 공통된 값을 가짐

Instance : 해당 class의 instance 영역

  • new 키워드로 인스턴스 생성
  • 인스턴스 내에서만 효력이 있음
  • 인스턴스 생성 후, 참조변수.인스턴스변수명으로 접근
  • 인스턴스를 생성할때 생성되고 참조변수가 없을 때 가비지 컬랙터(GC)에 의해 자동 제거

Local : Method 영역

  • 메서드 내부에서만 효력이 있음
  • 메소드 내에서 선언되며, 메소드 종료와 함께 소멸
  • 조건문, 반복문의 블럭 내에 선언된 지역변수는 블럭을 벗어나면 소멸

Scope of Members

이때 static인 countOfGoods는 새로운 Goods instance가 생성 되더라도 Class 전역에서 공유되여 사용

접근 가능 범위 (Scope)
static영역 -> instance변수 접근 불가
instance영역 -> static변수 접근 가능
instance영역 -> 타 instance변수 접근 불가

Class Member (static)

전역 변수와 전역함수를 만들때 사용

  • 모든 클래스에서 공유하는 전역 변수나 전역 함수를 만들어 사용 가능 (클래스 멤버)
  • 객체를 생성하지 않고 접근 가능
  • static 메서드 내에선 this사용 불가
  • static 메서드 내에서 static멤버만 접근 가능
  • static멤버의 초기화는 static블록에서 할 수 있음
    1. static 초기화 : static { ... // static 초기화 영역 ... }
    2. new 생성자 호출 : static 영역 할당
    3. new 생성자 호출 : 이미 할당 된 영역 공유
public class StaticEx {
	public static int refCount;		// 클래스(static) 멤버
	public static String classVar;		// 클래스 멤버
	public String instanceVar;		// 인스턴스 멤버
	
	// static 블록으로 static 영역 초기화
	static {
		refCount = 0;
		classVar = "Static Member";
		// instanceVar = "Instance Member";	// 접근 불가
		System.out.println("Static Block");
	}
	
	// 생성자
	StaticEx() {
		// 참조 카운트 증가
		// 인스턴스 맴버 -> static 멤버 접근은 가능
		refCount++;
		System.out.println("인스턴스 개수:" + refCount);
	}	
}
profile
IT 기술블로그

0개의 댓글