[JAVA] static vs final

유존돌돌이·2022년 2월 16일
0

JAVA

목록 보기
10/22
post-thumbnail

1. final

  • 해당 오브젝트가 단 한번 할당할 수 있음을 의미
    1) final 변수 : 변수를 상수화 시킨다. 즉 한번 값이 결정된 변수의 값은 변경이 불가능하다
    2) final 클래스 : final 클래스는 상속당하는걸 허용하지 않겠다는 뜻
    3) final 메소드 : 오버라이딩을 허용하지 않겠다는 뜻

2. static

  • 해당 데이터의 메모리 할당을 컴파일 시간에 하는 것을 의미
    1) static 변수

    메모리 공간에 하나만 존재하며, 어디서나 접근 가능한 변수
    static 변수의 초기화 시점은 JVM(Java Virtual Machine)에 의해서 클래스가 메모리 공간에 올라가는 순간임
    static 변수 사용이유 : 인스턴트간에 데이터 공유가 필요한 상황에 사용
    static final 변수 : 클래스 내부 또는 외부에 참조용도로만 사용하는 변수 ( ex. static final double PI = 3.14)

    2) static 메소드 : 인스턴스를 사용하지 않아도 static 메소드 호출 가능

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

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

3. static이 공유의 의미인 예

classCounter{
    static int count = 0;
    Counter() {
        count++;  // count는 더이상 객체변수가 아니므로 this를 제거하는 것이 좋다.System.out.println(count);  // this 제거}
}
publicclassSample{
    publicstaticvoidmain(String[] args) {
        Counter c1 = newCounter();
        Counter c2 = newCounter();
    }
}

int count = 0 앞에 static 키워드를 붙였더니 count 값이 공유되어 다음과 같이 count가 증가되어 출력된다.

1
2
  • 보통 변수의 static 키워드는 프로그래밍시 메모리의 효율보다는 공유의 목적으로 훨씬 더 많이 사용한다.
  • static 키워드를 붙이면 자바는 메모리 할당을 딱 한번만 하게 되어 메모리 사용에 이점이 있다.

0개의 댓글