728x90
반응형
static 키워드는 C언어에서도 있던 키워드이다.
static은 그럼 대체 왜 사용하는걸까?
첫 번째로 객체를 생성하지 않고도 변수를 사용하고 싶을 때 사용한다. 이 녀석은 객체가 생성되지 않아도 먼저 존재하기 때문이다.
두 번째는 같은 클래스의 객체가 모두 같은 값을 공유하고 싶을 때 사용한다.
그럼 static 키워드는 대체 어디에 쓸 수 있을까?
당연히 변수에 쓸 수있다.
그리고 객체를 생성하지 않고도 사용할 수 있는 메소드가 있다. 이 녀석은 당연히 static 메소드이다.
또, class에도 static을 붙일 수 있다. 단, inner class일때만 가능하다.
Test class라는 예를 통해 static 키워드에 대해 조금 더 자세히 알아보자
public class Test {
public int a; //멤버변수 -- 인스턴스가 된(메모리에 만들어진) 객체마다 있으므로 '인스턴스 변수'라고 부른다
public static int b;// 정적 멤버변수 -- 클래스에 한 개만 있으니까 '클래스 변수'라고 부른다
//생성자 메소드
public Test() {
a = 10;
b = 20;
}
public Test(int a, int b) {
this.a = a;
this.b = b;
}
//일반 메소드 -- 객체로 인스턴스화해야 사용할 수 있는 메소드
void aaa() {
System.out.println("멤버변수 a : " + a);
System.out.println("멤버변수 b : " + b);
}
//static 메소드 -- 객체를 만들지 않고도 사용할 수 있는 메소드
static void show() {
//System.out.println("멤버변수 a : " + a);//static 메소드 안에서는 인스턴스 변수를 사용할 수 없다
System.out.println("멤버변수 b : " + b);
}
void bbb() {
}
static void ccc() {
//bbb(); //static 메소드 안에서 인스턴스 메소드를 호출할 수 없다
}
}
여기서 인스턴스 변수라고 한 a는 일반적으로 클래스의 멤버변수라고 불리우는 녀석이다.
일반 메소드도 마찬가지로 일반적으로 클래스의 메소드라고 불리는 녀석이지만
인스턴스 변수와 마찬가지로 객체로 인스턴스화해야 사용할 수 있다.
당연하게도 static 메소드 안에서 인스턴스 변수나 일반 메소드를 사용할 수 없다.
왜냐하면, static메소드는 객체 생성 전에도 존재하는데
이 때 인스턴스 변수나 일반 메소드는 객체로 생성되지 않은 상태라면 사용이 불가능하기 때문이다.
728x90
반응형
'Language > Java' 카테고리의 다른 글
자바의 상속 - 1 (0) | 2022.05.04 |
---|---|
자바 클래스 안에 다른 클래스의 참조 변수가 있는 상황 (0) | 2022.05.02 |
자바의 생성자(Constructor) (0) | 2022.04.29 |
자바의 접근 제한자(Access Modifier) (0) | 2022.04.28 |
자바의 변수 종류 (0) | 2022.03.25 |