🔎 다음과 같이 게시판을 하나 만들고자 할 때, 작성자들이 새로운 글번호, 제목, 날짜는 갱신되고 누적되지만, 게시판에서 전체 글의 개수와 카테고리는 정해진 수가 있다.
🔎 이와 같이 소스를 작성할 때, 변수개수가 늘어날 때 고정되어야하는 값인 전체 글의 개수와 카테고리가 같이 변하는 출력값을 볼 수 있다.
🔎 그래서 우리가 원하는 출력값은 위 그림처럼 나오게끔 만들어보자.
public class Article{ private static int count; // 전체 글수 private static String category; // 카테고리 private int num; // 글번호 private String title; // 제목 private String regDate; // 날짜
}
static을 붙이면 여러 개의 변수가 생성되지 않는다.
🔎 static 키워드는 객체를 만들지 않아도 static선언을 통해 객체를 생성할 수 있다.
🔎 클래스를 설계할 때, 멤버변수 중 모든 객체에서 공통적으로 사용해야하는 값에 static을 붙인다.
🔎 static이 붙은 멤버변수는 객체의 개수에 상관없이, 단 하나만 생성되며, 이를 모든 객체가 공유하기 때문에 메모리를 효율적으로 사용할 수 있다.
🔎 코드 영역(고정 영역)
🔎 데이터 영역(고정 영역)
🔎 힙 영역(동적 영역)
🔎 스택 영역(동적 영역)
🔎 고정영역
🔎 동적영역
🔎 static 변수는 프로그램의 실행과 동시에 객체의 생성 여부와 상관 없이 이미 존재하기 때문에 소스 코드에서는 특정 클래스 안에 명시하지만, 그 클래스를 통해서 생성되는 객체나 그 안에 포함되는 멤버변수와는 다른 존재이다.
🔎 객체가 생성되지 않았더라도 이미 존재하고 있기 때문에 static 변수는 객체의 이름을 통해 접근하는 것이 아니라, 클래스의 이름을 통해서 접근해야 한다.
🔎 단, static 변수가 선언된 클래스 안에서는 변수 이름으로 직접 접근이 허용된다.
🔎 Article 클래스 및 다른 클래스에서 접근하는 경우
-> Article.count = 3; -> Article.category = "공지사항";
🔎 Article 클래스에서 접근하는 경우
-> count = 3; -> category = "공지사항";
<예제>