Java의 정적 변수와 최종 변수의 차이
이 튜토리얼은 static
키워드와 final
키워드의 차이점을 보여줍니다. 표 형식과 작업 예제의 차이점에 대해 논의해 보겠습니다.
static |
final |
---|---|
선언 중에는 정적 변수를 초기화할 필요가 없습니다. | 선언할 때 최종 변수를 초기화해야 합니다. |
정적 변수를 다시 초기화할 수 있습니다. | 최종 변수는 다시 초기화할 수 없습니다. |
중첩된 정적 클래스, 변수, 메서드 및 블록과 함께 사용됩니다. | 클래스, 메서드 및 변수와 함께 사용됩니다. |
정적 메서드는 다른 정적 메서드에서만 호출할 수 있습니다. | 최종 메서드는 하위 클래스에서 재정의할 수 없습니다. |
Java의 정적 변수
정적 변수나 메서드를 만들 때 객체가 아닌 클래스에 연결됩니다. 변수 또는 메서드는 전체 프로그램에 대해 동일한 참조를 공유합니다.
다음 프로그램에는 num
정적 변수를 포함하는 DummyClass
클래스와 dummyMethod()
라는 정적
메서드가 있습니다. 다른 클래스에서 이 두 멤버에 액세스하려면 정적이기 때문에 DummyClass
의 개체를 만들 수 없습니다.
클래스 이름을 사용하여 직접 호출합니다.
예시:
public class ExampleClass3 {
public static void main(String[] args) {
DummyClass.num = 5;
System.out.println("Static variable value: " + DummyClass.num);
DummyClass.dummyMethod();
}
}
class DummyClass {
public static int num = 0;
public static void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
출력:
Static variable value: 5
Inside Static Dummy Method
외부 클래스에 대한 참조 없이 정적
키워드를 사용하는 중첩 클래스. static
키워드를 사용하여 클래스 내부에 내부 클래스를 만들 수 있습니다.
아래 예제에서는 DummyClass
클래스가 있고 그 안에 InnerClass
라는 정적 클래스를 만들고 이 클래스에서 dummyMethod()
메서드를 만듭니다.
이제 ExampleClass3
클래스에서 DummyClass.InnerClass
를 사용하여 InnerClass
를 가져오고 DummyClass
클래스의 개체를 만들고 dummyMethod()
함수를 호출합니다.
예시:
public class ExampleClass3 {
public static void main(String[] args) {
DummyClass.InnerClass dummyClassObj = new DummyClass.InnerClass();
dummyClassObj.dummyMethod();
}
}
class DummyClass {
static class InnerClass {
void dummyMethod() {
System.out.println("Inside Static Dummy Method Of The Inner Static Class");
}
}
}
출력:
Inside Static Dummy Method Of The Inner Static Class
Java의 최종 변수
최종 변수는 초기화되면 수정할 수 없습니다. 이 예에서는 최종 변수를 만든 다음 다시 초기화하려고 하면 출력에 오류가 발생함을 보여 줍니다.
public class ExampleClass3 {
public static void main(String[] args) {
final int num = 0;
num = 1;
}
}
출력:
java: cannot assign a value to final variable num
다른 클래스는 final
클래스를 확장할 수 없습니다. 클래스를 생성하는 동안 final
키워드를 사용하면 클래스가 다른 클래스에 상속되지 않도록 제한됩니다.
예시:
public class ExampleClass3 {
public static void main(String[] args) {
new DummyClass().dummyMethod();
}
}
final class DummyClass {
public void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
class DummyClass2 extends DummyClass {
public void dummyMethod2() {
System.out.println("Inside Static Dummy Method 2");
}
}
출력:
java: cannot inherit from final com.tutorial.DummyClass
우리는 서브클래스에서 final
메소드를 재정의할 수 없습니다. 최종 클래스와 마찬가지로 함수가 final
키워드를 사용하는 경우 해당 하위 클래스에 의해 재정의될 수 없습니다.
public class ExampleClass3 {
public static void main(String[] args) {
new DummyClass2().dummyMethod();
}
}
class DummyClass {
public final void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
class DummyClass2 extends DummyClass {
public void dummyMethod() {
System.out.println("Inside Overridden Dummy Method");
}
}
출력:
java: dummyMethod() in com.tutorial.DummyClass2 cannot override dummyMethod() in com.tutorial.DummyClass
overridden method is final
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn