static변수

박건태·2023년 8월 11일
0

공통으로 사용하는 변수가 필요한 경우

  • 여러 인스턴스가 공유하는 기준 값이 필요한 경우
  • 학생마다 새로운 학번 생성
  • 카드회사에서 카드를 새로 발급할때마다 새로운 카드 번호를 부여
  • 회사에 사원이 입사할때 마다 새로운 사번이 필요

static 변수 선언과 사용하기

  • static int serialNum;
  • 인스턴스가 생성될 때 만들어지는 변수가 아닌, 처음 프로그램이 메모리에 로딩될 때 메모리를 할당
  • 클래스 변수, 정적변수라고도 함(vs 인스턴스 변수)
  • 인스턴스 생성과 상관 없이 사용 가능하므로 클래스 이름으로 직접 참조
    ex) Student.serialNum = 100;

변수 유형

  • 지역변수( 로컬 변수 )
    1.함수 내부에 선언
    2.함수 내부에서만 사용
    3.스택
    4.함수가 호출될때 생성되고 함수가 끝나면 소멸함

  • 멤버변수(인스턴스 변수)
    1.클래스 멤버 변수로 선언
    2.클래스 내부에서 사용하고 private이 아니면 참조 변수로 다른 클래스에서 사용가능
    3.힙
    4.인스턴스가 생성될때 힙에 생성되고, 가비지 컬렉터가 메모리를 수거할때 소멸됨

  • static변수(클래스 변수)
    1.static 예약어를 사용하여 클래스 내부에 선언
    2.클래스 내부에서 사용하고 private이 아니면 클래스 이름으로 다른 클래스에서 사용 가능
    3.데이터 영역
    4.프로그램이 처음 시작할때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할때 소멸됨.

주의 사항

  • static 변수는 프로그램이 메모리에 있는 동안 계속 그 영역을 차지하므로 너무 큰 메모리를 할당하는 것은 좋지 않음
  • 클래스 내부의 여러 메서드에서 사용하는 변수는 멤버 변수로 선언하는 것이 좋음
  • 멤버 변수가 너무 많으면 인스턴스 생성 시 쓸데없는 메모리가 할당됨
  • 상황에 적절하게 변수를 사용해야 함

싱글톤 패턴

  • 프로그램에서 인스턴스가 단 한 개만 생성되어야 하는 경우 사용하는 디자인패턴
  • static 변수, 메서드를 활용하여 구현 할 수 있음

0개의 댓글