반응형
1. Static 변수
static 변수의 값은 함수가 종료되더라도 프로그램이 종료되지 않는 이상 메모리상에 남아있다
보통 우리가 작성하는 일반 지역변수는 스택(Stack)영역에 저장된다.
이 스택 영역의 변수들은 함수 호출시에 메모리에 할당되며 함수 종료시에 메모리에서 사라진다.
하지만 static 변수는 데이터(Data)영역에 저장된다.
(+ 전역변수 또한 데이터영역에 저장된다.)
2. Static 메서드
class C1{
static int static_variable = 1;
int instance_variable = 2;
static void static_static(){
System.out.println(static_variable);
}
static void static_instance(){
// 클래스 메서드에서는 인스턴스 변수에 접근 할 수 없다.
//System.out.println(instance_variable);
}
void instance_static(){
// 인스턴스 메서드에서는 클래스 변수에 접근 할 수 있다.
System.out.println(static_variable);
}
void instance_instance(){
System.out.println(instance_variable);
}
}
public class ClassMemberDemo {
public static void main(String[] args) {
C1 c = new C1();
// 인스턴스를 이용해서 정적 메서드에 접근 -> 성공
// 인스턴스 메서드가 정적 변수에 접근 -> 성공
c.static_static();
// 인스턴스를 이용해서 정적 메서드에 접근 -> 성공
// 정적 메서드가 인스턴스 변수에 접근 -> 실패
c.static_instance();
// 인스턴스를 이용해서 인스턴스 메서드에 접근 -> 성공
// 인스턴스 메서드가 클래스 변수에 접근 -> 성공
c.instance_static();
// 인스턴스를 이용해서 인스턴스 메서드에 접근 -> 성공
// 인스턴스 메서드가 인스턴스 변수에 접근 -> 성공
c.instance_instance();
// 클래스를 이용해서 클래스 메서드에 접근 -> 성공
// 클래스 메서드가 클래스 변수에 접근 -> 성공
C1.static_static();
// 클래스를 이용해서 클래스 메서드에 접근 -> 성공
// 클래스 메서드가 인스턴스 변수에 접근 -> 실패
C1.static_instance();
// 클래스를 이용해서 인스턴스 메서드에 접근 -> 실패
//C1.instance_static();
// 클래스를 이용해서 인스턴스 메서드에 접근 -> 실패
//C1.instance_instance();
}
}
클래스 변수와 메서드는 instance 변수와 메서드에 접근할 수 없으나
instance 변수와 메서드는 클래스 변수와 메서드에 접근할 수 있다
단 인스턴스가 클래스 메서드를 호출하면 그안에서 instance 메서드는 호출할 수 없다
public class c {
public String st = "string";
private static final C c = new C();
public static C sharedInstance(){
return c;
}
Config.sharedInstance().st;//전역변수의 사용
}
//클래스간 전역변수 공유
반응형
'CS > Basic' 카테고리의 다른 글
[CS Basic] MVC Pattern (1) | 2023.12.21 |
---|---|
[CS Basic] MVVM Pattern (0) | 2023.11.22 |
[CS Basic] Multi Process와 Multi Thread, Thread Safe, Context Switching (0) | 2023.10.26 |
[CS Basic] Thread와 Process 그리고 Stack, Queue, List (0) | 2023.10.26 |
[CS Basic] Version 관리 (0) | 2023.10.24 |