자바의 static과 final

포모·2020년 12월 17일
0

JAVA의 기본

목록 보기
9/9

프로그래밍을 하면서 finalstatic에 대한 개념이 헷갈리던 순간이 있었습니다.
도대체 이 둘의 차이는 무엇일까요?


final

final은 마지막, 최종적이라는 의미에서 상수나 메소드, 클래스 정의 후 변경되지 못하게 하기 위해 사용합니다.


1. 상수 정의

final int a = 3;
a =10;		// error

상수에 값을 한 번 저장하고 다음에 다시 바꾸지 않을 때 사용합니다.


2. 메서드 정의

class Parent {
	public final void show() {
		...
	}
}

public class Main extends Parents {
	// show() 함수 재정의가 불가능합니다.
}

final 메소드를 사용하면 자식 클래스에서 오버라이딩이 불가능합니다.


3. 클래스 정의

final class Parents {
	...
}

class Main extends Parents {	// error
	...
}
  • 클래스에 final 키워드는 상속을 못하게 할 때 사용합니다.
  • finalParents 클래스는 객체를 생성할 수 없습니다.

static

static으로 선언된 변수는 메모리 공간에 하나만 존재하고, 어디서나 접근이 가능한 변수입니다.


static final

클래스 내부 또는 외부에서 참조의 용도로 선언된 변수는 static final로 선언합니다.

즉 객체마다 값이 바뀌는 것이 아닌 클래스에 존재하는 상수이므로 선언과 동시에 초기화를 해 주어야하는 클래스 상수입니다.

1. 상수 정의

static final double PI = 3.14;

2. 메소드 정의

인스턴스를 생성하지 않아도 static 메소드를 호출할 수 있다.

class Parents {
	public static void show() {
		System.out.println("show");
	}
}

public class Application {
    public static void main(String[] args) {
	Parents.show();
}

Main

main 메소드는 인스턴스 생성과 관계없이 JVM에 의해 호출되므로 반드시 static으로 호출되어야한다고 합니다.

public static void main(String[] args) {
	...
}

🛴 마무리

한번 정리해야지 해야지 하면서 계속 안하고 있었던 내용입니다.
이러다가 까먹고 안할거 같아서 후다닥 정리했습니다. 🤣
내용 자체는 어렵지 않아서! 한번씩 쭉 읽으면 도움이 많이 될 거 같습니다.


참고

0개의 댓글