그래서 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으로 변수를 많이 선언해버리면 프로그램이 무거워진다.
satatic 변수는 프로그램의 실행과 동시에 객체의 생성 여부와 상관 없이 이미 존재하기 때문에 소스 코드에서는 특정 클래스 안에 명시하지만, 그 클레스를 통해서 생성되는 객체나 그 안에 포함되는 멤버변수와는 다른 존재이다.
객체가 생성되지 않았더라도 이미 존재하고 있기 때문에 static변수는 객체의 이름을 통해 접근하는 것이 아니라, 클래스의 이름을 통해서 접근해야한다.
단, static변수가 선언된 클래스 안에서는 변수 이름으로 직접 접근이 허용된다.
article 클래스 및 다른 클래스에서 접근하는 경우
Article.count = 3;
Article.category = "공지사항";
article 클래스에서 접근하는 경우
count = 3;
category = "공지사항";