| μΌ | μ | ν | μ | λͺ© | κΈ | ν |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- i-type
- java thread
- λΉμ£ΌκΈ°μ νΈ
- tcp μΈκ·Έλ¨ΌνΈ
- til
- μ€λ λ
- νν΄99
- reducible
- 99ν΄λ½
- νλ‘μ΄λμμ
- μλΉμ€ ν리미ν°λΈ
- λ©ν°νλ μ±
- ν°μ€ν 리μ±λ¦°μ§
- 그리λ μκ³ λ¦¬μ¦
- μ€λ₯μ μ΄
- λ°μ΄ν° μ μ‘
- μ°λΆν¬db
- μ€λ₯κ²μΆ
- well known ν¬νΈ
- μ€λΈμ
- μ£ΌκΈ°μ νΈ
- νλ μ ꡬ쑰
- xv6
- κ°λ°μμ·¨μ
- ν ν° λ²μ€
- git merge
- IEEE 802
- μμλ²νΈ
- mariadb
- μ½λ©ν μ€νΈμ€λΉ
- Today
- Total
UnfazedβοΈπ―
[μ΄νν°λΈ μλ°] μμ΄ν 1: μμ±μ λμ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό κ³ λ €νλΌ λ³Έλ¬Έ
[μ΄νν°λΈ μλ°] μμ΄ν 1: μμ±μ λμ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό κ³ λ €νλΌ
9taetae9 2025. 9. 6. 15:11new ν€μλλ₯Ό μ¬μ©ν κ°μ²΄ μμ±μ μλ° κ°λ°μμκ² κ°μ₯ μ΅μν λ°©λ²μ λλ€. νμ§λ§ λλ‘λ μ΄ λ°©μμ΄ μ½λμ μλλ₯Ό λͺ ννκ² λλ¬λ΄μ§ λͺ»νκ±°λ, λΆνμν κ°μ²΄λ₯Ό κ³μ λ§λ€μ΄λ΄λ μμΈμ΄ λκΈ°λ ν©λλ€.
μ΄λ΄ λ μμ±μμ μ’μ λμμ΄ λλ κ²μ΄ λ°λ‘ μ μ ν©ν°λ¦¬ λ©μλ(Static Factory Method)μ λλ€. λ¨μν new ν€μλλ₯Ό μ¬μ©νλ λμ , μλ―Έ μλ μ΄λ¦μ κ°μ§ μ μ λ©μλλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ±ν©λλ€. μ΄λ₯Ό ν΅ν΄ κ°λ μ±κ³Ό μ μ°μ±μ ν¬κ² ν₯μμν€κ³ , λ ν¨μ¨μ μΈ λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό ν μ μμ΅λλ€.
μ΄λ² κΈμμλ μ΄νν°λΈ μλ° 3ν μμ΄ν 1 "μμ±μ λμ μ μ ν©ν°λ¦¬ λ©μλλ₯Ό κ³ λ €νλΌ"μ λ΄μ©μ κΈ°λ°μΌλ‘ μ μ ν©ν°λ¦¬ λ©μλμ 5κ°μ§ ν΅μ¬ μ₯μ κ³Ό λ¨μ μ μμ μ½λμ ν¨κ» μμλ³΄κ² μ΅λλ€.
1. μ μ ν©ν°λ¦¬ λ©μλμ 5κ°μ§ ν΅μ¬ μ₯μ
1-1. μ΄λ¦μ κ°μ§ μ μμ΄ μλλ₯Ό λͺ νν ννν μ μλ€.
μμ±μλ ν΄λμ€ μ΄λ¦κ³Ό λμΌν΄μΌ νκ³ , λ§€κ°λ³μμ νμ κ³Ό μμλ‘λ§ μλ‘λ₯Ό ꡬλΆν©λλ€. μ΄ λλ¬Έμ λ§€κ°λ³μλ§ λ΄μλ κ°μ²΄κ° μ΄λ€ μνλ‘ μμ±λλμ§ νμ νκΈ° μ΄λ €μΈ λκ° λ§μ΅λλ€.
λ°λ©΄ μ μ ν©ν°λ¦¬ λ©μλλ μμ λ‘κ² μ΄λ¦μ μ§μ μ μμ΄, λ©μλ μ΄λ¦ μμ²΄κ° λ¬Έμν μν μ ν μ μμ΅λλ€.
볡μμ(Complex Number)λ₯Ό μμ±νλ μλ‘ μ°¨μ΄λ₯Ό μ΄ν΄ν΄λ΄ μλ€.
// Before: μμ±μ μ¬μ© - μλκ° λΆλΆλͺ
ComplexNumber c1 = new ComplexNumber(3, 4); // μ’νμΈκ°? μ€μλΆμ νμλΆμΈκ°?
ComplexNumber c2 = new ComplexNumber(5, Math.PI/4, true); // 무μμ μλ―Ένλκ°?
// After: μ μ ν©ν°λ¦¬ λ©μλ - μλκ° λͺ
ν
ComplexNumber c1 = ComplexNumber.ofRectangular(3, 4); // μ§κ΅μ’νκ³
ComplexNumber c2 = ComplexNumber.ofPolar(5, Math.PI/4); // κ·Ήμ’νκ³
ComplexNumber c3 = ComplexNumber.ofImaginary(7); // νμ
μ΄μ²λΌ ofRectangular, ofPolar κ°μ μ΄λ¦μ λ§€κ°λ³μμ μλ―Έλ₯Ό μλ²½νκ² μ€λͺ ν΄ μ€λλ€.
1-2. νΈμΆλ λλ§λ€ μΈμ€ν΄μ€λ₯Ό μλ‘ μμ±νμ§ μμλ λλ€.
μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μ¬μ©νλ©΄ 미리 λ§λ€μ΄ λ μΈμ€ν΄μ€λ μΊμ±λ μΈμ€ν΄μ€λ₯Ό λ°νν μ μμ΅λλ€. μ΄ λλΆμ λΆνμν κ°μ²΄ μμ±μ νΌν΄ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€. νΉν μμ± λΉμ©μ΄ ν° κ°μ²΄λ, λ°λ³΅μ μΌλ‘ λμΌν κ°μ²΄κ° μμ²λ λ λ§€μ° μ μ©ν©λλ€.
κ°μ₯ λνμ μΈ μλ Boolean.valueOf(boolean) λ©μλμ λλ€.
// Boolean.valueOf()λ μλ‘μ΄ κ°μ²΄λ₯Ό μμ±νμ§ μκ³ ,
// 미리 μμ±λ Boolean.TRUE λλ Boolean.FALSEλ₯Ό λ°ν
Boolean isTrue1 = Boolean.valueOf(true);
Boolean isTrue2 = Boolean.valueOf(true);
// isTrue1κ³Ό isTrue2λ μμ ν λμΌν μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°
System.out.println(isTrue1 == isTrue2); // μΆλ ₯: true
μ΄λ κ² λ°λ³΅λλ μμ²μ λμΌν κ°μ²΄λ₯Ό λ°ννλ μμΌλ‘ μΈμ μ΄λ μΈμ€ν΄μ€λ₯Ό μ΄μ μκ² ν μ§λ₯Ό μ² μ ν ν΅μ ν μ μλ ν΄λμ€λ₯Ό μΈμ€ν΄μ€ ν΅μ (Instance Control) ν΄λμ€λΌκ³ ν©λλ€. ν΄λμ€κ° μμ±λλ μΈμ€ν΄μ€μ μλ₯Ό ν΅μ νμ¬ μ±κΈν΄(Singleton) ν¨ν΄μ ꡬννκ±°λ, νλΌμ΄μ¨μ΄νΈ(Flyweight) ν¨ν΄μ κΈ°λ°μ λ§λ ¨ν μ μμ΅λλ€.
1-3. λ°ν νμ μ νμ νμ κ°μ²΄λ₯Ό λ°νν μ μλ λ₯λ ₯μ΄ μλ€.
μ΄ λ₯λ ₯μ μ μ ν©ν°λ¦¬ λ©μλκ° κ°μ§ μμ²λ μ μ°μ±μ ν΅μ¬μ λλ€. λ©μλμ μ μΈλ λ°ν νμ μ μΈν°νμ΄μ€λ μΆμ ν΄λμ€κ° λ μ μκ³ , μ€μ λ‘λ κ·Έ νμ νμ μ ꡬν체 κ°μ²΄λ₯Ό μμ λ‘κ² μ νν΄μ λ°νν μ μμ΅λλ€.
μ΄λ¬ν μ μ°μ± λλΆμ μ°λ¦¬λ ꡬν ν΄λμ€λ₯Ό μΈλΆμ λ ΈμΆνμ§ μκ³ λ ν΄λΌμ΄μΈνΈμκ² κ°μ²΄λ₯Ό μ 곡ν μ μμ΅λλ€. κ²°κ³Όμ μΌλ‘, APIλ₯Ό λ§€μ° μκ³ κ°κ²°νκ² μ μ§ν μ μκ² λ©λλ€.
μλ° μ»¬λ μ νλ μμν¬κ° μ΄ λ°©μμ μ νμ©νκ³ μμ΅λλ€.
Java 8 μ΄μ : λλ° ν΄λμ€ Collections νμ©
java8 μ΄μ μλ μΈν°νμ΄μ€μ μ μ λ©μλλ₯Ό μ μΈν μ μμ΄μ, Collectionsμ κ°μ λ³λμ μ νΈλ¦¬ν° ν΄λμ€(λλ° ν΄λμ€)λ₯Ό μ¬μ©νμ΅λλ€.
import java.util.*;
public class Java8Style {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
// Collections.unmodifiableListλ μμ λΆκ°λ₯ν 리μ€νΈλ₯Ό λ°ν
List<String> unmodifiable = Collections.unmodifiableList(list);
// ν΄λΌμ΄μΈνΈλ 'List' μΈν°νμ΄μ€ νμ
μΌλ‘ κ°μ²΄λ₯Ό λ€λ£Έ
System.out.println(unmodifiable);
// μ€μ ꡬν체μ νμ
: λ΄λΆ ν΄λμ€μΈ UnmodifiableRandomAccessList
// μ΄ ν΄λμ€λ μΈλΆμ 곡κ°λμ΄ μμ§ μμ
System.out.println(unmodifiable.getClass());
// μΆλ ₯: class java.util.Collections$UnmodifiableRandomAccessList
}
}
Java 8 μ΄ν (μΈν°νμ΄μ€ μμ μ§μ static λ©μλ)
μλ° 8λΆν° μΈν°νμ΄μ€μ public μ μ λ©μλλ₯Ό μ μΈν μ μκ² λμμ΅λλ€. μ΄ λλΆμ κΈ°μ‘΄μ λλ° ν΄λμ€κ° νλ μν μ μΈν°νμ΄μ€κ° μ§μ μνν μ μκ² λμμ΅λλ€. λν, Java 9μμλ List.of(), Set.of() μ κ°μ νΈλ¦¬ν 컬λ μ μ μ ν©ν°λ¦¬ λ©μλλ€μ΄ λκ±° μΆκ°λλ©΄μ μ΄ ν¨ν΄μ΄ λμ± λ리 μ°μ΄κ² λμμ΅λλ€.
import java.util.List;
public class Java9Style {
public static void main(String[] args) {
// λ μ΄μ Collections ν΄λμ€κ° νμ μμ
// List μΈν°νμ΄μ€κ° μ§μ λΆλ³ 리μ€νΈλ₯Ό μμ±
List<String> unmodifiable = List.of("a", "b", "c");
System.out.println(unmodifiable);
// μ€μ ꡬν체λ μ¬μ ν λ΄λΆμ κ°μΆ°μ§ ImmutableCollections$ListN
System.out.println(unmodifiable.getClass());
// μΆλ ₯: class java.util.ImmutableCollections$ListN
}
}
μ ꡬν체λ₯Ό κ°μΆκΉ?
- API λ¨μν: κ°λ°μλ List μΈν°νμ΄μ€λ§ μλ©΄ μΆ©λΆν©λλ€. μμ κ°μ λ΄λΆ ꡬν ν΄λμ€ μ΄λ¦μ μ νμκ° μμ΅λλ€.
- ꡬν κ΅μ²΄μ μμ : JDK νμ΄ λμ€μ λ ν¨μ¨μ μΈ μλ£κ΅¬μ‘°λ₯Ό κ°λ°νλλΌλ, ν΄λΌμ΄μΈνΈ μ½λμ μν₯μ μ£Όμ§ μκ³ λ΄λΆ ꡬν체λ₯Ό κ΅μ²΄ν μ μμ΅λλ€.
- λΆλ³μ± 보μ₯: List.of()λ‘ μ»μ 리μ€νΈλ μμ μ΄ λΆκ°λ₯ν©λλ€. λ§μ½ λ΄λΆ ꡬν ν΄λμ€κ° publicμ΄λΌλ©΄, λκ΅°κ° μ΄λ₯Ό μμνμ¬ λΆλ³ κ·μΉμ κΉ¨νΈλ¦΄ μλ μμ΅λλ€. package-privateμΌλ‘ μ κ·Όμ λ§μ μ΄λ° μνμ μμ² μ°¨λ¨ν©λλ€.
μ§μ μ΄ λ°©μμ μ μ©ν΄λ΄ μλ€.
// Shape.java - κ³΅κ° API (μΈν°νμ΄μ€)
public interface Shape {
double area();
// μ μ ν©ν°λ¦¬ λ©μλ
// λ°ν νμ
μ Shapeμ΄μ§λ§, μ€μ λ‘λ Circle μΈμ€ν΄μ€λ₯Ό λ°ν
static Shape circle(double radius) {
return new Circle(radius); // Circleμ μΈλΆμ 곡κ°λμ§ μμ package-private ν΄λμ€
}
// μ€μ λ‘λ Rect μΈμ€ν΄μ€λ₯Ό λ°ν
static Shape rectangle(double width, double height) {
return Rect.of(width, height); // μΊμ± κΈ°λ₯μ΄ μλ μ μ ν©ν°λ¦¬
}
}
// Circle.java - λ΄λΆ ꡬν체 (package-private)
final class Circle implements Shape {
private final double radius;
// μμ±μλ package-privateμΌλ‘ μΈλΆμμ μ§μ μμ± λΆκ°
Circle(double radius) { this.radius = radius; }
@Override
public double area() { return Math.PI * radius * radius; }
}
// Rect.java - λ΄λΆ ꡬν체 (package-private)
final class Rect implements Shape {
private static final Map<String, Rect> CACHE = new HashMap<>();
private final double width, height;
private Rect(double width, double height) { this.width = width; this.height = height; }
// μ μ ν©ν°λ¦¬ + μΊμ± (νλΌμ΄μ¨μ΄νΈ ν¨ν΄)
static Rect of(double width, double height) {
String key = width + "x" + height;
return CACHE.computeIfAbsent(key, k -> new Rect(width, height));
}
@Override
public double area() { return width * height; }
}
ν΄λΌμ΄μΈνΈλ Circleμ΄λ Rect ν΄λμ€μ μ‘΄μ¬λ₯Ό μ ν λͺ¨λ₯Έ μ± Shape.circle(10)κ³Ό κ°μ΄ μΈν°νμ΄μ€λ§μΌλ‘ κ°μ²΄λ₯Ό μ¬μ©νκ² λ©λλ€.
1-4. μ λ ₯ λ§€κ°λ³μμ λ°λΌ λ§€λ² λ€λ₯Έ ν΄λμ€μ κ°μ²΄λ₯Ό λ°νν μ μλ€.
3λ² μ₯μ μ μ°μ₯μ μΌλ‘, μ μ ν©ν°λ¦¬ λ©μλλ μ λ ₯κ°μ λ°λΌ λ°νν κ°μ²΄μ ν΄λμ€λ₯Ό λμ μΌλ‘ κ²°μ ν μ μμ΅λλ€.
EnumSet ν΄λμ€κ° λνμ μΈ μμ λλ€. EnumSetμ public μμ±μ μμ΄ μ€μ§ μ μ ν©ν°λ¦¬ λ©μλλ§ μ 곡ν©λλ€.
public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType) {
Enum<?>[] universe = getUniverse(elementType);
if (universe == null)
throw new ClassCastException(elementType + " not an enum");
// μμμ κ°μμ λ°λΌ λ€λ₯Έ ꡬν체λ₯Ό λ°νν©λλ€.
if (universe.length <= 64)
return new RegularEnumSet<>(elementType, universe); // 64κ° μ΄νλ©΄ long λ³μ νλλ‘ κ΄λ¦¬
else
return new JumboEnumSet<>(elementType, universe); // 65κ° μ΄μμ΄λ©΄ long λ°°μ΄λ‘ κ΄λ¦¬
}
ν΄λΌμ΄μΈνΈλ λ΄λΆμ μΌλ‘ RegularEnumSetμ΄ μ°μ΄λμ§ JumboEnumSetμ΄ μ°μ΄λμ§ μ ν μ νμκ° μμ΅λλ€. κ·Έμ EnumSet μΈν°νμ΄μ€λ‘λ§ λ€λ£¨λ©΄ λ©λλ€. λ§μ½ λμ€μ RegularEnumSetμ μ±λ₯μ μ΄μ μ΄ μ¬λΌμ Έ, JDK νμ΄ ν΄λΉ ν΄λμ€λ₯Ό μμ νκ³ νμ JumboEnumSetλ§ λ°ννλλ‘ μ½λλ₯Ό μμ νλ€ ν΄λ ν΄λΌμ΄μΈνΈμκ²λ μλ¬΄λ° μν₯μ΄ μμ΅λλ€.
1-5. μ μ ν©ν°λ¦¬ λ©μλλ₯Ό μμ±νλ μμ μλ λ°νν κ°μ²΄μ ν΄λμ€κ° μ‘΄μ¬νμ§ μμλ λλ€.
μ΄ μ μ°ν¨μ μλΉμ€ μ 곡μ νλ μμν¬(Service Provider Framework)λ₯Ό λ§λλ κ·Όκ°μ΄ λ©λλ€.
λνμ μΈ μλ JDBC(Java Database Connectivity)μ λλ€.
μλΉμ€ μ 곡μ νλ μμν¬μ ν΅μ¬μ μλΉμ€μ ꡬν체μ ν΄λΌμ΄μΈνΈλ₯Ό λΆλ¦¬νλ κ²μ λλ€.
- μλΉμ€ μΈν°νμ΄μ€: ꡬν체μ λμμ μ μ (JDBCμ Connection)
- μ 곡μ λ±λ‘ API: μ 곡μκ° μμ μ ꡬν체λ₯Ό λ±λ‘ (DriverManager.registerDriver)
- μλΉμ€ μ κ·Ό API: ν΄λΌμ΄μΈνΈκ° μλΉμ€ μΈμ€ν΄μ€λ₯Ό μ»λ API. μ μ ν©ν°λ¦¬ λ©μλ. (DriverManager.getConnection)
- μλΉμ€ μ 곡μ μΈν°νμ΄μ€: ꡬν체λ₯Ό μμ±νλ ν©ν°λ¦¬ κ°μ²΄λ₯Ό μ€λͺ (Driver)
ν΄λΌμ΄μΈνΈλ μλΉμ€ μ κ·Ό API(DriverManager.getConnection)λ₯Ό νΈμΆν λ μ΄λ€ λ°μ΄ν°λ² μ΄μ€(MySQL, Oracle λ±)μ μ°κ²°ν μ§ λͺ μν©λλ€. κ·Έλ¬λ©΄ νλ μμν¬λ 미리 λ±λ‘λ μ 곡μ(MySQL Driver, Oracle Driver)λ₯Ό μ¬μ©ν΄ ν΄λΉ Connection ꡬν체 μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄ λ°νν©λλ€.
μ΄ κ΅¬μ‘° λλΆμ DriverManager μ½λλ₯Ό μμ±νλ μμ μλ μΈμμ μ΄λ€ Driver ꡬνμ²΄κ° μ‘΄μ¬ν μ§ μ ν μ νμκ° μμ΅λλ€. μ΄κ²μ΄ λ°λ‘ "ν΄λμ€κ° μ‘΄μ¬νμ§ μμλ λλ€"λ λ§μ μλ―Έμ λλ€.
2. μ μ ν©ν°λ¦¬ λ©μλ μ¬μ©μ λ¨μ
λ¬Όλ‘ μ₯μ λ§ μλ κ²μ μλλλ€. λ€μκ³Ό κ°μ λ¨μ λ μ‘΄μ¬ν©λλ€.
2-1. μμμ νλ €λ©΄ publicμ΄λ protected μμ±μκ° νμνλ μ μ ν©ν°λ¦¬λ§ μ 곡νλ©΄ νμ ν΄λμ€λ₯Ό λ§λ€ μ μλ€.
Collectionsμ μ νΈλ¦¬ν° ꡬν ν΄λμ€λ€μ΄ μμλ μ μλλ‘ μ€κ³λ κ²μ΄ λ°λ‘ μ΄ λλ¬Έμ λλ€. νμ§λ§ μ΄λ μ€νλ € μμλ³΄λ€ μ»΄ν¬μ§μ μ μ¬μ©νλλ‘ μ λνκ³ , λΆλ³(Immutable) νμ μΌλ‘ μ€κ³νκΈ° μ½κ² λ§λ λ€λ μ μμ μ₯μ μΌλ‘ μμ©νκΈ°λ ν©λλ€.
2-2. μ μ ν©ν°λ¦¬ λ©μλλ νλ‘κ·Έλλ¨Έκ° μ°ΎκΈ° μ΄λ ΅λ€.
μμ±μλ API λ¬Έμ μλ¨μ λͺ ννκ² λͺ¨μ¬μμ§λ§, μ μ ν©ν°λ¦¬ λ©μλλ λ€λ₯Έ μΌλ°μ μΈ λ©μλλ€ μ¬μ΄μ μμ¬ μμ΄ λμ μ λμ§ μμ μ μμ΅λλ€.
μ΄ λ¨μ μ μννκΈ° μν΄, API λ¬Έμλ₯Ό μΆ©μ€ν μμ±νκ³ λ리 μλ €μ§ λͺ λͺ κ·μΉμ λ°λ₯΄λ κ²μ΄ λ§€μ° μ€μν©λλ€.
π‘ μ μ ν©ν°λ¦¬ λ©μλ λͺ λͺ κ·μΉ
- from: λ§€κ°λ³μ νλλ₯Ό λ°μ ν΄λΉ νμ
μ μΈμ€ν΄μ€λ₯Ό λ°ν (νλ³ν)
- Date d = Date.from(instant);
- of: μ¬λ¬ λ§€κ°λ³μλ₯Ό λ°μ μΈμ€ν΄μ€λ₯Ό μμ± (μ§κ³)
- Set<Rank> cards = EnumSet.of(JACK, QUEEN, KING);
- valueOf: fromκ³Ό ofμ λ μμΈν λ²μ
- BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE);
- instance, getInstance: μΈμ€ν΄μ€λ₯Ό λ°ν. μ΄λ―Έ μμ±λ κ²μ λ°νν μλ μμ (μ±κΈν΄)
- StackWalker luke = StackWalker.getInstance(options);
- create, newInstance: λ§€λ² μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νμ¬ λ°νν¨μ 보μ₯
- Object newArr = Array.newInstance(classObject, arrayLen);
- getType: λ€λ₯Έ ν΄λμ€μ ν©ν°λ¦¬ λ©μλλ₯Ό μ μν λ μ¬μ©. getInstanceμ μ μ¬.
- FileStore fs = Files.getFileStore(path);
- newType: λ€λ₯Έ ν΄λμ€μ ν©ν°λ¦¬ λ©μλλ₯Ό μ μν λ μ¬μ©. newInstanceμ μ μ¬.
- BufferedReader br = Files.newBufferedReader(path);
μ 리
μ μ ν©ν°λ¦¬ λ©μλμ public μμ±μλ κ°μμ μ°μμκ° μμΌλ, μλμ μΈ μ₯λ¨μ μ μ΄ν΄νκ³ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€. νμ§λ§ λ§μ κ²½μ° μ μ ν©ν°λ¦¬ λ©μλκ° λ λμ μ νμ΄ λ μ μμΌλ―λ‘, 무μμ public μμ±μλ₯Ό μ¬μ©νλ κ²μ μ§μνλ κ²μ΄ μ’μ΅λλ€.