static 키워드 (메모리 상 위치, 클래스 변수, 클래스 메소드, static 블록)
1. static 이란?
객체마다 데이터를 가지고 있는데, 이걸 공유해야 할 상황에 static을 쓴다. 여러 객체의 메소드들이 동시에 접근, 수정할 수 있는 전역변수같은 느낌이다.
static 키워드를 사용한 변수를 클래스 변수라고 한다. 즉 객체가 아닌 클래스의 변수이기 때문에 new로 객체를 안만들었어도 사용이 가능하다. ex. System.out.println(Test.count);
2. 메모리 상 위치
클래스 변수는 JVM Runtime Data Area에서 Method area 에 들어간다. 여기서 클래스는 Method area에, 객체는 heap에 올라간다. static이 붙으면 클래스의 시그니처?같은 것들이 메모리 상에 로딩되면서 같이 올라가는 것이다. 따라서 아래에서 설명할 static 변수, static 메소드은 Method area 에 들어가므로(생성되므로) 모든 객체에서 가져다 쓸 수 있다.
3. static 메소드
static 메소드는 모든 객체가 완벽하게 똑같이 동작하는 메소드를 위해서 사용한다. 대표적으로 Integer.parseInt() 메소드같은 것들이 있다.
4. static 블록
단 한번만 동작한다. 역시나 클래스의 정보가 Method area 에 올라갈 때 "static 블록아 가즈아~!!" 가 찍히는 것이기 때문에, main메소드에 아무것도 없어도 자동으로 찍힌다.
public class staticEx {
static {
System.out.println("static 블록아 가즈아~!!");
}
public void printGza() {
System.out.println("가즈아~!!!!!");
}
public static void main(String[] args) {
staticEx se = new staticEx();
se.printGza();
se.printGza();
}
}
// 실행결과
static 블록아 가즈아~!!
가즈아~!!!!!
가즈아~!!!!!
출처: https://sjh836.tistory.com/125?category=679845 [빨간색코딩]
'JAVA > Java' 카테고리의 다른 글
apache commons (StringUtils) (0) | 2021.03.19 |
---|---|
time 패키지 (util.Date와 util.Calendar의 문제, LocalDate, LocalDateTime, DateTimeFormatter) (0) | 2021.03.19 |
enum (이전 방식, 개념, 동작방식, 사용예제, 관련메소드) (0) | 2021.03.19 |
서블릿 (servlet, jsp와 차이점, 컨테이너, 동작원리, web.xml) (0) | 2021.03.19 |
접근제어자 (public, protected, private, getter, setter) (0) | 2021.03.19 |
생성자 (constructor, this, 오버로딩) (0) | 2021.03.19 |
예외처리 (throwable, exception, error, throws) (0) | 2021.03.19 |
Thread의 모든 것! (스레드 생성, 생명주기, 정보, 상태, 스케줄링, 주요 메소드, synchronized) (0) | 2021.03.19 |