μ°μ λ€μ΄κ°κΈ°μ μμ μ μ ν©ν 리 λ©μλλ λμμΈ ν¨ν΄μ μλμ§λ§, λΉμ·ν κ²°μ κ°μ§κ³ μλ€. μ΄λ¬ν λμμΈ ν¨ν΄λ€μ 곡λΆν λλ κ°μΈμ μΌλ‘ ν΄λΉ λμμΈν¨ν΄μ μ₯μ κ³Ό λ¨μ μ νμ νλ κ³΅λΆ λ°©λ²μ΄ κ°μ₯ μ’μ κ² κ°λ€. μ΄ν΄νκΈ°κ° λ μ¬μ΄λ―
(1) μ μ ν©ν 리 λ©μλλ?
λ³΄ν΅ κ°μ²΄λ₯Ό μμ±νλ λ°©λ²μ "μμ±μ"λ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ± νλ λ°©λ²μ΄ μλ€. νμ§λ§, μ΄λ²μ μμ λ³Ό λ°©λ²μ λ©μλλ₯Ό νμ©ν΄ κ°μ²΄λ₯Ό μμ±νλ λ°©λ²μ΄λ€. μν©μ λ°λΌμ μ μ¬μ©νλ©΄ μ μ§λ³΄μμ λ§€μ° μ’λ€. μ°Έκ³ λ‘ μ μ ν©ν 리 λ©μλλ λμμΈ ν¨ν΄μ΄ μλ κ°μ²΄λ₯Ό μμ±νλ λ°©λ² μ€ νλμ΄λ€.
1. μ μ
- μλ°μμ static ν€μλλ₯Ό μλ―Ένλ©°, static ν€μλλ κ³ μ λ λ©λͺ¨λ¦¬ 곡κ°μ κ°λλ€.
- ν΄λμ€κ° λ©λͺ¨λ¦¬μ λ‘λλ λ ν λ²λ§ μμ±μ΄ λλ©°, μΈμ€ν΄μ€ν λ λͺ¨λ κ°μ²΄μμ 곡μ κ° λλ€.
- λ©λͺ¨λ¦¬μ μ¬λΌκ° λ static νλ λ° λ©μλκ° ν΄λμ€ λ λ²¨λ‘ μ¬λΌκ°κ² λλ€.
- μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ λ ν΄λμ€ μ΄λ¦μΌλ‘ μ κ·Όν μ μλ€.
2. ν©ν 리
- κ°μ²΄λ₯Ό μμ±νλ μμ°μ(곡μ₯)μ μν μ μλ―Ένλ€.
- λλμκ° κ°μ²΄λ₯Ό μ§μ μμ±μλ₯Ό νΈμΆν΄ μμ±νμ§ μκ³ μ€κ°μ μμ±νλ λ©μλλ ν΄λμ€λ‘ μμ±νλ κ²μ μλ―Ένλ€.
- κ°μ²΄ μμ±μ μ± μμ λΆλ¦¬νμ¬ λ§‘κΈ°λ κ²μ μλ―Ένλ€.
3. λ©μλ
- λ©μλλ νλ‘κ·Έλ¨μ νΉμ λμμ μ μνλ μ½λ λΈλ‘μ΄λ€.
- λ©μλλ ν¨μμ μ±μ§μ κ°μ§κ³ μκ³ , μ λ ₯κ°μ λ°μ μ μκ³ , κ²°κ³Όκ°μ λ°νν μ μλ€.
(2) μ μ ν©ν 리 λ©μλ μ₯μ
1. μ΄λ¦μ κ°μ§ μ μλ€.
- μΌλ° μμ±μλ μ΄λ¦μ κ°μ§ μ μμ΄ μμ±μ μ체 λ§μΌλ‘λ λ°ν λ κ°μ²΄μ νΉμ±μ μ λλ‘ μ€λͺ νμ§ λͺ»νλ€.
- λ°λ©΄ μ μ ν©ν 리 λ©μλλ μ΄λ¦μ κ°μ§λ λ©μλλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ± ν λ°ννκΈ° λλ¬Έμ ν λμ μμ보기 μ½λ€.
- κ²°κ³Όμ μΌλ‘λ, λ©μλλ₯Ό νμ©ν΄ κ°μ²΄ μμ±μ λͺ νν μλ―Έλ₯Ό λΆμ¬ν¨μΌλ‘μ¨ μ μ§λ³΄μμ μ₯μ μ΄ μμ΄ μ§λ€.
public class User {
private String name;
private User(String name) {
this.name = name;
}
// μ μ ν©ν 리 λ©μλ - createUserμ κ°μ λͺ
νν μ΄λ¦μ κ°μ§ μ μμ.
public static User createUser(String name) {
return new User(name);
}
}
2. νΈμΆλ λλ§λ€ μΈμ€ν΄μ€λ₯Ό μλ‘ μμ±νμ§λ μμλ λλ€.
μ μ ν©ν 리 λ©μλλ₯Ό νμ©νλ©΄, μμ±μλ₯Ό νΈμΆ νκΈ° μ λ©μλ λΈλ‘ λ΄λΆμμ μΆκ°μ μΈ λ‘μ§μ ꡬνν μ μκ² λλ€. μ΄ μ μ νμ©ν΄, μΈμ€ν΄μ€κ° μ΄λ―Έ μμ±μ΄ λμ΄ μλ κ²½μ°, κΈ°μ‘΄μ μΈμ€ν΄μ€λ₯Ό λ°νν΄ μ½λμ μ¬νμ©μ±μ λμ΄λ©° κ°μ²΄ μμ± λΉμ©μ μ€μΌ μ μκ² λλ€.
* μ μ ν©ν 리 λ©μλλ νΈμΆλ λλ§λ€ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό λ°λμ μμ±νμ§ μμλ λλ€λ μλ―Έμ΄λ€.
μμ μ½λ (1) - μ μ ν©ν 리 λ©μλ νμ©
public class Color {
private final int red;
private final int green;
private final int blue;
private static final Map<String, Color> cache = new HashMap<>();
private Color(int red, int green, int blue) {
this.red = red;
this.green = green;
this.blue = blue;
}
public static Color of(int red, int green, int blue) {
String key = red + "," + green + "," + blue;
// containsKey() -> keyκ°κ³Ό κ°μ κ°μ μ‘΄μ¬ μ¬λΆ νμ
/ return true & false
if (!cache.containsKey(key)) { // false -> κ°μ²΄κ° μλ κ²½μ°
cache.put(key, new Color(red, green, blue)); // κ°μ²΄ μμ±
}
return cache.get(key); // keyμ λ§λ κ°μ²΄ λ°ν
}
}
ν΄λΉ Color ν΄λμ€λ of() λ©μλλ₯Ό ν΅ν΄μλ§ μΈμ€ν΄μ€λ₯Ό μμ± ν μ μμΌλ©°, of λ©μλλ₯Ό νΈμΆ ν λ key κ°μ΄ Mapμ μλ κ²½μ°μλ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νκ³ , μλ κ²½μ°μλ κ°μ²΄λ₯Ό μμ±νμ§ μκ³ κΈ°μ‘΄ key κ°μ ν΄λΉνλ κ°μ²΄λ₯Ό λ°ννλ μ½λμ΄λ€.
* μ΄λ κ² μ μ ν©ν 리 λ©μλλ₯Ό νμ©νλ©΄ λ©μλ λ΄μμμ 쑰건μ ν΅ν΄ λΆνμν κ°μ²΄ μμ±μ μμ¨ μ μκ² λλ€.
μμ μ½λ (2) - Boolean λνΌ ν΄λμ€
- νμμ λ°λΌ κ°μ μΈμ€ν΄μ€λ₯Ό νΈμΆνκΈ° λλ¬Έμ λ©λͺ¨λ¦¬λ₯Ό μλ μ μμ.
- Boolean λνΌ ν΄λμ€λ μ μ ν©ν 리 λ©μλμ μ μ μμλ₯Ό ν΅ν΄μλ§ κ°μ²΄ μμ±μ΄ κ°λ₯νλ€.
public class Main {
public static void main(String[] args) {
Boolean a = Boolean.valueOf(true); // valueOf μ μ ν©ν 리 λ©μλ
Boolean b = Boolean.valueOf(true); // valueOf μ μ ν©ν 리 λ©μλ
// a == b μ£Όμκ°μ΄ κ°λ€.
// Boolean a = Boolean.TRUE; μμλ‘λ μμ±μ΄ κ°λ₯νλ€.
}
}
// Boolean.java
@IntrinsicCandidate
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
// Boolean.java
public static final Boolean TRUE = new Boolean(true);
// Boolean.java
@Deprecated(since="9", forRemoval = true)
public Boolean(boolean value) {
this.value = value;
}
- μ½λλ₯Ό 보면 main λ©μλμμ valueOf() μ μ ν©ν 리 λ©μλλ₯Ό νΈμΆμ νκ³ μλ€.
- ν΄λΉ λΆλΆμ κ°μ²΄λ μμ±μ νκ³ μμμλ μ°Έμ‘°νλ μ£Όμκ°μ΄ κ°λ€.
( μ¦, κ°μ²΄λ₯Ό μλ‘ λ§λλ κ²μ΄ μλ κΈ°μ‘΄μ κ°μ²΄λ₯Ό μ°Έμ‘°νκ³ μλ€λ μλ―Έμ΄λ€. )
- valueOf λ©μλμμ μΌν μ°μ°μλ₯Ό ν΅ν΄ μ μ μμ νλλ₯Ό νΈμΆνκ³ μλ€.
- μ μ μμ νλκ°μλ Boolean κ°μ²΄λ₯Ό μμ±ν΄μ κ°μ μ΄κΈ°νλ₯Ό ν΄μ£Όκ³ μλ μνμ΄λ€.
- μ΄λ¬ν λ°©μμΌλ‘ μ΄μ©μ νκ² λλ©΄, μ μ μμ νλλ₯Ό ν΅ν΄ μ¬λΌκ° μ μ μμλ λͺ¨λ ν΄λμ€μμ 곡μ κ° λλ 곡μ λ³μμ΄κΈ° λλ¬Έμ κ°μ²΄μ μ£Όμκ°μ΄ κ°κ² λμ€λ κ²μ΄λ€.
κ·Έλ¦¬κ³ λ§μ§λ§ μ½λλ₯Ό 보면 Booleanμ μμ±μκ° μλ κ²μ΄ λ³΄μΌ κ² μ΄λ€. μμ€μ½λλ₯Ό 보면 "μμ±μκ° μ‘΄μ¬νλλ° μ κ±Έλ‘ μμ±νλ©΄ λλ κ²μ΄ μλκ°" λΌλ μκ°μ ν μ μμ κ²μ΄λ€. ν΄λΉ μ½λλ₯Ό μμΈν 보면 μμ @Deprecated μ λν μ΄μ μ΄ λΆμ΄μλ κ²μ νμΈν μ μλ€. ν΄λΉ μ λν μ΄μ μ λ μ΄μ μλ°μμ μ§μμ νμ§ μκΈ°μ, ν₯ν λ²μ μ λ°μ΄νΈμ λ°λΌ μ§μμ§ μ μλ μ½λλΌλ μλ―Έμ΄λ€. κ±°κΈ°μ λ« λΆν forRemoval μ΅μ μ ν΅ν΄ μ»΄νμΌ μμ μ λ€λ₯Έ μ λν μ΄μ μ΄ ν΄λΉ κ°μ²΄λ₯Ό μμ±ν μ μ»΄νμΌ μ€λ₯λ₯Ό λ΄λ³΄λ΄κ² λλ€.
μ¬κΈ°μ ν κ°μ§ λ κΆκΈν μ μλ€. "κ·ΈλΌ μμμ μ μ μμ νλκ°μλ κ°μ²΄λ₯Ό μμ±νκ³ μλλ° μ λν μ΄μ μ΄ λΆμ΄μμΌλ©΄ μμ±μλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ±νλ λΆλΆμ μ€λ₯κ° λμΌ νλ κ²μ΄ μλκ°?" λΌλ μκ°μ ν μ μλ€.
ν΄λμ€ λ‘λ© μμ μ λ³μ μ΄κΈ°νλ₯Ό λ¨Όμ νκ³ μ λν μ΄μ μ΄ λμλκΈ° λλ¬Έμ κ°μ²΄ μμ±μ΄ μλ ν΄λΉ ν΄λμ€μμ λ³μμ 미리 κ°μ²΄λ₯Ό μ΄κΈ°νλ₯Ό ν΄λ μ μκ² λλ€. κ·Έλ¬λ©΄ Deprecated μ λν μ΄μ μ λ²μ΄λ μ μκ² λλ€.
μ΄λ¬ν κ³Όμ λλ¬Έμ Boolean κ°μ²΄μ μμ±μλ₯Ό ν΅ν΄ μμ±νλ κ²μ λΆκ°λ₯νλ€.
3. λ°ν νμ μ νμ νμ κ°μ²΄λ₯Ό λ°νν μ μλ λ₯λ ₯μ΄ μλ€.
μ μ ν©ν°λ¦¬ λ©μλλ λ©μλλ₯Ό ν΅ν΄μ κ°μ²΄λ₯Ό μμ±ν΄ λ°ννκΈ° λλ¬Έμ λ°ν νμ μ μ ν΄μ€ μ μκ² λλ€. μ΄λ, μ΄ λ°ν νμ μ λ€νμ±μ μ μ©ν΄ μΈν°νμ΄μ€ νμ μΌλ‘ λ°νμ λ°μ μ μκ² λλ€. μ΄λ¬λ©΄ μ μ°μ±κ³Ό μ μ§λ³΄μμ±μ΄ λ§€μ° λμμ§λ€λ μ₯μ μ΄ μ‘΄μ¬νλ€.
4. μ λ ₯ λ§€κ°λ³μμ λ°λΌ λ§€λ² λ€λ₯Έ ν΄λμ€μ κ°μ²΄λ₯Ό λ°νν μ μλ€.
μ μ ν©ν°λ¦¬ λ©μλμ μΈμκ°μΌλ‘ ꡬλΆν μ μλ κ°μ²΄μ μ 보λ₯Ό μ λ ₯νμ¬, 쑰건μμ ν΅ν΄ ν΄λΉ λ§€κ°λ³μ μ 보μ μΌμΉν μ κ·Έμ λ§λ κ°μ²΄λ₯Ό λ°ννλ κ²μ μλ―Ένλ€. μ΄λ¬ν λ°©μμ ν΅ν΄ λ§€λ² λ€λ₯Έ ν΄λμ€μ κ°μ²΄λ₯Ό λ°νν μ μκ² λλ€.
5. μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μμ±νλ μμ μλ λ°νν κ°μ²΄μ ν΄λμ€κ° μ‘΄μ¬νμ§ μμλ λλ€.
μ μ ν©ν°λ¦¬ λ©μλ νΈμΆ μμ μ κ°μ²΄λ₯Ό λμ μΌλ‘ μμ±ν΄μ λ°νν μ μλ€λ μλ―Έμ΄λ©°, ν΄λΉ λ°©μμ μ μ°μ±κ³Ό λ©λͺ¨λ¦¬ ν¨μ¨μ±μ λμΌ μ μκ² λλ€. μ½κ² λ§ν΄, κ°μ²΄κ° νμν μμ μΈ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό νΈμΆνλ μμ μ κ°μ²΄λ₯Ό λ§λ€μ΄μ μ 곡νκΈ° λλ¬Έμ λΆνμν κ°μ²΄λ₯Ό 미리 μμ±νμ§ μμλ λλ―λ‘ λ©λͺ¨λ¦¬ λλΉλ₯Ό μ€μΌ μ μλ€λ μ₯μ μ΄ μλ€.
(3) μ μ ν©ν 리 λ©μλ λ¨μ
1. μ μ ν©ν°λ¦¬ λ©μλλ§ μ 곡νλ©΄ νμ ν΄λμ€λ₯Ό λ§λ€ μ μκ² λλ€.
μΌλ¨ κΈ°λ³Έμ μΌλ‘ μλ°μμ μμμ μ΄μ©νλ©΄ νμ ν΄λμ€λ μμ±μμμ super() ν€μλλ₯Ό ν΅ν΄ μμ ν΄λμ€μ μμ±μλ₯Ό λ΄λΆμμ μμ±μ νκ³ μκ² λλ€. μ΄μ μ΄ λΆλΆμ κΈ°μ΅νκ³ μ μ ν©ν°λ¦¬ λ©μλλ§μ μ 곡νλ ν΄λμ€κ° μλ€κ³ κ°μ νμ, μμ±μλ privateμΌ μ λ°μ μμ κ²μ΄λ€. κ·Έλ¬λ©΄ private μμ±μλ μμꡬ쑰μμ μΈλΆμμ μμ±μλ₯Ό νΈμΆνλ κ²μ΄κΈ° λλ¬Έμ μ€λ₯κ° λ κ²μ΄λ€. μ΄λ¬ν λ¬Έμ λ‘ μΈν΄ μμμ΄ λΆκ°λ₯ν΄μ§λ€.
2. μ μ ν©ν°λ¦¬ λ©μλλ νλ‘κ·Έλλ¨Έκ° μ°ΎκΈ° μ΄λ ΅λ€.
μμ±μμ ν΅ν΄ κ°μ²΄λ₯Ό μμ±νλ λ°©μμ κ°λ°μκ° ν΄λμ€λ₯Ό μΈμ€ν΄μ€ν μν€λ거ꡬλ λΌκ³ λͺ ννκ² μ μ μλλ° λ°ν΄ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό νμ©ν΄μ λ§λ€λ©΄, λ©μλμ΄λ€ 보λκΉ μ΄λ¦μ΄ λͺ¨νΈν΄μ§λ©΄ ν΄λΉ λΆλΆμ΄ κ°μ²΄λ₯Ό μμ±νλ μ©λ μΈμ§ λ€λ₯Έ μμ μ νλ λ©μλμΈμ§ ꡬλΆμ΄ μ΄λ €μμ§ μ μλ€.
( μ΄λ¬ν λΆλΆμ 보μνκΈ° μν΄ λ©μλ μ΄λ¦μ μλ―Έλ₯Ό λΆμ¬ν΄ κ°μ²΄ μμ± λͺ©μ μμ λͺ νν μ λ¬νλ κ²μ΄ μ€μνλ€. )
(4) κ²°λ‘
- μ μ ν©ν 리 λ©μλλ static λ©μλλ₯Ό μλ―Ένλ€.
- κ°μ²΄λ₯Ό static λ©μλμμ μμ±μ νλ κ²μ΄λ€.
- μ£Όλ‘ μμ±νκ³ μ νλ ν΄λμ€ λ΄λΆμ static λ©μλκ° μ μ λμ΄ μμ.
- κ²°λ‘ μ λκ° λμλ κ°μ κ°μ²΄ μμ±μ new ν€μλλ‘ νλ€.
'π οΈBackend > βJava' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] JVMκ³Ό μλ° μ€ν μ리 (1) | 2025.04.14 |
---|---|
[Java] Javaμ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ΄λ? (0) | 2025.03.06 |
[Java] λ³μ μ΄κΈ°νμ λν μ΄ν΄ (2) | 2024.11.05 |
[Java] Annotation μ΄λ? ( μ λ Έν μ΄μ ) (4) | 2024.11.05 |
[Java] JVM λμ μ리 (2) | 2024.10.23 |