컴퓨터공학 💻 도서관📚

Part2. 2-16 static 변수: 여러 인스턴스에서 공통으로 사용하는 변수 본문

✅🌲강의 복습 노트/패캠 JavaSpring 강의,코드 복습

Part2. 2-16 static 변수: 여러 인스턴스에서 공통으로 사용하는 변수

들판속초록풀 2025. 1. 28. 23:04

같은 클래스에 서로 다른 인스턴스들이 있을 때, (ex. studentLee,  studentKim)
클래스가 같은 인스턴스끼리 공유할 어떤 변수나 기준값이 필요한 경우 static 변수가 사용된다

모두가 가지고 있지만 안에 있는 정보는 다 다른 경우(학번, 사번, 카드번호 등등)
ex. 회사원이 입사할 때마다 새로운 사번을 부여할 때 : 새로운 사원이 들어올 때마다 static를 변수를 증가시키고 
이 값을 멤버변수에 복사를 해주면 된다

// 위에 생략

	public Employee(){       // 생성자
    		serialNum++;
        	employeeId = serialNum;  // 증가시킨 static변수를 멤버변수에 복사하기
    	}
    
// 아래도 생략


 

static 변수는 언제 만들어 지냐면
프로그램을 구동을 시키면 메모리에 올라가게 되는데 이 메모리에 올라갔을 때의 상태를 프로세스라고 한다
실제로는 얘가 프로세스 자체가 되는 게 아니라, thread의 상태로 돼서 들어가게 된다.

이때 메모리에 올라가게 될 때, 크게 프로그램은 두 가지 영역을 가지게 된다
1. code 영역 ,  2. data영역(상수 영역, static 영역)
1. 코드 즉, 명령어 집합(instruction set)이 code 영역에 들어가서 한줄씩 수행이 된다
2. 처음부터 메모리를 잡는 데이터들이 있는데 상수 or literal 같은 얘들이 상수(constant) 영역에 먼저 잡히고 그 다음에 static 변수가 여기에 올라간다

static 변수는 힙메모리에 할당되는 인스턴스와 달리 
처음에 프로그램이 프로세스가 돼서 메모리에 로딩되는 순간, 데이터 영역에 잡히고, 
이 프로그램이 다 끝나서 메모리에서 언로드 되는 순간 없어진다


 

* static 변수 선언하는 법
static int serialNum;
클래스 변수, 정적변수라고도 함 (vs. 인스턴스 변수)

 

인스턴스 변수 (Non-static 변수)

클래스 내에 선언된 변수 (멤버변수)
객체 생성 시마다 매번 새로운 변수가 생성됨

 

 

* static 변수 사용하는 방법

인스턴스 생성과 상관 없이 사용 가능하므로 클래스 이름으로 직접 참조해서 사용한다
Student.serialNum = 100;


 

static변수 메모리의 data영역에 저장되고
지역변수 스택 메모리에 저장되고
인스턴스 힙 메모리(동적 메모리)에 저장된다

 

 

스택 메모리에 있는 studentLee와 studentSon은 main함수 안에서  참조 자료형(employee type)으로 선언된
지역 변수(참조 변수)이다

그리고 이 지역변수(참조변수) 인해서 참조되는 인스턴스인 studentLee 인스턴스, studentSon 인스턴스는
힙 메모리(동적 메모리)에 있다

마지막으로 지역변수들이 참조할 수 있는 static변수는 data 영역(공유 메모리)에 있다 

Comments