[Java Design Pattern] 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œ

2024. 11. 10. 18:56Β·πŸ› οΈBackend/β˜•Java

μš°μ„  듀어가기에 μ•žμ„œ 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œλŠ” λ””μžμΈ νŒ¨ν„΄μ€ μ•„λ‹ˆμ§€λ§Œ, λΉ„μŠ·ν•œ 결을 κ°€μ§€κ³  μžˆλ‹€. μ΄λŸ¬ν•œ λ””μžμΈ νŒ¨ν„΄λ“€μ„ κ³΅λΆ€ν• λ•ŒλŠ” 개인적으둜 ν•΄λ‹Ή λ””μžμΈνŒ¨ν„΄μ˜ μž₯점과 단점을 νŒŒμ•…ν•˜λŠ” 곡뢀 방법이 κ°€μž₯ 쒋은 것 κ°™λ‹€. μ΄ν•΄ν•˜κΈ°κ°€ 더 μ‰¬μš΄λ“―

 

(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
'πŸ› οΈBackend/β˜•Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Java] JVMκ³Ό μžλ°” μ‹€ν–‰ 원리
  • [Java] Java와 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€?
  • [Java] λ³€μˆ˜ μ΄ˆκΈ°ν™”μ— λŒ€ν•œ 이해
  • [Java] Annotation μ΄λž€? ( μ• λ…Έν…Œμ΄μ…˜ )
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    였늘
    μ–΄μ œ
    • 전체보기 (169)
      • πŸŽ“λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅ (35)
        • βš™οΈμ»΄ν“¨ν„°μ˜ 이해 (11)
        • πŸ’»μ»΄ν“¨ν„°κ³Όν•™ 개둠 (5)
        • πŸ”’μžλ£Œκ΅¬μ‘° (4)
        • πŸŒμœ λΉ„μΏΌν„°μŠ€ μ»΄ν“¨νŒ… (11)
        • πŸ›οΈμ„Έκ³„μ˜μ •μΉ˜μ™€κ²½μ œ (3)
        • πŸ–₯️컴퓨터과학과 (1)
      • πŸ› οΈBackend (58)
        • πŸ“šλ°±μ—”λ“œ 곡뢀 (4)
        • β˜•Java (23)
        • 🌳Spring (13)
        • βš™οΈC (2)
        • ⚑Python (13)
        • JavaScript (1)
        • πŸ›’οΈDatabase (0)
        • Algorithm Problem Solving (2)
      • 🌐 Network (7)
        • πŸ“œHTTP (7)
      • πŸš€DevOps (1)
      • β›ΊμŠ€νŒŒλ₯΄νƒ€μ½”λ”©ν΄λŸ½ (64)
      • 정보 (2)
      • 정리가 ν•„μš”ν•œ κΈ€ (2)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

    • GitHub
  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    컴파일러
    μž…μΆœλ ₯
    Spring Framework
    Python
    Java
    μŠ€ν”„λ§
    자료ꡬ쑰
    spring
    λ°©ν†΅λŒ€
    μ»΄ν“¨ν„°μ˜ 이해
    운영체제
    λ°°μ—΄
    λ°©μ†‘λŒ€
    μœ λΉ„μΏΌν„°μŠ€
    파이썬
    μœ λΉ„μΏΌν„°μŠ€ μ»΄ν“¨νŒ…
    ν΄λΌμš°λ“œ
    λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅
    μœ λΉ„μΏΌν„°μŠ€ μ»΄ν“¨νŒ…κ°œλ‘ 
    μžλ°”
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.1
junbin2
[Java Design Pattern] 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œ
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”