🖥CS/기술면접대비🔎

[Java] static, final, staic final 차이

Jaeyoung Kim 2022. 11. 17. 18:32
728x90

기술면접 대비 - static, final, staic final 차이

들어가며

오늘은 자바의 static, final 키워드 그리고 static final 간의 차이를 정리해보고자 한다.


static

public class PlusClass{
  static int field1 = 15;
  static int plusMethod(int x, int y){ return x+y; } 
  
  public static void main(String[] args){
  	int ans1 = PlusClass.plusMethod(15,2);
	int ans2 = PlusClass.field1 + 2;
  }
}

static은 "고정된" 이라는 의미를 가진다.

메모리를 공유하여 사용하기 때문에 필요할 때 바로바로 호출하거나 데이터를 가져오는게 가능하다.

즉, 별도의 객체 생성없이 사용할 수 있는 필드와 메서드를 생성하려할 때 활용된다.

공용데이터에 해당하거나 인스턴스 필드를 포함하지 않는 메서드를 선언하고자 할 때 이용한다.

 

final

final은 "최종적인" 이라는 의미를 가진다.

즉, 해당 변수는 값이 저장되면 최종적인 값으로 설정되므로 수정이 불가능하다는 의미이다.

변수, 함수, 클래스의 명시적 제한을 나타내기 위해 사용되며, 적절한 final 사용으로 코드 가독성을 높일 수 있다.

 

상수 정의에 사용

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

형태 :    final 타입명 상수명 

final int a;
//final int a=1; 상수 선언과 함께 값을 정의해도 된다.
Scanner s= new Scanner(System.in);
a=s.nextInt();
//a=10; 오류 (값을 변경할 수 없다)
System.out.println(a);
메서드에 사용

오버라이딩(재정의)을 못하게 만든다.

형태 :   final 반환명 메서드명 (매개변수) {} 

class Test{
	public final void test2(){
    	//내용정의
	}
}

public class Main extends Test{
	//public test2(){} compile error: final method는 오버라이딩 못함
}
클래스에 사용

상속을 못하게 만든다.

형태 :   final class 클래스명{} 

final class Test{
	int test;
}
//class Main extends Child{} final class는 상속할 수 없다

 

static final

static final double PI = 3.141592;

static final은 앞서 설명한 static과 final을 합쳐서 생각해보면 된다. "고정된" + "최종적인"의  의미로, 상수를 선언할 때 사용된다.

즉, static final은 객체(인스턴스)가 아닌 클래스에 존재하는 단 하나의 상수이다. 즉, 객체마다 값이 바뀌는 것이 아닌 선언과 동시에 초기화가 필요한 클래스 상수를 의미한다.


Reference

Go devlog - [Java] static, final, static final의 차이

guccin - [Java] static과 final의 차이가 뭘까?(feat. JVM 메모리)

Geun LAB - [Java] final 과 static final 차이

 

728x90