16일차 지역변수와 전역변수

박현정·2022년 4월 4일
0

JAVA 독학

목록 보기
20/26

#지역변수(stack영역)

지역안에서 선언된 변수
그 영역의 닫는 중괄호 }를  만났을 때
메모리에서 해제된다. 

(특징)
사용자가 직접 초기화 해야한다.
다른 영역에서 접근할 수 없기 때문에
보안성이 뛰어나다.

#전역변수(data영역)

클래스 영역 안에 있고, 전체 영역에서 사용가능한 변수
클래스 영역 외의 어떠한 영역에도 포함되어 있지 않다.
new를 만났을 때 초기화 된다.
프로그램 종료시 메모리에서 해제된다.
(특징)
다른영역에서도 접근 할 수 있기 때문에
보안성이 상대적으로 낮다.

#static변수(data영역)

컴파일을 하게 되면 가장 먼저 메모리에 올라가고,
어떠한 경우에도 초기화가 되지 않는다.
단, 프로그램 종료시 메모리에서 해제 된다.

(특징)	메모리에 고정되기 때문에 남용시
메모리 부족 혹은 프로그램 실행 속도에 악영향을 준다.

(실습예제1) 서로다른 클래스파일을 만든다.
먼저 메서드를 만들어보자.

//전역변수와 static변수의 차이
public class VariableTest {
//전역변수
int data = 0;
//static int data = 0; >>static 변수의 경우, 초기화가 안된다~~!!
void f() {
	System.out.println(++data);
	
}
void f2() {
	data = 20;
}}

(결과창)

(실습예제2) 만든 메서드를 다른 클래스파일에서 클래스생성자로 불러와 (객체화)
실행해본다.

public class VariableTest2 {
public static void main(String[] args) {
	//다른클래스에 있는 메소드랑 데이터 접근하려면?
	//객체화 시켜줘야함
	//전역변수
	VariableTest vt = new VariableTest();
	vt.f();
	vt.f();
	vt.f();
	vt.f();
	vt.f();
	vt.f();
	vt.f();
	vt.f2() ; //20
	vt = new VariableTest();
	//전역변수 new를 만나면 초기화~!!
	vt.f();
	
}}

(결과창)


profile
Gut Beginer

0개의 댓글