지역 변수(stack 영역)
- 지역 안에서 선언된 변수
- 그 영역의 닫는 중괄호를 만났을 때 메모리에서 해제됨
- 사용자가 직접 초기화 해야 함
- 다른 영역에서 접근할 수 없기 때문에 보안성이 뛰어남
public class Main {
public static void main(String[] args) {
int a = 0;
}
}
전역 변수(data 영역)
- 클래스 영역 안에 있고, 전체 영역에서 사용 가능한 변수
- 클래스 영역 외의 어떠한 영역에도 포함되어 있지 않음
- new를 만났을 때 초기화 됨
- 프로그램 종료 시 메모리에서 해제 됨
- 다른 영역에서도 접근할 수 있기 때문에, 보안성이 상대적으로 낮음
- 전역 변수 종료
- static 변수 : 다른 클래스에서도 호출 가능
- 인스턴스 변수 : 같은 클래스 내에서 호출 가능
public class Main {
int a = 0;
static int width = 100;
public static void main(String[] args) {
}
}
인스턴스 메서드
- 인스턴스 객체를 생성 후 “인스턴스변수.메서드()” 형태로 호출하는 방식
- 인스턴스 멤버와 관련된 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수를 사용할 수 있음
class Math1 {
//인스턴스 변수
int a,b;
// 인스턴스 메서드
int add(){
return a + b;
}
}
class Main {
public static void main(String args[]) {
//인스턴스 생성
Math1 mt1 = new Math1();
mt1.a = 200;
mt1.b = 100;
//인스턴스 메서드 호출
System.out.println(mt1.add());
}
}
static 변수, 클래스 변수(data 영역)
- 컴파일을 하게 되면 가장 먼저 메모리에 올라가고, 어떠한 경우에도 초기화가 되지 않음
- 단, 프로그램 종료 시 메모리에서 해제 됨
- 메모리에 고정되기 때문에 남용 시 메모리 혹은 프로그램 실행 속도에 악영향을 줌
정적(Static)
정적 멤버(클래스 멤버)
정적 변수
- 메모리에 고정적으로 할당되어, 프로그램이 종료될 때 해제되는 변수
정적 메서드
- 객체 생성 없이 “클래스.메서드()” 형태로 호출하는 방식
- 인스턴스 멤버와 관련 없는 작업을 하는 메서드
- 메서드 내에서 인스턴스 변수를 사용할 수 없음
class Math1 {
static int add(int a, int b){
return a + b;
}
}
class Main {
public static void main(String args[]) {
System.out.println(Math1.add(200,100);
}
}