본문 바로가기
야미스터디/Java

[JAVA] static 변수

by 의정부핵꿀밤 2022. 7. 26.
728x90

static 메모리

  • 일반적으로 Class는 Static 영역에 생성되고, new 연산을 통해 생성한 객체는 Heap 영역에 생성된다
  • 객체의 생성 시에 할당된 Heap 영역의 메모리는 Garbage Collector를 통해 수시로 관리를 받는다
  • Static 키워드를 통해 Static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점이 있지만, Garbage Collector의 관리 영역 밖에 존재하므로 Static을 자주 사용하면 프로그램의 종료시까지 메모리가 할당된 채로 존재하기 때문에 성능이 저하된다

 

 

 

 

 

static 변수(정적 변수) 란?

  • 자바 언어 예약어로 클래스 메서드와 클래스 필드를 지정할 때 사용한다
  • 인스턴스(객체)를 생성하지 않아도 클래스의 메서드와 필드에 접근을 가능하게 한다
  • 메모리에 고정적으로 한 번 할당되어 프로그램이 종료될 때 해제되는 것을 의미한다

 

 

 

 

 

Static 메소드

  • Static Method는 객체의 생성 없이 호출이 가능하며, 객체에서는 호출이 가능하지만 지양한다
  • 일반적으로는 유틸리티 관련 함수들은 여러 번 사용되므로 static 메소드를 구현하는 것이 적합하다
  • static 메소드에서는 static이 선언되지 않은 변수에 접근이 불가능한데, 이는 메모리 할당과 연관지어 생각해보면 당연하다
  • 그냥 메소드는 new 연산을 통해 객체가 생성된 후에 메모리가 할당되지만, static 메소드는 객체의 생성 없이 접근하는 함수이기 떄문에 할당되지 않은 메모리 영역에 접근을 해서 문제가 발생한다
  • 따라서 static 메소드에서 접근하기 위한 변수는 반드시 static 변수로 선언되어야 한다

 

 

 

 

static의 장점

  • static이 메모리 측면에서 효율적일 수 있다
    • static 메모리 영역에 저장되어 고정된 메모리 영역을 사용하기 때문에 매번 인스턴스를 생성하며 낭비되는 메모리를 줄일 수 있다
  • 객체를 생성하지 않고 사용이 가능하기 때문에 속도가 빠르다
    • 클래스가 메모리에 올라가는 시점에 생성되어 바로 사용이 가능하기에 속도면에서 이점을 갖는다

 

 

 

static의 단점

  • 프로그램 종료시까지 메모리에 할당된 채로 존재한다
    • 우리가 만든 Class는 프로그램 실행 시 static 영역에 생성된다
    • 그런데 Garbage Collector를 통해 수시로 관리를 받는 Heap 영역과 다르게 Static 영역은 Garbage Collector의 관리를 받지 않는다
    • 그래서 Static 영역은 프로그램 종료시까지 메모리에 존재한다
    • 만약 프로그램에서 static을 많이 사용하면, 종료시까지 메모리가 할당된채로 존재하기 떄문에 성능에 악영향을 준다
  • Static은 객체지향적이지 못하다
    • static은 따로 객체를 생성하지 않고 메모리의 static 영역에 할당된 곳에서 여러 클래스들이 데이터를 불러온다
    • 이러한 static의 특징은 객체의 데이터들이 캡슐화되어야 한다는 객체지향 프로그래밍의 원칙을 위반한다
  • static 메서드는 Interface를 구현하는데 사용될 수 없다
    • static 메서드는 코드의 재사용성을 높여주는 자바의 유용한 객체지향적 기능(interface)을 사용하는 것을 방해한다
728x90

'야미스터디 > Java' 카테고리의 다른 글

[Java] Mutable vs Immutable 📌  (0) 2022.08.07
[Java] 접근 제한자 / 생성자 / SOLID 📌  (0) 2022.08.06
[Java] 객체지향 vs 절차지향 📌  (0) 2022.07.22
[JAVA] RuntimeException  (0) 2022.07.21
[JAVA] 정규 표현식  (0) 2022.04.18

댓글