우리는 객체를 생성할 클래스 내의 필드에 변수들, 그리고 메서드를 지정해 줄 수 있는데
그 변수를 어떤식으로 활용하게 만들지를 static이라는 키워드를 통해 정할 수 있습니다.
그렇다면 static은 어떤 역할을 하는 키워드일까요?
먼저 static은 클래스의 멤버(필드,메서드,이너 클래스)에 사용하는 키워드입니다.
필드에는 클래스의 속성을 나타내는 변수들을 지정하는데
static을 붙이지 않은 변수인 경우 instance 변수라고 부르고, 그 변수를 사용하기 위해서는 객체를 생성해서 참조변수를 통해 이용해야 합니다(참조변수 이름. 필드변수이름).
반면에 static을 붙인 변수 , 즉 class 변수는 객체를 생성하지 않고 바로 (클래스의 이름.필드변수이름)를 통해 이용할 수 있습니다. # class변수인 경우 인스턴스 변수와 같이 참조변수를 통해서도 이용할 수 있습니다.
이러한 특징의 차이는 static 키워드를 붙인 class 변수는 instance 변수와는 다르게 모든 변수의 값을 공유하기 때문인데요. 이 말이 무슨 말이냐면, 만약에 기존 클래스 내에 변수의 값을 100이라고 지정을 했는데 다른 클래스 내에서 변수의 값을 200으로 지정을 하게 되면, 기존 클래스 내의 변수의 값도 200이 된다는 얘기입니다.
public class CordJgMethod {
public static void main(String[] args) {
Action action = new Action();
Action.act();
System.out.println(Action.n); --> 5
action.n= 100;
System.out.println(action.n); --> 100
Action.act();
}
}
class Action{
static int n=5;
static void act(){
System.out.printf("클래스 변수는 값을 공유해서 기존 클래스 내의 필드변수의 값도 변하는가? %d \n",n);
react();
}
// void react()->오류 (static void act 안에 react()는 static이 없는 경우 사용이 불가능)
static void react(){
System.out.println("인스턴스 메서드는 사용이 불가능 하다?");
}
}
//출력
클래스 변수는 값을 공유해서 기존 클래스 내의 필드변수의 값도 변하는가? 5
인스턴스 메서드는 사용이 불가능 하다?
5
100
클래스 변수는 값을 공유해서 기존 클래스 내의 필드변수의 값도 변하는가? 100
인스턴스 메서드는 사용이 불가능 하다?
위 코드를 살펴보면 static 을 붙인 필드변수의 값을 Action.n , action.n 을 통해 각각 구할 수 있는 것을 알 수 있고
static을 붙인 메서드 또한 마찬가지로 클래스 명을 통해 직접 호출할 수 있는 것을 알 수 있습니다.
클래스 외부에서 필드변수인 n의 값을 변화시켰음에도 불구하고
클래스 내부의 메서드인 act()를 호출했을 때 n의 값이 변화되어 호출되는 것을 통해
static 변수는 값을 공유한다는 것을 알 수 있습니다.
또한, static을 붙인 메서드 안에는 static을 붙이지 않은 instance 변수나 instance 메서드를 사용할 수 없습니다.
이건 본인이 직접 코딩을 통해 따져보는 게 가장 이해하기 쉬울 거라 생각합니다.
'Java > Java' 카테고리의 다른 글
Java Thread (0) | 2023.01.21 |
---|---|
Java StringBuilder 사용하는 이유와 사용법 (0) | 2023.01.21 |
Java 문자열 나누는 방법, 문자열 자르기 ( substring(), split()) (0) | 2023.01.15 |
Java 컬렉션 프레임워크 Map(HashMap) #로그인 코드 만들기 (0) | 2023.01.14 |
Java 컬렉션 프레임워크_ Set(TreeSet) (0) | 2023.01.14 |