[Java 문법 종합반]2주차 5장

기 원·2025년 2월 27일

Java 문법 종합반

목록 보기
7/9

1. final - 변하지 않는 값

1. final

1.final의 용도

  • 변수는 변경이 불가능하게 만듬
  • 클래스는 상속할 수 없게 만듬
  • 메서드는 수정할 수 없게 만듬

2. 상수(Constant)

  1. 상수(Constant)
  • 상수는 변하지 않고 항상 일정한 값을 갖는 수
  • Java에서 상수는 대문자로 표현하는 것이 관례
  • 프로그램 실행중에 절대 변경되서는 안되기 때문에 static final키워드를 사용해 선언
  • static 으로 선언된 변수는 프로그램 시작시 한번만 초기화되고 모든 인스턴스에서 같은 값을 공유

3. 불변객체(Immutable Object)

  1. 불변객체(Immutable Object)의 특징
  • 불변객체는 내부 상태를 변경할 수 없는 객체
  • final을 속성에 활용
  • setter없이 설계
  • 변경이 필요한 경우 새로운 객체를 만들어야 함
  • String, Integer, 래퍼클래스
  1. 잘못된 불변객체 사용
  • `final은 참조 변경을 막지만 내부상태 변경을 막지 않음
public class Circle {

    final static double PI = 3.14159; // ✅ 직접 만든 원주율 상수
    double radius; // ⚠️ final 로 선언되어 있지 않기 때문에 외부에서 변경 가능

    Circle(double radius)  {
        this.radius = radius;
    }
}
final Circle c1 = new Circle(2);
c1 = new Circle(3); // ❌ final은 변수 c1이 한 번 참조한 객체는 다른 객체로 변경될 수 없음을 의미함 (참조 불변)

// 하지만 객체 내부의 속성 값은 변경 가능 (불변 객체가 아님)
c1.radius = 3; // ⚠️ 내부 상태 변경 가능 (객체 자체가 불변이 아님)
  1. 올바른 불변 객체
public final class Circle {

    final static double PI = 3.14159; 
    final double radius; // ✅ final 로 선언해서 값이 변경되지 않도록 합니다.

    Circle(double radius)  {
        this.radius = radius;
    }
}
profile
노력하고 있다니까요?

0개의 댓글