final ν€μλλ λΆλ³μ±μ λ»νλ€.
μ΄ final ν€μλλ μ΄λ€ κ³³μ μ¬μ©λλμ λΆλ³μ νΉμ§ μ€ μ‘°κΈμ© μ΄μ§ λ€λ₯Έ μλ―Έλ₯Ό κ°μ§λ€. final ν€μλλ λ³μ(variable), λ©μλ(method), λλ ν΄λμ€(class)μ μ¬μ©λ μ μλ€.
πfinal Class
final ν€μλλ₯Ό ν΄λμ€μ λΆμ΄λ©΄ μμ λΆκ°λ₯ ν΄λμ€κ° λλ€. μ¦, λ€λ₯Έ ν΄λμ€μμ μμνμ¬ μ¬μ μλ₯Ό ν μ μλ κ²μ΄λ€.
μ΄λ ν΄λμ€λ₯Ό λΆλ³μΌλ‘ λ§λ€μ΄μ μμμ μν λ³κ²½μ λ°©μ§νλ€. λνμ μΈ ν΄λμ€λ‘ Integerμ κ°μ λ©νΌ(Wrapper) ν΄λμ€, String ν΄λμ€κ° μλ€. ν΄λμ€ μ€κ³μ μ¬μ μ μ¬λΆλ₯Ό μκ°ν΄μ μ¬μ μ λΆκ°λ₯νκ² μ¬μ©νκ³ μΆλ€λ©΄ finalλ‘ λ±λ‘νλκ² μΆν μ μ§λ³΄μμ°¨μμμ μ’λ€.
πfinal Method
λ©μλμ finalμ λΆμ΄λ©΄ μ¬μ μ(override)λ₯Ό μ ννκ² λλ€. ν΄λμ€λ₯Ό μμνκ² λλ©΄ μ°λ¦¬λ ν΄λΉ ν΄λμ€μ protected, publicμ μ κ·Ό μ μ΄μ(access-modifier)λ₯Ό κ°μ§ λ©μλλ₯Ό μ¬μ μ(override) ν΅ν΄ μ¬κ΅¬νμ ν μ μλ€. μ¦ λ³κ²½μ΄ κ°λ₯νλ κ²μ΄λ€.
νμ§λ§ final ν€μλλ₯Ό λΆμ¬ λ©μλλ₯Ό μ μνλ€λ©΄ μλΈ ν΄λμ€μμ μ¬μ μλ₯Ό μ ννκ² λΌ λΆλ³μ±μ μ§ν€κ² λλ€.
πfinal Variable
λ³μμ finalμ λΆμ΄λ©΄ μ΄ λ³μλ μμ ν μ μλ€λ λ»μ΄ λλ€. μμ λ μ μκΈ° λλ¬Έμ μ΄κΈ°ν κ°μ νμμ μ΄λ€.
μμ ν μ μλ€λ λ²μλ κ·Έ λ³μμ κ°μ νμ λλ€. μ¦, λ€λ₯Έ κ°μ²΄λ₯Ό μ°Έμ‘°νκ±°λ ν λ μ°Έμ‘°νλ κ°μ²΄μ λ΄λΆμ κ°μ λ³κ²½ν μ μλ€λΌλ μλ―Έμ΄λ€.
μλ μμμμ pizza λ³μλ₯Ό μλ‘μ΄ Pizza κ°μ²΄λ‘ ν λΉνλ κ²μ λΆλ³μ±μ μ΄κΈ°λ―λ‘ μ»΄νμΌ μλ¬κ° μκΈ°μ§λ§, Pizza κ°μ²΄ μμ νλλ€μ λ³κ²½νλ κ²μ κ°λ₯νλ€.
class Solution19 {
public static void main(String[] args) {
final Pizza pizza = new Pizza(12000, "λΆκ³ κΈ° νΌμ");
//pizza = new Pizza(20000, "νμμ΄μΈ νΌμ"); μ»΄νμΌ μλ¬ - κ°μ΄ μ§μ λ³ν¨
pizza.setPrice(1000); //μ°Έμ‘°νλ κ°μ²΄μ λ΄λΆμ κ°μ λ³κ²½ν μ μλ€
pizza.setName("νμμ΄μΈ νΌμ");
}
}
class Pizza {
int price;
String name;
//μμ±μμ setter μλ΅
}
final μ§μ λ³μ
final ν€μλκ° λΆμ λ³μλ μ΄κΈ°νλ₯Ό ν΄μ€μΌνλλ°, μ¬λ¬κ°μ§ λ°©λ²μ΄ μλ€.
1. μ μΈμ μ΄κΈ°ν
2. μ¬μ© μ μ μ΄κΈ°ν
final μΈμ€ν΄μ€ λ³μ
1. μ μΈμ μ΄κΈ°ν
2. μμ±μλ₯Ό μ΄μ©ν μ΄κΈ°ν
3. μ΄κΈ°ν blockμ μ΄μ©ν μ΄κΈ°ν
μμ String ν΄λμ€μμλ final νλλ₯Ό κ°λλ°, λͺ¨λ μμ±μμμ μ΄κΈ°ν μμΌμ£Όκ³ μλ€.
π String ν΄λμ€
String ν΄λμ€λ μμ λ§νλ€μνΌ λΆλ³ ν΄λμ€μ΄λ€. μλ°μμ λ¬Έμμ΄(String)μ λΆλ³(immutable) κ°μ²΄μ΄λ€. μ΄λ ν λ² μμ±λ λ¬Έμμ΄ κ°μ²΄μ λ΄μ©μ λ³κ²½ν μ μλ€λ κ²μ μλ―Ένλ€. λ¬Έμμ΄μ λ³κ²½νλ μμ (μ: λ¬Έμμ΄ μ°κ²°)μ νμ μλ‘μ΄ λ¬Έμμ΄ κ°μ²΄λ₯Ό μμ±νκ² λλ€. μ΄λμ λ¬Έμμ΄ μμ μ μ‘°μ¬ν΄μΌ νλ€.
μλ₯Ό λ€μ΄ λ€μκ³Ό κ°μ μν©μ΄ μλ€.
public static void main(String[] args) {
String str = "string";
for (int i = 0; i < 10; i++) {
str = str + i;
}
}
λ¬Έμμ΄ λ³κ²½ κ³Όμ
- μ΄κΈ° μν
- strμ "string"μ μ°Έμ‘°νλ€.
- 첫 λ²μ§Έ λ°λ³΅ (i = 0)
- str + iλ μλ‘μ΄ λ¬Έμμ΄ "string0"μ μμ±νλ€.
- strμ μ΄μ "string0"μ μ°Έμ‘°νλ€.
- λ λ²μ§Έ λ°λ³΅ (i = 1)
- str + iλ μλ‘μ΄ λ¬Έμμ΄ "string01"μ μμ±νλ€.
- strμ μ΄μ "string01"μ μ°Έμ‘°νλ€.
μ΄ κ³Όμ μ 루νκ° λλ λκΉμ§ κ³μλλ€.
λ©λͺ¨λ¦¬ ν λΉ μμ
- ν μμ (Heap)
- λ°λ³΅λ¬Έμμ μμ±λλ λͺ¨λ λ¬Έμμ΄ κ°μ²΄λ ν μμμ ν λΉλλ€. μλ‘μ΄ λ¬Έμμ΄ κ°μ²΄κ° μμ±λ λλ§λ€ ν λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νκ² λλ€.
- μλ₯Ό λ€μ΄, "string0", "string01" λ± λͺ¨λ λ¬Έμμ΄ κ°μ²΄λ νμ μ μ₯λλ€.
- μ€ν μμ (Stack)
- λ‘컬 λ³μ strλ μ€νμ ν λΉλλ€.
- strμ μ€νμ μ μ₯λ μ°Έμ‘° λ³μλ‘, νμ μλ μ€μ λ¬Έμμ΄ κ°μ²΄λ₯Ό μ°Έμ‘°νλ€.
- λ©μλ μμ (Method Area)
- λ©μλ μμμ ν΄λμ€ κ΅¬μ‘°(λ©νλ°μ΄ν°), μ μ νλ, μ μ λ©μλλ₯Ό ν¬ν¨νλ€. strκ³Ό κ°μ λ¬Έμμ΄ λ¦¬ν°λ΄μ μμ νμ μ μ₯λ μ μλ€.
- λ¬Έμμ΄ λ¦¬ν°λ΄ "string"μ μμ ν(constant pool)μ μ μ₯λμ§λ§, 루ν λ΄μμ μμ±λ μλ‘μ΄ λ¬Έμμ΄μ ν μμμ μ μ₯ λλ€.
μ¦, μ²μ "string" 리ν°λ΄μ μμ νμ μ μ₯ λλ€. κ·Έλ¦¬κ³ λ°λ³΅λ¬Έμ΄ μμλκ³ λμ κ° λ°λ³΅λ§λ€ μλ‘μ΄ λ¬Έμμ΄ κ°μ²΄("string0", "string01", ..., "string0123456789")κ° νμ μμ± λλ€.
str λ³μλ μ€νμ μ μ₯λμ΄ κ° λ°λ³΅λ§λ€ νμ μλ‘μ΄ λ¬Έμμ΄ κ°μ²΄λ₯Ό μ°Έμ‘°νλ€.
μ΄μ - λ΄λΆμ λμ μ리
μ μ½λμμ str = str + iλ κ° λ°λ³΅λ§λ€ μλ‘μ΄ String κ°μ²΄λ₯Ό μμ±νλ€. μ΄λ κ° μ°κ²° κ²°κ³Όκ° μλ‘μ΄ λ¬Έμμ΄ κ°μ²΄λ₯Ό μμ±νκΈ° λλ¬Έμ΄λ€.
μλ°μμ λ¬Έμμ΄ μ°κ²° μ°μ°μ(+)λ λ΄λΆμ μΌλ‘ StringBuilderλ₯Ό μ¬μ©νμ¬ λ¬Έμμ΄μ μ°κ²°ν ν, μ΅μ’ κ²°κ³Όλ₯Ό String κ°μ²΄λ‘ λ³ννλ€. κ²°κ΅ μ΄ κ°μ²΄λ€μ λͺ¨λ ν λ©λͺ¨λ¦¬μ ν λΉλλ€.
μ μ½λλ λ΄λΆμ μΌλ‘ μλμ κ°μ΄ λμκ°λ€.
String str = "string";
for (int i = 0; i < 10; i++) {
StringBuilder sb = new StringBuilder(str);
sb.append(i);
str = sb.toString();
}
- StringBuilder μ¬μ©:
- λ¬Έμμ΄ μ°κ²° μ StringBuilder κ°μ²΄κ° μμ±λκ³ , κ° λΆλΆ λ¬Έμμ΄μ΄ StringBuilderμ μΆκ°λλ€.
- toString() νΈμΆ:
- μ΅μ’ μ°κ²°λ λ¬Έμμ΄μ StringBuilderμ toString() λ©μλλ₯Ό νΈμΆνμ¬ String κ°μ²΄λ‘ λ³νλλ€. μ΄ λ³νλ String κ°μ²΄λ ν λ©λͺ¨λ¦¬μ ν λΉλλ€.
μμ κ°μ μ΄μ λ‘ μλ‘μ΄ κ°μ²΄κ° νμμμ κ³μ μκΈ°κ² λλ κ²μ΄λ€. λ¬Έμμ΄μ λ€λ£¨λ μ½λ©ν μ€νΈ λ¬Έμ μμ λ©λͺ¨λ¦¬ μ΄κ³Ό λ¬Έμ κ° λνλλ μ΄μ λ μ΄λ¬ν μ΄μ λλ¬Έμ΄λ€. λ°λΌμ λ¬Έμμ΄μ λ€λ£° λλ μ¬μ μΈ νλ κ²μ΄ μλ, StringBuilder ν΄λμ€λ₯Ό μ΄μ©νμ¬ λ€λ£¨λ κ²μ΄ λ©λͺ¨λ¦¬λ₯Ό μλΌκ³ μ±λ₯λ©΄μμλ μ’λ€.
StringBuilder str = new StringBuilder("string");
for (int i = 0; i < 10; i++) {
str.append(i);
}
λκΈ