Roel Notebook

[Java] final , static

by Roel Downey
728x90
반응형

final

- final은 엔티티를 한번만 할당, 두 번 이상 할당하려 할 때 컴파일 오류가 발생

- 왜 쓸까?  클래스와 메소드를 제안함으로 Override로 실수하거나 버그를 줄이기 위해서 사용한다.

 

 

- Goods클래스로 객체를 만들면 변경하지 않게 하기 위해서 만든 예제이다.

public final class Goods {
    private final String name;
    private final long version;

    public Goods(String name, long version) {
        this.name = name;
        this.version = version;
    }
}

 

함수에 final를 쓰면 상속되면 안되는 경우에 final을 정의한다.

 

 

static

- static을 왜 쓸까?  다음 예제를 확인 해보자.

public class Counter  {
    static int count = 0;
    Counter() {
        this.count++;
        System.out.println(this.count);
    }

    public static void main(String[] args) {
        Counter person1 = new Counter();
        Counter person2 = new Counter();
    }
}

위의 예제에서 static 키워드를 붙였을때와 떼었을때의 차이점을 알아야한다. 

static 키워드를 사용하면 공통으로 사용하겠다. 라는 의미가 된다. 

즉, 위의 예제를 실행시키면 count가 1 , 2 로 증가 되는 걸 볼수 있다.

static 키워드를 제거하면 count가 1, 1 로 보여진다.

 

그럼 static 언제 써야할까?

 

1.클래스에서 모든 인스턴스에 공통적으로 사용 해야할 때 static을 붙인다.

 - 인스턴스를 생성하면, 각 인스턴스들은 서로 독립적이기 때문에 다른 값을 유지한다. 따라서 각 인스턴스들이 공통적으로 값을 유지하고 싶은 경우 static을 붙인다. 

 

2. static를 적은 변수는 인스턴스를 생성하지 않아도 사용 할 수 있다.

 - static이 붙은 변수는 클래스가 메모리에 올라갈 때 이미 생성되기 때문이다.

 

3. static을 적은 메서드에서는 인스턴스 변수를 사용 할 수 없다.

 - static 메서드는 인스턴스 생성 없이 호출 가능한 반면, 인스턴스 변수는 인스턴스를 생성해야만 존재하기 때문에 static이 붙은 메서드를 호출할 때 인스턴스가 생성되어 있을 수도 , 않을 수도 있어서, static이 붙은 메서드에서 인스턴스변수의 사용을 허용하지 않는다. (반대로, 인스턴스 변수나 인스턴스 메서드에서는 static이 붙은 멤버들을 사용하는 것이 언제나 가능하다. 인스턴스 변수가 존재한다는 것은 static이 붙은 변수가 이미 메모리에 존재 한다는 것을 의미하기 때문이다.)

 

 

 

728x90
반응형

블로그의 정보

What doing?

Roel Downey

활동하기