[JAVA]Static

Date:     Updated:

카테고리:

태그:

[15] Static

15.1. 스태틱(static)의 구조

  • 프로그램 시작 전 로드, 프로그램 종료 시 소멸
  • 코드가 메서드 영역에 로드되는 과정에서 static으로 지정된 변수와 메서드는 메서드 영역 내의 스태틱 영역으로 이동

15.2. static 변수

  • 여러 인스턴스에서 공통으로 사용할 변수가 필요한 경우 사용
  • 여러 인스턴스가 공유하는 기준 값이 필요한 경우 사용
    • ex) static 변수의 예 ```
    • 학생마다 새로운 학번 생성
    • 새로운 카드를 발급할 때마다 새로운 카드 번호 부여
    • 사원이 입사할 때마다 새로운 사번이 필요한 경우 ```
  • 모든 객체가 접근 및 사용 가능
    • 전역(Global) 변수
    • 클래스 변수, 정적 변수 (↔ 인스턴스 변수)
    • 인스턴스 생성과 무관하게 사용할 수 있어 클래스명으로 직접 참조 권장
  • 유의사항
    • 프로그램이 메모리에 있는 동안 할당된 영역을 계속 점유함
    • 너무 큰 메모리를 할당하는 것은 지양해야 함
    • 클래스 내 여러 메서드에서 사용하는 변수는 멤버변수로 선언하는 것이 권장
      • 멤버변수가 너무 많으면 인스턴스 생성시 쓸데없는 메모리가 할당되므로 상황에 유의

15.3. 변수의 유형

변수 유형 선언위치 사용범위(Scope) 메모리 생성과 소멸 (life cycle)
지역 변수(로컬 변수) 메서드 내부 메서드 내부에서만 Stack 메서드가 호출될 때 생성되고 메서드가 끝나면 소멸
멤버 변수(인스턴스 변수) 클래스 내부 클래스 내부에서 사용. private 또는 참조변수를 통해 다른 클래스에서 사용 가능 Heap 인스턴스가 생성될 때 힙에 생성되고, Garbage Collector가 메모리를 수거할 때 소멸
static 변수(클래스 변수) 클래스 내부 클래스 내부에서 사용. private 또는 클래스명을 통해 다른 클래스에서 사용 가능 Method Area 프로그램이 처음 시작할 때 상수와 함께 데이터(메서드) 영역에 생성되고, 프로그램을 끝낼 때 메모리 해제와 함께 소멸

15.4. 싱글톤 패턴(Singleton Pattern)

  • 용도
    • 클래스의 인스턴스가 오직 하나임을 보장하며, 해당 인스턴스로 접근할 수 있는 방법을 제공하는 패턴
    • 프로그램에서 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴.
  • 구현하기
    • static 변수, 메서드를 활용하여 구현 가능
    • 클래스의 인스턴스는 단 하나이며, 접근 방법 또한 하나로만 통일하여 제공.
    • 클래스 다이어그램을 통해 표시
    • 회사 객체 구현하기
      • 생성자 : private
      • 클래스 내부에 유일한 private 인스턴스 생성
      • 외부에서 유일한 인스턴스를 참조할 수 있는 public 메소드 제공

JAVA 카테고리 내 다른 글 보러가기

댓글 남기기