λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

빈 ꡬ멍 μ±„μš°κΈ°

[Java] μ™œ μŠ€ν…Œν‹± λ©”μ„œλ“œμ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ λͺ»ν• κΉŒ

좜처

ChatGPT


μŠ€νƒœν‹± λ©”μ„œλ“œμ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μ—†λŠ” μ΄μœ λŠ” μžλ°”μ˜ 클래슀 섀계와 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ κ°œλ…μ— κΈ°μ΄ˆν•œλ‹€. 이 μ œμ•½μ€ 객체의 μƒνƒœμ™€ 클래슀의 λ™μž‘μ„ λͺ…ν™•ν•˜κ²Œ λΆ„λ¦¬ν•˜κ³ , μŠ€νƒœν‹± 멀버가 μΈμŠ€ν„΄μŠ€μ— μ˜μ‘΄ν•˜μ§€ μ•Šλ„λ‘ 보μž₯ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•œλ‹€.

1. μŠ€νƒœν‹±κ³Ό μΈμŠ€ν„΄μŠ€μ˜ 차이

μŠ€νƒœν‹± 멀버 Static Members

클래슀 μˆ˜μ€€μ—μ„œ 쑴재

μŠ€νƒœν‹± λ©”μ„œλ“œμ™€ μŠ€νƒœν‹± λ³€μˆ˜λŠ” 클래슀 μžμ²΄μ— μ†ν•œλ‹€. ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ  λ•Œ μƒμ„±λ˜λ©°, λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ κ³΅μœ ν•œλ‹€.

μΈμŠ€νŠΈμ— μ˜μ‘΄ν•˜μ§€ μ•ŠμŒ

μŠ€νƒœν‹± λ©”μ„œλ“œλŠ” νŠΉμ • μΈμŠ€ν„΄μŠ€μ™€ μ—°κ²°λ˜μ§€ μ•ŠμœΌλ©°, 클래슀 이름을 톡해 직접 ν˜ΈμΆœλœλ‹€.

 

μΈμŠ€ν„΄μŠ€ 멀버 Instancee Members

객체 μˆ˜μ€€μ—μ„œ 쑴재

μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλŠ” 객체가 생성될 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ κ°’κ³Ό λ™μž‘μ„ 가진닀.

각 μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ 독립적

각 μΈμŠ€ν„΄μŠ€λŠ” 고유의 데이터 μƒνƒœλ₯Ό 가지며, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” ν•΄λ‹Ή 객체의 μƒνƒœλ₯Ό λ‚˜νƒ€λ‚Έλ‹€.

 

2. μŠ€νƒœν‹± λ©”μ„œλ“œμ˜ νŠΉμ„±

μŠ€νƒœν‹± λ©”μ„œλ“œλŠ” νŠΉμ • μΈμŠ€ν„΄μŠ€μ™€ λ¬΄κ΄€ν•˜κ²Œ 클래슀 μ „μ²΄μ˜ 곡톡적인 λ™μž‘μ„ μ •μ˜ν•œλ‹€. μ΄λŸ¬ν•œ νŠΉμ„±μœΌλ‘œ 인해 λ‹€μŒκ³Ό 같은 μ œν•œμ΄ μ‘΄μž¬ν•œλ‹€.

 

2.1 클래슀 λ‘œλ”© μ‹œμ μ— 쑴재

μŠ€νƒœλ¦­ λ©”μ„œλ“œλŠ” ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— λ‘œλ“œλ  λ•Œ μƒμ„±λœλ‹€. 이 μ‹œμ μ—λŠ” νŠΉμ • μΈμŠ€ν„΄μŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ„ μˆ˜λ„ 있으며, λ”°λΌμ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ— μ ‘κ·Όν•  방법이 μ—†λ‹€.

 

2.2 독립적인 ν•¨μˆ˜μ²˜λŸΌ λ™μž‘

μŠ€νƒœν‹± λ©”μ„œλ“œλŠ” 객체의 νŠΉμ • μƒνƒœλ‚˜ λ™μž‘κ³Ό 관계없이 μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜λ‚˜ νŠΉμ • λ‘œμ§μ„ μˆ˜ν–‰ν•˜λŠ” 데 주둜 μ‚¬μš©λœλ‹€. 예λ₯Ό λ“€μ–΄, 'Math' 클래슀의 'sqrt' λ©”μ„œλ“œλŠ” μž…λ ₯값에 λŒ€ν•œ κ³„μ‚°λ§Œμ„ μˆ˜ν–‰ν•˜λ©°, νŠΉμ • 객체의 μƒνƒœμ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

2.3 μŠ€λž˜λ“œ μ•ˆμ •μ„±

μŠ€νƒœν‹± λ©”μ„œλ“œλŠ” μ—¬λŸ¬ μŠ€λ ˆλ“œμ—μ„œ λ™μ‹œμ— 호좜될 수 μžˆλ‹€. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμŒμœΌλ‘œμ¨ λ™μ‹œμ„± 문제λ₯Ό ν”Όν•  수 μžˆλ‹€. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λŠ” 곡유 μƒνƒœμ΄κΈ° λ•Œλ¬Έμ— μŠ€λ ˆλ“œ κ°„μ˜ μΆ©λŒμ΄λ‚˜ λΆˆμΌμΉ˜κ°€ λ°œμƒν•  수 μžˆλ‹€.

 

3. 예제 μ½”λ“œλ‘œ μ΄ν•΄ν•˜κΈ°

예제 1 : μŠ€νƒœν‹± λ©”μ„œλ“œμ—μ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ ‘κ·Ό μ‹œλ„

public class MyClass {
    private int instanceVar = 42; // μΈμŠ€ν„΄μŠ€ λ³€μˆ˜
    
    public static void staticMethod() {
        // System.out.println(instanceVar); // 였λ₯˜: μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μ—†μŒ
    }
    
    public void instanceMethod() {
        System.out.println(instanceVar); // μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ°Έμ‘° κ°€λŠ₯
    }
}

 

 

  • 였λ₯˜ λ°œμƒ:

'staticMethod'λŠ” 'instanceVar'λ₯Ό μ°Έμ‘°ν•  수 μ—†λ‹€. μ™œλƒν•˜λ©΄ 'staticMethod'λŠ” 클래슀 μˆ˜μ€€μ—μ„œ μ‘΄μž¬ν•˜λ©°, νŠΉμ • μΈμŠ€ν„΄μŠ€μ™€ μ—°κ²°λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€.

 

  • μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ—μ„œμ˜ μ ‘κ·Ό:

'instanceMethod'λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλ‹€. ν•΄λ‹Ή λ©”μ„œλ“œλŠ” νŠΉμ • 객체의 λ©”μ„œλ“œλ‘œ 호좜되며, 객체의 μƒνƒœμ— μ ‘κ·Όν•  수 μžˆλ‹€.

 

예제 2: μŠ€νƒœν‹± λ³€μˆ˜μ™€ λ©”μ„œλ“œ

public class Counter {
    private static int count = 0; // μŠ€νƒœν‹± λ³€μˆ˜
    
    public static void increment() {
        count++;
    }
    
    public static int getCount() {
        return count;
    }
    
    public void printCount() {
        System.out.println("Count: " + count); // μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œλ„ μŠ€νƒœν‹± λ³€μˆ˜ μ°Έμ‘° κ°€λŠ₯
    }
}

 

 

  • μŠ€νƒœν‹± λ³€μˆ˜ μ‚¬μš©:

'increment'와 'getCount' λ©”μ„œλ“œλŠ” 'count'λΌλŠ” μŠ€νƒœν‹± λ³€μˆ˜λ₯Ό μ‘°μž‘ν•©λ‹ˆλ‹€. λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ 이 μŠ€νƒœν‹± λ³€μˆ˜λ₯Ό κ³΅μœ ν•©λ‹ˆλ‹€.

 

  • μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ—μ„œλ„ μŠ€νƒœν‹± λ³€μˆ˜ μ°Έμ‘°:

'printCount'λŠ” μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ§€λ§Œ, μŠ€νƒœν‹± λ³€μˆ˜μΈ 'count'λ₯Ό μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μŠ€νƒœν‹± λ³€μˆ˜κ°€ λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ™€ 클래슀 μˆ˜μ€€μ—μ„œ 곡유되기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

4. μŠ€νƒœν‹± λ©”μ„œλ“œμ˜ μ˜¬λ°”λ₯Έ μ‚¬μš© 사둀

μŠ€νƒœν‹± λ©”μ„œλ“œλŠ” μΈμŠ€ν„΄μŠ€μ™€ 독립적인 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ±°λ‚˜ 클래슀 전체에 κ΄€λ ¨λœ λ‘œμ§μ„ μ²˜λ¦¬ν•  λ•Œ μ‚¬μš©λœλ‹€. λ‹€μŒμ€ μŠ€νƒœν‹± λ©”μ„œλ“œμ˜ 일반적인 μ‚¬μš© 사둀이닀.

 

4.1 μœ ν‹Έλ¦¬ν‹° λ©”μ„œλ“œ

자주 μ‚¬μš©λ˜λŠ” κΈ°λŠ₯μ΄λ‚˜ 계산 λ‘œμ§μ„ ν¬ν•¨ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μŠ€νƒœν‹±μœΌλ‘œ μ •μ˜ν•˜μ—¬ 클래슀 μˆ˜μ€€μ—μ„œ 직접 ν˜ΈμΆœν•  수 있게 ν•œλ‹€.

public class MathUtils {
    public static int max(int a, int b) {
        return a > b ? a : b;
    }
}

 

 

  • μ‚¬μš© μ˜ˆμ‹œ: 'int result = MathUtils.max(5, 10);'

 

4.2 νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄

객체의 생성 λ‘œμ§μ„ μΊ‘μŠν™”ν•΄ μŠ€νƒœν‹± λ©”μ„œλ“œλ‘œ μ œκ³΅ν•˜λŠ” λ””μžμΈ νŒ¨ν„΄μ΄λ‹€.

public class ShapeFactory {
    public static Shape createCircle(double radius) {
        return new Circle(radius);
    }
    
    public static Shape createSquare(double side) {
        return new Square(side);
    }
}
  • μ‚¬μš© μ˜ˆμ‹œ: 'Shape circle = ShapeFactory.createCircle(5.0);'

 

4.3 μ‹±κΈ€ν„΄ νŒ¨ν„΄

μ‹±κΈ€ν„΄ νŒ¨ν„΄μ€ νŠΉμ • 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό ν•˜λ‚˜λ§Œ μƒμ„±ν•˜λ„λ‘ μ œν•œν•˜λ©°, μŠ€νƒœν‹± λ©”μ„œλ“œλ₯Ό 톡해 μΈμŠ€ν„΄μŠ€μ— μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•œλ‹€.

public class Singleton {
    private static Singleton instance;
    
    private Singleton() {
        // μƒμ„±μž μˆ¨κΉ€
    }
    
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
  • μ‚¬μš© μ˜ˆμ‹œ: 'Singleton singleton = Singleton.getInstance();'

 

4.4 μŠ€νƒœν‹± 블둝과 μ΄ˆκΈ°ν™”

클래슀 λ‘œλ”© μ‹œ ν•„μš”ν•œ μ΄ˆκΈ°ν™”λ₯Ό μŠ€νƒœν‹± 블둝을 톡해 μ„€μ •ν•  수 μžˆλ‹€.

public class Config {
    static {
        System.out.println("Static block executed.");
        // μ΄ˆκΈ°ν™” μ½”λ“œ
    }
}
  • κ²°κ³Ό: 'Config' ν΄λž˜μŠ€κ°€ 처음 λ‘œλ“œλ  λ•Œ μŠ€νƒœν‹± 블둝이 μ‹€ν–‰λœλ‹€.

 

κ²°λ‘ 

μŠ€νƒœν‹± λ©”μ„œλ“œλŠ” 클래슀 μˆ˜μ€€μ—μ„œ μ‘΄μž¬ν•˜λ©° νŠΉμ • μΈμŠ€ν„΄μŠ€μ™€ λ…λ¦½μ μœΌλ‘œ μž‘λ™ν•˜λ„λ‘ μ„€κ³„λ˜μ–΄ μžˆλ‹€. λ”°λΌμ„œ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€λŠ” λ¬΄κ΄€ν•˜κ²Œ λ™μž‘ν•˜λ©°, 곡톡적인 κΈ°λŠ₯을 μ œκ³΅ν•˜κ±°λ‚˜ μΈμŠ€ν„΄μŠ€ 간에 κ³΅μœ λ˜μ–΄μ•Ό ν•˜λŠ” 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” 데 μ ν•©ν•˜λ‹€. 이λ₯Ό 톡해 μžλ°”μ˜ κ°•λ ₯ν•œ νƒ€μž… μ‹œμŠ€ν…œκ³Ό 객체 지ν–₯ 섀계 원칙을 μœ μ§€ν•˜λ©°, μ½”λ“œμ˜ μ•ˆμ „μ„±κ³Ό νš¨μœ¨μ„±μ„ 보μž₯ν•  수 μžˆλ‹€.