개발/Java
[자바/JAVA] 정적 변수와 메서드 (static)
poongho
2021. 6. 25. 10:40
반응형
1. 정적(static) 멤버란?
- Static변수와 Static메소드를 합쳐 정적 멤버라고 한다. (또는 클래스 멤버)
- 클래스에 소속된 멤버로 인스턴스 생성 여부에 상관없이 모든 인스턴스에서 공통으로 사용한다.
2. 정적(static) 멤버 특징
- Static 키워드를 통해 생성된 정적 멤버들은 Heap 영역이 아닌 Static 영역에 할당된다.
- Static 영역에 할당된 메모리는 인스턴스 생성과는 별개로 모든 객체가 공유하여 사용할 수 있는 장점이 있다.
(Gabage Collector의 관리 영역 밖에 존재하기 때문에 Static을 남발하게 되면 시스템 성능에 문제가 생길 수 있다.)
3. 정적(static) 멤버 vs 인스턴스 멤버
- 필드 혹은 메서드 생성시 정적으로 생성할 것인지, 인스턴스로 생성할 것인지에 대한 판단 기준은 공용으로 사용
하느냐 아니냐로 판단하면 된다.
4. 정적(static) 멤버 사용 예시
- 정적 필드
class Number{
static int num = 0; //클래스 필드
int num2 = 0; //인스턴스 필드
}
public class Static_ex {
public static void main(String[] args) {
Number number1 = new Number(); //첫번째 number
Number number2 = new Number(); //두번쨰 number
number1.num++; //클래스 필드 num을 1증가시킴
number1.num2++; //인스턴스 필드 num을 1증가시킴
System.out.println(number2.num); //두번째 number의 클래스 필드 출력
System.out.println(number2.num2); //두번째 number의 인스턴스 필드 출력
}
}
- 정적 메서드 (정적 메소드는 유틸리티 함수를 만드는데 유용하게 사용)
class Name{
static void print() { //클래스 메소드
System.out.println("내 이름은 홍길동입니다.");
}
void print2() { //인스턴스 메소드
System.out.println("내 이름은 이순신입니다.");
}
}
public class Static_ex {
public static void main(String[] args) {
Name.print(); //인스턴스를 생성하지 않아도 호출이 가능
Name name = new Name(); //인스턴스 생성
name.print2(); //인스턴스를 생성하여야만 호출이 가능
}
}