Skip to content

Latest commit

 

History

History
123 lines (93 loc) · 3.25 KB

2021.10.04_java-static.md

File metadata and controls

123 lines (93 loc) · 3.25 KB

2021.10.05_java-static

클래스변수와 클래스 메소드

클래스 변수

  • 어떤 변수든 메소드는 무조건 클래스 안에 존재한다.
  • 그러나 만약에 전체 프로그램에서 딱하나를 만들어서 공유해야하는 변수가 있다고 했을때 사용
  • 변수나 메소드의 경우 무조건 클래스가 감싸야하는 것이 규칙

static 변수 선언

  • 만약 A, B, C 클래스가 있다고 했을 때
  • 방법은 좀더 연관성 있는 곳에 자리를 빌려서 들어가면 됨
  • static int num;
    • 스태틱 변수, 클래스 변수라고 말함
class A{
  static int num;
	...
}
class B{
  ...
}
class C{
...
}
  • 위와 같을 때, A클래스에 대해서는 자리를 빌려준 대신에 private라고 접근 수준 지시자가 되어 있어도 접근 무조건 가능함
  • static은 선언하고 동작시 메모리에 한개만 존재함

생성 시기

  • JVM에 인스턴스 생성 되었을때

    • 인스턴스 생성 이 아니더라도 클래스이름으로 그 변수를 접근했을때

      jvm이 따로 메모리를 할당하여 변수 0으로 초기화 해서 생성함

규칙

  • 대신 접근 수준 지시자의 규칙을 따른다.
  • 클래스안에서 private라고 되어 있으면 그 클래스만 사용가능
  • public으로 되어있어야 전체 클래스가 사용가능함

클래스 변수의 접근 방법

  • 클래스 내부 접근
    • static 변수가 선언된 클래스 내에서는 이름만으로 직접 접근 가능
  • 클래스 외부 접근
    • private로 선언되지 않으면 클래스 외부에서도 접근가능
    • 접근 수준 지시자가 허용하는 범위에서 접근가능
    • 클래스 또는 인스턴스의 이름을 통해 접근
class AW{
  static int num =0;
  ...
}
class A{
  public static void main(String[] args){
		//1. 방법
    AW aw = new AW();
    aw.num++;
    //2. 방법
   	AW.num++;
  }
}
  • AW.num, 1번 방법이 없고 그니까 인스턴스 생성 없이 저렇게 만 선언해서 실행이되면 메모리에 올라감

클래스 변수의 활용 예

  • 인스턴스 별로 가지고 있을 필요가 없는 변수
    • 값의 참조가 목적인 변수
    • 값의 공유가 목적인 변수
  • 그리고 그 값이 외부에서도 참조하는 값이라면 public으로 선언

클래스 메소드

  • 클래스 변수와 유사함
class NP{
  int num =0;
  static int showInt(int n){System.out.println(n);}
  static void showDouble(int n){System.out.println(n);}
  
  void show(){showDouble(2.0);}// 내부 접근
}
class Out{
  ...
    NP.showDouble(2);//외부 접근
}

클래스 메소드 정의 옳은 경우

  • 단순 기능 제공이 목적이 메소드들
    • 인스턴스 변수와 관련 지을 이유가 없는 메소드들은 static으로 선언하는 것이 옳음

static의 또다른 용도

  • static 초기화 블록
class Date{
static String date;
  ...
}

static{
	LocalDate nDate = LocalData.now();
  date = nDate.toString();
}
  • 인스턴스 생성과 관계 없이 static 변수가 메모리 공간에 할당될때 실행
  • 이렇게 하면 따로 인스턴스 생성 없이 자동으로 메모리에 추가되고 초기화됨
  • staic 변수를 초기화 하기 위해 사용함