public class Article{ private static int count; // 전체 글 수 private static String category; // 카테고리 private int num; // 글번호 private String title; // 제목 private String regDate; // 날짜 }
클래스를 설계할때, 멤버변수 중 모든 객체에서 공통적으로
사용해야 하는 값에 static을 붙인다.
static이 붙은 멤버변수는 객체의 개수에 상관없이
단 하나만 생성되며, 이를 모든 객체가 공유하기 때문에
메모리를 효율적으로 사용할 수 있다.
코드 영역(고정영역)
-> 프로그램의 코드가 저장되는 영역
-> 이 영역에 저장된 명령어들을 cpu가 하나씩
가져가 실행한다.
데이터 영역(고정영역)
-> static으로 선언되는 변수가 할당된다.
-> 이 영역에 할당되는 변수들은 프로그램
시작과 동시에 메모리 공간이 할당되어 종료될때
까지 남아있게 된다.
힙 영역(동적영역)
-> 프로그래머가 원하는 시점에 변수를 할당하고
소멸시키는 영역
-> 메모리 동적 할당시 사용된다.
-> 객체가 생성되는 영역
스택영역(동적영역)
-> 함수가 실행될 때 사용되는 파라미터와
지역변에 대한 메모리 공간
-> 함수의 종료와 함께 소멸된다.
static 변수는 프로그램의 실행과 동시에 객체의 생성
여부와 상관 없이 이미 존재하기 때문에 소스 코드에서는
특정 클래스 안에 명시하지만, 그 클래스를 통해서
생성되는 객체나 그 안에 포함되는 멤버변수와는
다른 존재이다.
객체가 생성되지 않았더라도 이미 존재하고 있기 때문에
static 변수는 객체의 이름을 통해 접근하는 것이 아니라,
클래스의 이름을 통해서 접근해야 한다.
단, static 변수가 선언된 클래스 안에서는 변수 이름으로
직접 접근이 허용된다.
Article 클래스 및 다른 클래스에서 접근하는경우
-> Aricle.count =3;
-> Aricle.category = "공지사항";
Aricle 클래스에서 접근하는 경우
-> count = 3;
-> category = "공지사항";