본문 바로가기

프로그래밍 언어/Java

final과 static

JAVA의 final 과 static을 클래스, 메소드, 변수에 사용할 때의 차이점과 용도에 관한 정리입니다.

 

 

* final 변수란?

 

변수를 상수화 시킨다. 즉 한번 값이 결정된 변수의 값은 변경이 불가능하다.

 

 * final 클래스란?

 

클래스를 final로 선언한다면, 이 클래스를 상속하는 것을 허용하지 않겠다는 뜻이다.

대표적으로 String 클래스가 있다.  

 

* final 메소드란?

 

메소드를 final로 선언한다면, 이 메소드의 오버라이딩을 허용하지 않겠다는 뜻이다. 클래스는 상속이 가능하되 해당 메소드는 오버라이딩이 불가능하다.

 


 

* static 변수란?

 

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

어디서나 접근이 가능하려면 static 변수도 public으로 선언되어야 한다.

 

- 클래스 내부에서는 얼마든지 직접 접근이 가능하다.

- 클래스 외부에서 인스턴스의 이름이나 클래스의 이름을 통해 접근하는 것도 가능하다. (defalut 변수 일땐 동일한 패키지로 묶였을 경우)

 

* static 변수의 초기화 시점

 

static 변수는 인스턴스가 생성되기 이전에 별도의 메모리 공간에 할당되어 초기화까지 완료된다.

초기화되는 시점은 JVM(Java Virtual Machin) 에 의해서 클래스가 메모리 공간에 올라가는 순간이다.

 

* static 변수 사용 이유

 

인스턴스 간에 데이터 공유가 필요한 상황에서 static 변수를 선언한다.

 

* static final 선언

 

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

ex ) static final double PI = 3.14; 

 

* static 메소드란?

 

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

사용 이유는 객체를 생성할 필요가 없는 메소드에 붙인다. 인스턴스 변수에 접근하지 않는다면 static 메소드로 정의해야 한다.

 

* public static void main 

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

 

출처 : https://goodncuteman.tistory.com/4

'프로그래밍 언어 > Java' 카테고리의 다른 글

스트림 사용 소감  (0) 2022.01.27
자바8 스트림이란?  (0) 2022.01.27
불변객체란 ?  (0) 2022.01.25
시큐어코딩(3)  (0) 2022.01.25
시큐어 코딩(2)  (0) 2022.01.25