프로그래밍을 하면서 final
과 static
에 대한 개념이 헷갈리던 순간이 있었습니다.
도대체 이 둘의 차이는 무엇일까요?
final
은 마지막, 최종적이라는 의미에서 상수나 메소드, 클래스 정의 후 변경되지 못하게 하기 위해 사용합니다.
final int a = 3;
a =10; // error
상수에 값을 한 번 저장하고 다음에 다시 바꾸지 않을 때 사용합니다.
class Parent {
public final void show() {
...
}
}
public class Main extends Parents {
// show() 함수 재정의가 불가능합니다.
}
final
메소드를 사용하면 자식 클래스에서 오버라이딩이 불가능합니다.
final class Parents {
...
}
class Main extends Parents { // error
...
}
final
키워드는 상속을 못하게 할 때 사용합니다. final
인 Parents
클래스는 객체를 생성할 수 없습니다.static
으로 선언된 변수는 메모리 공간에 하나만 존재하고, 어디서나 접근이 가능한 변수입니다.
클래스 내부 또는 외부에서 참조의 용도로 선언된 변수는 static final
로 선언합니다.
즉 객체마다 값이 바뀌는 것이 아닌 클래스에 존재하는 상수이므로 선언과 동시에 초기화를 해 주어야하는 클래스 상수입니다.
static final double PI = 3.14;
인스턴스를 생성하지 않아도 static 메소드를 호출할 수 있다.
class Parents {
public static void show() {
System.out.println("show");
}
}
public class Application {
public static void main(String[] args) {
Parents.show();
}
main
메소드는 인스턴스 생성과 관계없이 JVM에 의해 호출되므로 반드시 static
으로 호출되어야한다고 합니다.
public static void main(String[] args) {
...
}
한번 정리해야지 해야지 하면서 계속 안하고 있었던 내용입니다.
이러다가 까먹고 안할거 같아서 후다닥 정리했습니다. 🤣
내용 자체는 어렵지 않아서! 한번씩 쭉 읽으면 도움이 많이 될 거 같습니다.