본문 바로가기
Java

[자바] Static 키워드

by Sky Titan 2020. 10. 23.
728x90

※참조 :

 

[Java] Static 키워드 바로 알고 사용하자

자바를 한번쯤 공부해본사람이라면 static키워드를 모르지는 않을 것입니다. 하지만, 바르게 알고 있는 사람들은 그리 많지 않습니다. 자바경력자를 면접볼 때 static키워드에 대해서 질문하곤 합

vaert.tistory.com

Static

  • static이 붙은 변수, 메소드는 클래스가 메모리에 올라갈 때 선언이 되어서 인스턴스(클래스 객체)를 생성하지 않고 사용이 가능
  • 정적인 -> 메모리에 고정되기 때문
  • static을 사용한다의 궁극적 의미는 모든 객체가 '공유' 하고 있다는 의미

메모리 구조

RuntimeData Area에 있는 메소드 영역, Heap 영역

1. 메소드 영역

  • 클래스가 올라가는 메모리 영역
  • GC의 영향을 받지 않고 항상 상주하는 영역
  • static으로 선언된 것들이 올라가는 영역
  • 클래스에서 생성된 모든 객체들은 자신이 속한 클래스에서 접근할 수 있기 때문에 static이 붙은 데이터에 모든 객체가 동일하게 접근 가능

2. Heap 영역

  • 클래스에서 생성된 객체(인스턴스)들이 올라가는 영역
  • GC가 관찰하면서 참조되지 않는 메모리들을 회수

멤버변수에 static을 써야할 때

  • 모든 인스턴스가 공통적으로 가져야하는 속성일 때 static을 붙임

메소드에 static을 써야할 때

  • 객체의 데이터(객체의 현재 상황)에 영향을 받지 않고 완벽하게 동일하게 동작하는 메소드를 만들고 싶을 때
  • ex) Integer.parseInt()

메소드 내에서 인스턴스 변수를 사용하지 않으면 가급적 static 붙이는게 좋음

  • 호출 시간 짧아짐
  • but 메모리가 회수되지 않음

예시

  • 붕어빵 클래스를 만들어보자
  • 붕어빵 클래스에서 모든 붕어빵들을 밀가루 반죽을 공통으로 사용하고 모양도 모두 붕어빵 모양으로 공통이다.
  • 하지만 붕어빵의 속은 팥을 사용할 수도 있고 슈크림을 쓸수도 있기에 인스턴스마다 다 달라야하는 속성임.

static 블럭 { }

  • 클래스가 메모리 상에 올라갈 때 단 한 번만 호출되는 영역
statc{

 System.out.println("한 번만 실행됨");

}
728x90

'Java' 카테고리의 다른 글

[자바] final 키워드  (0) 2020.10.23
[자바] 추상 클래스 (Abstract Class)  (0) 2020.10.23
[자바] 접근 제어자  (0) 2020.10.23
[자바] 직렬화 (Serialize)  (0) 2020.10.20
[자바] hashCode()  (0) 2020.09.17

댓글