static 변수= 클래스 변수
클래스 변수는 클래스의 인스턴스가 얼마나 존재하는지 관계 없이, 하나의 사본이 존재하는 클래스에 정의된 변수이다. 클래스 변수는 인스턴스 변수가 아님을 주의하자. 선언된 모든 인스턴스 변수가 클래스 변수를 공유한다. JVM이 해당 클래스를 읽는 순간 클래스 변수(static 변수)는 초기화 된다.
static 메소드= 클래스 메소드
클래스 안에 선언되어 있지만 다른 메모리 공간에 존재한다. 클래스는 클래스 메소드에 자리를 빌려줬다 생각하자. 또는 클래스는 메소드를 사용할 권한이 있을 뿐이다. 클래스 메소드도 마찬가지로 인스턴스 메소드가 아니다.
단순 기능 제공이 목적인 메소드들이나 인스턴스 변수와 관련 없는 메소드들은 staic으로 선언하는게 좋다.
static 이기 때문에 인스턴스가 생성된다고 해서 각각의 인스턴스에 속한 것이 아니라 인스턴스에서 직접 접근할 수 있는 권한을 준 것 뿐이고 static는 별도의 메모리 공간으로 딱 하나만 존재하는 것이다.
main 메소드가 static인 이유는?
인스턴스 생성과 관계 없이 제일 먼저 호출되는 메소드이다.
main 메소드가 public인 이유는?
main 메소드의 호출 명령은 외부로부터 시작되는 명령이다. 단순히 일종의 약속으로 이해해도 좋다.
main 메소드를 어디에 둘 것인가?
main을 위한 별도의 클래스에 선언하는 방법이 보편적이다. 물론, 원하면 어떤 클래스든 main을 넣을 수 있다. 앞서 말했듯이 static으로 선언된 것은 그 클래스와 사실상 관계가 없다. 단 실행하는 방법이 달라진다. 만약 클래스 Car에 main을 넣어줬다면, 명령어는 "java Car"가 된다. Car 클래스 안에 main 메소드가 있으니, 그 안에 있은 main 메소드를 실행하라는 의미가 될 것이다.
static 초기화 블록
import java.time.LocalDate;
class Solution {
static String date;
static{
LocalDate nDate=LocalDate.now();
date=nDate.toString();
}
public static void main(String[] args) {
System.out.println(date);
}
}
- static 변수는 생성자에서 초기화 하지 못한다.
- static 초기화 블록이 필요한 이유는? static 변수를 초기화하기 위해서
'Programming > Java' 카테고리의 다른 글
JAVA 12 toString 메소드 (0) | 2021.08.04 |
---|---|
JAVA 11 오버로딩 (0) | 2021.08.04 |
JAVA 09 정보은닉과 캡슐화 (0) | 2021.08.04 |
JAVA 08 패키지의 이해 (0) | 2021.08.04 |
JAVA 07(2) 생성자와 String 클래스 (0) | 2021.08.03 |