final과 static

cutiepazzipozzi·2023년 3월 28일
2

지식스택

목록 보기
13/35
post-thumbnail

잼민시절 정리글

그렇게 오래된 글은 아니지만 제대로 정리를 안하고 끝난 거 같기도 하고 이펙티브 자바 인터페이스&클래스를 배우며 불변, 고정에 대한 말이 자주 나오는 거 같아 헷갈리는 두 개념에 대해 정리하고자 한다.

final = 최종

=> 최종적인 값이므로, 값의 수정이 불가!

  • 오버라이딩상속이 불가능!
    (Immutable and Read-Only)
  • 그러나 list 변수의 변경은 불가하나 내부는 변경이 가능하다.
final List<Integer> num = {1,2,3,4,5,6};
num.add(7); //가능!

//그래서 Collections.unmodifiableList()가 사용됨

++ Java8에서 추가된 Effective final

int num = 10; //Effective final이다
//선언부터 소멸까지 값이 변경 X이므로

Number number = new Number() {
	@Override
    public void print() {
    	System.out.println("num: "+num);
    }
}
number.print();

static = 고정

=> 객체 생성 없이 사용할 수 있는 필드, 메서드 생성하고자 할 때!

  • 객체 참조를 하지 않으므로 this 메서드를 당연히 사용할 수 X

보통은 클래스 선언시에 많이 사용된다.

ex. public static class Student {}

인스턴스 필드를 포함하지 않고 공용으로 사용되기 때문에

public static class Yeonsan {
	static int val = 10;
    static int gop(int a, int b) {
    	return a*b;
    }
}

int res1 = Yeonsan.gop(4, 5);
int res2 = Yeonsan.val+5;

위의 경우처럼 바로 굳이 선언해주지 않고 메서드나 필드에 접근하면 됨

  • 메모리 안의 static 영역에 들어가기 때문에, Garbage Collector의 영향을 받지 않아 데이터가 그대로 남아 있어 남발하게 되면 데이터의 낭비가 발생한다.
  • main 메서드는 JVM 호출에 의해 실행되기 때문에 무조건 static으로 선언되어야 한다.

static final은?

말 그대로 해석해보자. 최종적으로 고정돼 있는 변수. 값을 변경할 수 없는 변수. 딱 상수앞에 잘 쓰일 거 같지 않은가?

(ex) static final double PI = 3.141592..

참고

https://doing7.tistory.com/146
https://sudo-minz.tistory.com/135
https://gobae.tistory.com/3

profile
노션에서 자라는 중 (●'◡'●)

0개의 댓글