세상에 이상을 더하다.

지금, Rooti와 함께라면.

Rooti는 상상을 만드는 공방입니다.

Lecture/Java

멈춰있는 것들: Static Variable, Static Method

nanun_u.l_0 2023. 1. 25. 22:09

메모리 구조와 함께 Static 변수메서드를 공부해 보자

 

메모리 구조

 

자바의 메모리 구조

 

위 사진에서 알 수 있듯이 자바의 메모리 구조는 크게 데이터 영역, 힙 영역, 스택 영역

으로 나눌 수 있다. 앞 글에서 배운 개념들을 메모리의 관점에서 설명해 보자.

 

여러 참조 변수들과 지역 변수들, 매개변수들 등과 같은 변수들이 모두 실행될 때

스택 영역에 생성된다. 그리고 각 클래스들로부터 만들어진 인스턴스들은 힙 영역

자리 잡히고 인스턴스 변수들도 마찬가지이다. 쉽게 생각하면 참조변수들은 힙 영역에

존재하는 인스턴스가 가지고 있는 "주소"를 가지고 있다고 생각하면 된다.

마지막으로 데이터 영역인데 프로그램이 실행될때 딱 한 번만 선언되는 static변수들이 

여기에 존재한다. 이 글에서 알아볼것이 바로 static 변수이다. (그리고 static 메서드)

 

Static Variable 그리고 Static Method

 

위에서 설명한것 처럼 Static은 프로그램이 실행되면 딱 한 번만 선언되고 모든 스크립트에서

접근이 가능한 특이한 변수이다. 게임의 구동원리로 생각하면 이해하기가 쉬운데, 우리가 

게임을 개발할때 int money 라는 변수를 선언했다고 하자. 이 변수는 여러 개 생성되면 안 되고

게임을 실행했을 때 그 플레이어가 가지는 단 하나의변수이다. 이럴 때 바로 static으로

선언하여 static int money로 선언하는 것이다. 또 static 변수의 특징은 그 변수에 접근하기

위해 새로운 인스턴스를 굳이 만들 필요가 없다는 것이다. 즉, 클래스의 이름 그대로 접근이

직접적으로 가능하다는 것이다 예시를 보자.

 

 

A라는 클래스를 만들고 static으로 int money를 선언하였다. 아무런 인스턴스화 없이도 바로 

money라는 변수에 접근이 가능하다. 아는 데이터 영역이라는 영역이 있기 덕분에 가능한 것이다.

 

이번엔 static 메서드에 대해 알아볼 것인데, static 메서드도 static 변수와 같이 인스턴스화 없이

바로 사용이 가능하다. 그렇기 때문에 그 함수 내부에서 사용하는 변수는 static 영역에 

존재하는 static 변수들이거나 그 메서드 안에 존재하는 지역 변수여야 한다.

즉, 우리가 일반적으로 사용하는 메서드와는 달리 변수가 어디에 있는지가 상당히 중요하다는 것이다. 당연히 static 변수처럼, 인스턴스화가 없더라도 다른 클래스에서 사용이 가능하다.

 

 

반응형