In the Java programming language, the final keyword is used in several
contexts to define an entity that can only be assigned once.
ν λ²λ§ ν λΉ κ°λ₯ν μν°ν°λ₯Ό μ μν λ μ¬μ©.
public final class MyFinalClass {...}
public class ThisIsWrong extends MyFinalClass {...} // forbidden
μμ λΆκ°λ₯ν ν΄λμ€
λνμ μΈ final class λ‘ String
μ΄ μλ€.
μΈμ ν΄λμ€μ final ν€μλλ₯Ό μ¬μ©ν κΉ?
κ΅³μ΄ μμν νμκ° μλ μμ ν΄λμ€
public final class Tags {
public static final int INSTANCE_UID = 1 ;
public static final int CLASS_UID = 2 ;
}
public final class FileUtils {
public static void createDirectories (String filename ) {
// ...
}
}
μμ λ°μ μμ ν΄λμ€μμ overriding λΆκ°
public class Base
{
public void m1 () {...}
public final void m2 () {...}
public static void m3 () {...}
public static final void m4 () {...}
}
public class Derived extends Base
{
public void m1 () {...} // OK, overriding Base#m1()
public void m2 () {...} // forbidden
public static void m3 () {...} // OK, hiding Base#m3()
public static void m4 () {...} // forbidden
}
μΈμ λ©μλμ final ν€μλλ₯Ό μ¬μ©ν κΉ?
λ©μλμ λ΄μ©μ μ¬μ μ/λ³κ²½νκ³ μΆμ§ μμ λ
μΌκ΄μ± μλ μ€ν λ΄μ©μ 보μ₯νκ³ μΆμ λ
ν λ²λ§ μ΄κΈ°ν κ°λ₯νμ§λ§ λ°λμ μ μΈ μμ μμ μ΄κΈ°νν νμλ μλ€. (blank final)
final int x = 1 ;
x = 3 ; // π¨ cannot assign a value to final variable x
final Fruit fruit = new Fruit ();
fruit = new Fruit (); // π¨ cannot assign a value to final variable fruit
κ°μ²΄μ λΆλ³μ±μ 보μ₯νμ§λ μλλ€.
final Fruit fruit = new Fruit ();
fruit .setName ("apple" );
fruit .setName ("grape" ); // κ°μ²΄ μ체μ λΆλ³μ±μ 보μ₯νμ§λ μκΈ° λλ¬Έμ μμ±μ λ³κ²½ κ°λ₯.
class Fruit {
private final String name ;
private String color ;
public Fruit (String name , String color ) {
this .name = name ;
this .color = color ;
}
public String getName () {
return name ;
}
public String getColor () {
return color ;
}
public void setName (String name ) {
this .name = name ; // π¨ cannot assign a value to final variable name
}
public void setColor (String color ) {
this .color = color ;
}
}
public void print (final String str ) {
str = "changed" ; // π¨ final parameter str may not be assigned
}
κ·Έλμ, μΈμ μ¬μ©?
final μ¬μ©μ λ°λ₯Έ μ₯λ¨μ μ΄ λͺ¨λ μμΌλ―λ‘ νκ³Ό νλ‘μ νΈμ λ°λΌ λ¬λΌμ§ μ μλ€.
κ°λ₯ν λ§μ λ³μλ₯Ό finalλ‘ νμνλ©΄ μ΄λ€ κ°μ²΄κ° λ°λ μ μκ³ μλμ§ λͺ
ννκ² κ΅¬λΆ κ°λ₯.
κ·Έλ¬λ μ΄κ²μ΄ κ°μ²΄μ λΆλ³μ±μ 보μ₯νμ§λ μμ.
λ λ§μ μ½λκ° μΆκ°λ μ μλ€.
finalμ΄ μΈλͺ¨μλ κ²½μ°λ μλ€. (e.g μΆμ λ©μλμ νλΌλ―Έν°)
(μ°Έκ³ : μ±
βμ€μ μλ° μννΈμ¨μ΄ κ°λ°β p25 2.4.1 final λ³μ - νλΉλ―Έλμ΄)
(finalμ λͺ¨λ μν©μμ μμ ν λΆλ³μ±μ 보μ₯νμ§λ μμ§λ§)
μ΄λ€ ν΄λμ€/λ©μλ/λ³μκ° λ³κ²½λμ§ μμμΌ νλμ§λ₯Ό μ»΄νμΌλ¬μ κ°λ°μλ€μκ² μλ¦¬κ³ μΆμ λ μ°μ.