πfinal μ μ©λ
1. λ³μλ λ³κ²½μ΄ λΆκ°λ₯νκ² λ§λλλ€.
1οΈβ£λ³μμμ final
λ³μμ final μ λΆμ΄λ©΄ λ³μλ₯Ό ν λ²λ§ μ€μ ν μ μμ΅λλ€.
final int a = 100;
a = 200; // β μ€λ₯ λ°μ!
2. ν΄λμ€λ μμν μ μκ² λ§λλλ€.
2οΈβ£ν΄λμ€μμ final
final λ‘ μ μΈλ ν΄λμ€λ μμν μ μμ΅λλ€.(μμμ μΆνμ νμ΅ν©λλ€.)
final class Animal {
void sound() {
System.out.println("Animal sound!");
}
}
// class Dog extends Animal {} // β μ€λ₯! final ν΄λμ€λ μμν μ μμ
3. λ©μλλ μμ ν μ μκ² λ§λλλ€.(μ€λ²λΌμ΄λ© λΆκ°)
3οΈβ£ λ©μλμμ final
final λ‘ μ μΈλ λ©μλλ μ€λ²λΌμ΄λ© ν μ μμ΅λλ€. (μ€λ²λΌμ΄λ©μ μΆνμ νμ΅ν©λλ€.)
class Parent {
final void show() {
System.out.println("Hello from Parent");
}
}
class Child extends Parent {
@Override
void show() { // β μ€λ₯! final λ©μλλ₯Ό μ¬μ μν μ μμ
System.out.println("Hello from Child");
}
}
πμμ(constant)
μμλ λ³νμ§ μκ³ νμ μΌμ ν κ°μ κ°λ μ μ
λλ€.static final ν€μλλ₯Ό μ¬μ©ν΄ μ μΈν©λλ€.static μΌλ‘ μ μΈλ λ³μλ νλ‘κ·Έλ¨ μμμ ν λ²λ§ μ΄κΈ°νλκ³ λͺ¨λ μΈμ€ν΄μ€μμ κ°μ κ°μ 곡μ ν©λλ€.π‘λνμ μΈ μμ μμ: PI(μμ£Όμ¨)
public class Circle {
final static double PI = 3.14159; // β
μμ μ μΈ
}
System.out.println("μμνμ©: " + Circle.PI);
β οΈstatic μΌλ‘ μ μΈνλ μ΄μ (볡μ΅)
static μμ΄ μ μΈν κ²½μ° μΈμ€ν΄μ€λ§λ€ PI κ°μ΄ μ€λ³΅ μ μ₯λ©λλ€.

πλΆλ³κ°μ²΄(Immutable Object) μ νΉμ§
λΆλ³κ°μ²΄λ λ΄λΆ μνλ₯Ό λ³κ²½ν μ μλ κ°μ²΄μ
λλ€.final μ μμ±(property, field) μ νμ©ν©λλ€.String , Integer , λνΌν΄λμ€ λ±π«μλͺ»λ λΆλ³κ°μ²΄ μ¬μ©
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; // β οΈ λ΄λΆ μν λ³κ²½ κ°λ₯ (κ°μ²΄ μμ²΄κ° λΆλ³μ΄ μλ)
β μ¬λ°λ₯Έ λΆλ³ κ°μ²΄ νμ©
final λ‘ μ μΈν΄ μ€λλ€.public final class Circle {
final static double PI = 3.14159;
final double radius; // β
final λ‘ μ μΈν΄μ κ°μ΄ λ³κ²½λμ§ μλλ‘ ν©λλ€.
Circle(double radius) {
this.radius = radius;
}
}
public final class Circle { // β
ν΄λμ€μ final μ μΈ (μμ λ°©μ§)
private static final double PI = 3.14159; // β
μμλ private static finalλ‘ μ μΈ
private final double radius; // β
νλλ₯Ό private finalλ‘ μ μΈνμ¬ μμ ν λΆλ³μ± μ μ§
public Circle(double radius) { // β
μμ±μλ publicμΌλ‘ μ μ§
this.radius = radius;
}
public double getRadius() { // β
public λ©μλλ‘ λ³κ²½
return radius;
}
public double getArea() { // β
public λ©μλλ‘ λ³κ²½
return PI * radius * radius;
}
public double getPerimeter() { // β
public λ©μλλ‘ λ³κ²½
return 2 * PI * radius;
}
}
β οΈλΆλ³ κ°μ²΄μ κ°μ΄ λ³κ²½μ΄ νμν κ²½μ°
public final class Circle {
public static final double PI = 3.14159;
private final double radius;
public Circle(double radius) {
this.radius = radius;
}
// β
λ°μ§λ¦μ΄ λ€λ₯Έ μλ‘μ΄ Circle μμ± (λΆλ³ κ°μ²΄ μ μ§)
public Circle changeRadius(double newRadius) {
return new Circle(newRadius); // μμ±μ νΈμΆ: κΈ°μ‘΄ κ°μ²΄ λ³κ²½ X, μ κ°μ²΄ μμ±
}
}