static

전영덕·2023년 1월 31일
0

Java Study

목록 보기
25/36

1. 객체 간의 공유 자원을 표현하는 static 키워드

  • 클래스를 설계할 때, 멤버변수 중 모든 객체에서 공통적으로 사용해야 하는 값에 static을 붙인다.

그래서 interface마지막 부분의 변수는 아래와 같이 바뀌게 된다.

public class Article{
		private static int count;		//전체글수
		private static String category;	//카테고리(없을 땐 자유게시판)
		private int num;				//글번호
		private String title;			//제목
		private String regDate			//날짜
}
  • static이 붙은 멤버변수는 객체의 갯수에 상관없이 단 하나만 생성되며, 이를 모든 객체가 공유하기 때문에 메모리를 효율적으로 사용할 수 있다.

  • static이 붙은 count와 category는 static영역의 메모리를 사용함. 그외 3개변수는 동적 영역 메모리를 사용한다.

  • 쓸데 없이 static으로 변수를 많이 선언해버리면 프로그램이 무거워진다.

2. 컴퓨터의 메모리 구조

  • 코드 영역(고정 영역) : 프로그램의 코드가 저장되는 영역. 이 영역에 저장된 명령어들을 cpu가 하나씩 가져가 실행한다.
  • 데이터 영역(고정 영역) : static으로 선언되는 변수가 할당된다. 이 영역에 할당되는 변수들은 프로그램의 시작과 동시에 메모리 공간이 할당되어 종료될때 까지 남아있게 된다.
  • 힙 영역(동적 영역) : 프로그래머가 원하는 시점에 변수를 할당하고 소멸시키는 영역이다. 메모르 동적 할당시 사용된다. 객체가 생성되는 영역이다.
  • 스택 영역(동적 영역) : 함수가 실행될 때, 사용되는 파라미터와 지역변수에 대한 메모리 공간. 함수의 종료와 함꼐 소멸된다.

3. 고정 영역 vs 동적 영역

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

4. 멤버변수와 static멤버변수의 차이

  • satatic 변수는 프로그램의 실행과 동시에 객체의 생성 여부와 상관 없이 이미 존재하기 때문에 소스 코드에서는 특정 클래스 안에 명시하지만, 그 클레스를 통해서 생성되는 객체나 그 안에 포함되는 멤버변수와는 다른 존재이다.

  • 객체가 생성되지 않았더라도 이미 존재하고 있기 때문에 static변수는 객체의 이름을 통해 접근하는 것이 아니라, 클래스의 이름을 통해서 접근해야한다.

  • 단, static변수가 선언된 클래스 안에서는 변수 이름으로 직접 접근이 허용된다.

  • article 클래스 및 다른 클래스에서 접근하는 경우
    Article.count = 3;
    Article.category = "공지사항";

  • article 클래스에서 접근하는 경우
    count = 3;
    category = "공지사항";

0개의 댓글