static 을 사용하는 것과 사용하지 않았을 때를 비교하면서 알아보도록 하겠다.
인스턴스 변수 & 인스턴스 메소드
우선 static 이 붙지 않으면 변수일때는 인스턴스변수, 메소드일때는 인스턴스 메소드라고 한다.
객체가 생성되었을 때 사용 가능하다.
객체참조변수. 으로 사용한다.
인스턴스변수에 대해서는 이전에 공부하였던 게시물을 참고하도록 하겠다.
static 변수
1. 매개변수 앞에 사용할 수 없다.
void A (staticint i){
}
2. static 변수 자동초기화
static int sv();
인스턴스변수처럼 heap 영역에 초기화 되는 것이 아니며 자동으로 초기화 된다.
static변수 :
장점: 객체와 무관한 객체들간의 공유변수로 사용된다.
단점: 클래스영역에 탑재가 되었고 클래스가 로드될때 자동 탑재 된것이고 소멸되는 시점은 프로그램이 끝날때이다.
그렇기때문에 탑재된 메모리가 계속 남아있는 것이 된다. 메모리 효율성이 떨어진다.
클래스로드 후 자동초기화된다.
* 사용법
1. 객체참조변수.static변수
2. 클래스명.static변수
1. 객체참조변수.static변수
위 그림에서 파랑선을 보게되면, 객체를 생성하고 stack에는 b1 , Heap안에는 B 적재된다.
객체 참조변수는 b1이 참조하고 있는 참조객체로 향하여 값을 넣어주게 된다.
2. 클래스명.static변수
반대로 빨강선을 보면 B는 B클래스로 바로 가서 sv에 값이 할당된다.
둘다 사용할 수 있지만 static 변수를 사용하는 이유는 객체와 무관하게 공유되어 사용할 수 있는 점이 있기때문에
2번째를 사용하는 것이 static변수를 쓰는 효과적인 방법이 된다.
static 메소드
void im() { //인스턴스메소드
sm(); //this.sm();
System.out.println(iv); //this.iv
System.out.println(sv); //this.sv
}
static void sm() { //static 메소드
// im(); 컴파일오류 - this.im(); 가 생략된 것으로
// this는 현재사용하는 객체를 가르키는데 가르키는 객체가 없기때문에
}
static메소드 : 객체와 무관한 기능을 제공하기 위함.
* 사용법
객체참조변수.static메소드();
클래스명.static메소드();
* static메소드 내부에서는 this , 인스턴스메소드, 인스턴스변수 사용하지 못한다.
* ex)Math.random(); 클래스이름.random();
static 메소드를 호출하거나 static변수를 사용할 수 있다.
'java' 카테고리의 다른 글
java_7_싱글톤 (0) | 2021.10.18 |
---|---|
java_7_예약어 (접근제어자) & 캡슐화 (0) | 2021.10.18 |
java_6_ 클래스 구성 (생성자) (0) | 2021.10.14 |
java_5_ 클래스 구성 (필드 , 메소드, 오버로딩) (0) | 2021.10.13 |
Selection Sort & Bubble Sort (0) | 2021.10.13 |