국비 학원 Day07-04 / Static

이상기·2023년 2월 1일

국비학원 - JAVA

목록 보기
13/23

스태틱이란?

스태틱(정적)은 고정된 의미로 Static 키워드를 통해 변수와 메소드를 만들 수 잇는데 이를 합쳐서 정적 멤버라고 합니다. 이러한 정적 멤버는 객체에 소속된 멤버가 아닌 클래스에 소속된 멤버로 클래스 로더가 클래스를 로딩해서 메모드 메모리 영역에 적재할 때 클래스별로 관리도비니다. 따라서 클래스의 로딩이 끝나는 즉시 사용이 가능합니다. 자세한 설명을 위해선 컴퓨터의 메모리 구조를 알아야한다.

컴퓨터의 메모리 구조

코드 영역(고정 영역)

  • 프로그램의 코드가 저장되는 영역
  • 이 영역에 저장된 명령어들을 CPU가 하나 씩 가져가 실행

데이터 영역 (고정 영역)

  • Static으로 선언되는 변수가 할당되는 위치
  • 이 영역에 할당하는 변수들은 프로그램 시작과 동시에 메모리 공간이 할당되어 종료될 떄 까지 남아있게 된다.

힙 영역 ( 동적 영역 )

  • 프로그래머가 원하는 시점에 변수를 할당하고 소멸시키는 영역
  • 메모리 동적 할당시 사용된다
  • 객체가 생성되는 영역

스택 영역 ( 동적 영역 )

  • 함수가 실행될 때 사용되는 파라미터와 지역변수에 대한 메모리 공간
  • 함수의 종료와 함께 소멸

고정 영역 VS 동적 영역

Static 변수는 프로그램의 실행과 동시에 생성. 이 말은 즉, 실행 파일이 메모리에 로드되어 실행파일의 용량만큼 RAM을 사용한다. 실행 파일의 크기는 변할 수 없으므로 이 영역의 크기는 고정 크기를 갖게된다.
동적 영역의 경우 프로그래머가 new 키워드를 사용하여 객체나 배열을 생성하면 사용된다. 다른 경우들로는 메소드가 호출되는동안 사용될 파라미터와 지역변수가 생성되는 것 또는 메소드가 종료 되거나 객체가 더 이상 사용되지않으면 생성된 변수나 객체는메모리에서 사라지므로 이 영역은 유동적인 크기를 갖는다.

멤버 변수 static 멤버변수의 차이

static 변수는 프로그램의 실행과 동시에 객체의 생성 여부와 상관 없이 이미 존재하기 때문에 소스 코드에서는 특정 클래스 안에 명시하지만, 그 클래스를 통해서 생성되는 객체나 그 안에 포함되는 멤버변수와는 다른 존재이다.
객체가 생성되지 않았더라도 이미 존재하고 있기 때문에 static 변수는 객체 이름을 통해 접근하는 것이 아니라, 클래스의 이름을 통해서 접근해야 한다. 단, static 변수가 선언된 클래스 안에서는 변수 이름으로 직접 접근이 허용된다.

profile
DBA가 되고싶은 사람입니다

0개의 댓글