카테고리 없음

[김영한_자바기본][8.final] finl 변수와 참조

줌인. 2024. 2. 8. 08:19

네, 이해를 돕기 위해 더 간단한 예시를 제시해보겠습니다.

```java
public class Example {
    int value;

    Example(int value) {
        this.value = value;
    }
}

public class Main {
    public static void main(String[] args) {
        // 예시 1: final 키워드가 없는 경우
        Example ex1 = new Example(10); // ex1이라는 변수가 Example(10)을 가리킴
        ex1 = new Example(20); // ex1 변수가 새로운 Example(20)을 가리킴

        // 예시 2: final 키워드가 있는 경우
        final Example ex2 = new Example(30); // ex2라는 변수가 Example(30)을 가리킴
        // ex2 = new Example(40); // final 키워드 때문에 새로운 객체를 할당할 수 없음

        // 객체의 내부 상태 변경은 final과 관계 없이 가능
        ex2.value = 40; // ex2가 가리키는 Example(30)의 value를 변경
        System.out.println(ex2.value); // 출력 결과: 40
    }
}
```

위의 코드에서 `ex1`은 final 키워드가 없으므로 다른 객체로 재할당이 가능합니다. 하지만 `ex2`는 final 키워드가 있으므로 한 번 초기화된 후에는 다른 객체로 재할당할 수 없습니다. 단, 객체의 내부 상태인 `value`는 final 키워드와는 관계없이 변경할 수 있습니다.

 

 

==

 

기본 생성자를 사용하는 예시 코드를 제공해 드리겠습니다.

```java
class Data {
    int value;

    Data() {
        this.value = 0; // 기본 생성자에서 값을 초기화
    }

    Data(int value) {
        this.value = value;
    }
}

public class Main {
    public static void main(String[] args) {
        // final 키워드가 없는 경우
        Data data1 = new Data(); // data1 변수가 Data 객체를 가리킴
        data1 = new Data(20); // data1 변수가 Data(20)을 가리킴

        // final 키워드가 있는 경우
        final Data data2 = new Data(); // data2 변수가 Data 객체를 가리킴
        // data2 = new Data(30); // 컴파일 오류: final 키워드로 인해 다른 객체를 할당할 수 없음

        // 객체 내부 상태 변경은 가능
        data2.value = 30; // data2가 가리키는 Data 객체의 value를 변경
        System.out.println(data2.value); // 출력 결과: 30
    }
}
```

위의 코드에서 `Data` 클래스에는 기본 생성자가 추가되어 있습니다. 이 경우에도 `final` 키워드로 선언된 변수는 한 번 객체가 할당되면 다른 객체로 재할당할 수 없습니다. 또한, 기본 생성자를 사용하여 객체를 생성할 때는 생성자 내에서 값이 초기화되므로 객체를 생성하는 시점에 이미 값을 갖게 됩니다.

728x90