[Java] static

Chloe Choi·2020년 11월 29일
0

Java

목록 보기
2/5

= 정적인, 움직이지 않는
즉, 메모리에 고정적으로 할당되어 프로그램이 종료될 때 해제되는 변수나 함수에 쓰는 키워드입니다.

where

"고정적으로 할당" 어디에 할당되는 걸까요? -> method 영역입니다!
(method 영역은 클래스에 대한 메타정보(멤버변수, 클래스변수(static 변수), 생성자, 메소드)를 저장하는 공간입니다~)

when

클래스가 사용되기 전, 미리 static을 메모리에 올립니다.

이로인해 static은 다음 특징을 갖게돼요~

  • 객체 생성없이 바로 사용가능 -> 즉, 객체와 무관해 집니다.
StaticTest.a; // 변수 a.k.a 클래스 변수(클래스가 존재하는 영역과 같기 때문)
StaticTest.add(); // Math 클래스의 모든 메소드는 클래스 메소드(static method)이므로 이와 같이 사용할 수 있음!
  • 공유변수나 공유메소드로 사용가능 -> 메모리 사용 최소화
  • static 메소드 내에서는 일반 변수를 사용할 수 X (일반 변수는 늦게 메모리에 올라가잖아유)

장단점

장점

  • 공유자원
  • 메모리를 효율적으로 사용
  • 빠른속도(객체생성이 필요 없잖아요)

단점

  • 무분별한 static 사용은 메모리 낭비를 불러올 수 있습니다.
    (method 영역은 GC가 작동하지 않기 때문에 사용하지 않아도 프로그램 종료까지 메모리를 차지해요ㅜㅜ)
  • 오류발생 시 디버깅이 어려움
    (코드의 여러 부분에서 영향을 받기 때문에 변화추적이 어렵습니다. -> 캡슐화를 위배해 객체지향적이지 않죠~?)
  • static 메소드에서는 only static 변수 사용가능
  • 상속불가능 -> 확장에 어려움 (자세한 설명은 [Java] static method 상속)

static에 대해 알아봤는데요, 그럼 Java의 main 메소드는 왜 static 일까요?
-> main 메소드는 인스턴스의 생성과 관계없이 JVM에 의해 호출되므로 반드시 static으로 선언해야 합니다~

profile
똑딱똑딱

3개의 댓글

comment-user-thumbnail
2020년 12월 11일

항상 사용해오던 static인데 모르던 것이 많았네요.
좋은 글 감사합니다!

1개의 답글
comment-user-thumbnail
2021년 5월 21일

이해가 똑딱똑딱 너무 잘돼여🍎

답글 달기