λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

μžλ°” static의 μ˜λ―Έμ™€ μ‚¬μš©λ²•

by 5566 2023. 10. 1.

1. μžλ°” static ν‚€μ›Œλ“œμ˜ κ°œμš”

μžλ°”μ˜ static ν‚€μ›Œλ“œλŠ” 클래슀 멀버λ₯Ό μ„ μ–Έν•  λ•Œ μ‚¬μš©λ˜λ©°, ν•΄λ‹Ή 멀버가 μΈμŠ€ν„΄μŠ€μ— μ†ν•˜μ§€ μ•Šκ³  ν΄λž˜μŠ€μ— μ†ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. λ³€μˆ˜, λ©”μ†Œλ“œ, 블둝 λ“± μ—¬λŸ¬ 뢀뢄에 적용될 수 있으며, νŠΉμ • μΈμŠ€ν„΄μŠ€μ— μ†ν•˜λŠ” 것이 μ•„λ‹ˆλΌ 클래슀 μžμ²΄μ— μ†ν•˜κ²Œ λ©λ‹ˆλ‹€.

클래슀 멀버가 static으둜 μ„ μ–Έλ˜λ©΄, ν•΄λ‹Ή λ©€λ²„λŠ” ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œ μžλ™μœΌλ‘œ λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€λ©°, μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ ν˜ΈμΆœν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” ν•΄λ‹Ή 멀버가 μΈμŠ€ν„΄μŠ€μ˜ μƒμ„±κ³ΌλŠ” 상관 없이 μ‚¬μš©λ  수 μžˆμŒμ„ μ˜λ―Έν•˜λ©°, 정적(static)으둜 μ„ μ–Έλœ λ©€λ²„λŠ” ν΄λž˜μŠ€μ— μ†ν•˜λ―€λ‘œ 클래슀λͺ….멀버λͺ… ν˜•νƒœλ‘œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μžλ°”μ—μ„œ static ν‚€μ›Œλ“œλŠ” λ³€μˆ˜, λ©”μ†Œλ“œ, 블둝 등을 μ„ μ–Έν•  λ•Œ μ‚¬μš©λ˜κ³ , 이λ₯Ό 톡해 νŽΈλ¦¬ν•œ ν”„λ‘œκ·Έλž˜λ° ꡬ쑰λ₯Ό ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄μ œλΆ€ν„° static λ³€μˆ˜, λ©”μ†Œλ“œ, 블둝에 λŒ€ν•΄ μƒμ„Ένžˆ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

2. static λ³€μˆ˜μ˜ νŠΉμ§•κ³Ό μ‚¬μš©λ²•

νŠΉμ§•

  • static λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€μ— μ†ν•˜λŠ” 것이 μ•„λ‹ˆλΌ 클래슀 μžμ²΄μ— μ†ν•˜κΈ° λ•Œλ¬Έμ—, ν•΄λ‹Ή 클래슀의 λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ κ³΅μœ ν•©λ‹ˆλ‹€.
  • ν”„λ‘œκ·Έλž¨μ΄ 싀행될 λ•Œ ν•œ 번만 μƒμ„±λ˜λ©°, λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ λ™μΌν•œ 값을 κ°€μ§‘λ‹ˆλ‹€.
  • static λ³€μˆ˜λŠ” λ©”λͺ¨λ¦¬μ˜ 곡유 μ˜μ—­μΈ static μ˜μ—­μ— μ €μž₯λ˜μ–΄ ν”„λ‘œκ·Έλž¨ μ’…λ£Œ μ‹œκΉŒμ§€ μœ μ§€λ©λ‹ˆλ‹€.

μ‚¬μš©λ²•

  • static λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œμ—λŠ” λ³€μˆ˜ μ•žμ— "static" ν‚€μ›Œλ“œλ₯Ό λΆ™μž…λ‹ˆλ‹€.
  • μ΄ˆκΈ°ν™”λŠ” μ„ μ–Έκ³Ό λ™μ‹œμ— ν•  μˆ˜λ„ 있고, static 블둝을 톡해 μ΄ˆκΈ°ν™”ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  • static λ³€μˆ˜μ— μ ‘κ·Όν•  λ•ŒλŠ” 클래슀λͺ….λ³€μˆ˜λͺ… ν˜•νƒœλ‘œ μ ‘κ·Όν•©λ‹ˆλ‹€.
  • static λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€ 생성 없이도 호좜 κ°€λŠ₯ν•˜λ©° 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
public class MyClass {
    // static λ³€μˆ˜ μ„ μ–Έ 및 μ΄ˆκΈ°ν™”
    public static int count = 0;

    // static 블둝을 ν†΅ν•œ μ΄ˆκΈ°ν™”
    static {
        count = 10;
    }

    public void increaseCount() {
        count++; // static λ³€μˆ˜λ₯Ό μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œμ—μ„œ μ‚¬μš© κ°€λŠ₯
    }

    public static void main(String[] args) {
        System.out.println(MyClass.count); // static λ³€μˆ˜ 호좜
        MyClass obj1 = new MyClass();
        MyClass obj2 = new MyClass();
        obj1.increaseCount(); // static λ³€μˆ˜ λ³€κ²½
        System.out.println(MyClass.count); // λ³€κ²½λœ static λ³€μˆ˜ 호좜
    }
}

μœ„μ˜ μ˜ˆμ œμ—μ„œ countλŠ” static λ³€μˆ˜λ‘œ μ„ μ–Έλ˜μ–΄ 있으며, λͺ¨λ“  MyClass μΈμŠ€ν„΄μŠ€κ°€ κ³΅μœ ν•˜λŠ” λ³€μˆ˜μž…λ‹ˆλ‹€. μ΄ˆκΈ°κ°’μœΌλ‘œ 0을 μ§€μ •ν•˜κ³ , static 블둝을 톡해 값을 10으둜 λ³€κ²½ν•˜μ˜€μŠ΅λ‹ˆλ‹€. increaseCount() λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œμ΄μ§€λ§Œ, static λ³€μˆ˜μΈ countλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. main() λ©”μ†Œλ“œμ—μ„œλŠ” 클래슀λͺ…을 톡해 count 값을 좜λ ₯ν•˜κ³ , 객체λ₯Ό μƒμ„±ν•˜μ—¬ increaseCount() λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ count 값을 λ³€κ²½ν•œ ν›„ λ‹€μ‹œ 좜λ ₯ν•©λ‹ˆλ‹€. 좜λ ₯ κ²°κ³ΌλŠ” 10 -> 11둜 λ³€κ²½λ˜μ—ˆμŒμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

3. static λ©”μ†Œλ“œμ˜ νŠΉμ§•κ³Ό μ‚¬μš©λ²•

νŠΉμ§•

  • static λ©”μ†Œλ“œλŠ” ν•΄λ‹Ή 클래슀의 μΈμŠ€ν„΄μŠ€μ™€λŠ” λ¬΄κ΄€ν•˜κ²Œ ν˜ΈμΆœν•  수 μžˆλŠ” 클래슀 λ©”μ†Œλ“œμž…λ‹ˆλ‹€.
  • μΈμŠ€ν„΄μŠ€ 생성 없이도 ν˜ΈμΆœν•  수 μžˆμœΌλ―€λ‘œ, 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μœ ν‹Έλ¦¬ν‹° λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•  λ•Œ 주둜 μ‚¬μš©λ©λ‹ˆλ‹€.
  • static λ©”μ†Œλ“œλŠ” μ˜€λ²„λΌμ΄λ”©λ  수 μ—†μœΌλ©°, μžμ‹ ν΄λž˜μŠ€μ—μ„œ λ™μΌν•œ μ΄λ¦„μ˜ static λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • static λ©”μ†Œλ“œλŠ” this ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

μ‚¬μš©λ²•

  • static λ©”μ†Œλ“œλ₯Ό μ„ μ–Έν•  λ•Œμ—λŠ” λ©”μ†Œλ“œ μ•žμ— "static" ν‚€μ›Œλ“œλ₯Ό λΆ™μž…λ‹ˆλ‹€.
  • static λ©”μ†Œλ“œ λ‚΄μ—μ„œλŠ” static λ³€μˆ˜λ§Œ 직접 μ ‘κ·Όν•  수 있으며, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ‚˜ λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ—¬ μ ‘κ·Όν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • static λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ λ‹€λ₯Έ static λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œμ—λŠ” 클래슀λͺ….λ©”μ†Œλ“œλͺ… ν˜•νƒœλ‘œ ν˜ΈμΆœν•©λ‹ˆλ‹€.
  • static λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ λ©”μ†Œλ“œ μ˜€λ²„λ‘œλ”©μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.
public class MyMath {
    // static λ©”μ†Œλ“œ μ„ μ–Έ
    public static int add(int a, int b) {
        return a + b;
    }

    public static void main(String[] args) {
        int result = MyMath.add(3, 5); // static λ©”μ†Œλ“œ 호좜
        System.out.println(result); // κ²°κ³Ό 좜λ ₯
    }
}

μœ„μ˜ μ˜ˆμ œμ—μ„œ add() λ©”μ†Œλ“œλŠ” static λ©”μ†Œλ“œλ‘œ μ„ μ–Έλ˜μ–΄ 있으며, 두 개의 μ •μˆ˜λ₯Ό λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„μ„œ λ”ν•œ 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€. main() λ©”μ†Œλ“œμ—μ„œλŠ” 클래슀λͺ…을 톡해 add() λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜κ³ , κ²°κ³Όλ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€. 좜λ ₯ κ²°κ³ΌλŠ” 8이 λ©λ‹ˆλ‹€. static λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€ 생성 없이도 호좜 κ°€λŠ₯ν•˜λ―€λ‘œ, 객체λ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³ λ„ μœ ν‹Έλ¦¬ν‹° λ©”μ†Œλ“œλ‘œ ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4. static λΈ”λ‘μ˜ μ—­ν• κ³Ό μš©λ„

μ—­ν• 

  • static 블둝은 클래슀 μ΄ˆκΈ°ν™” μ‹œ 정적인 μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ μ½”λ“œ λΈ”λ‘μž…λ‹ˆλ‹€.
  • ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œ ν΄λž˜μŠ€κ°€ λ©”λͺ¨λ¦¬μ— λ‘œλ”©λ  λ•Œ 단 ν•œ 번 μ‹€ν–‰λ˜λ©°, μ΄ˆκΈ°ν™”λœ 값을 static λ³€μˆ˜μ— ν• λ‹Ήν•©λ‹ˆλ‹€.
  • 클래슀 내뢀에 μ—¬λŸ¬ 개의 static 블둝이 μžˆμ„ 경우, μ„ μ–Έλœ μˆœμ„œλŒ€λ‘œ μ‹€ν–‰λ©λ‹ˆλ‹€.

μš©λ„

  • static 블둝은 주둜 static λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”λ‚˜ λ³΅μž‘ν•œ μ΄ˆκΈ°ν™” μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€.
  • static 블둝은 λ©”μ†Œλ“œ 호좜 없이도 μ‹€ν–‰λ˜λ―€λ‘œ, λ³΅μž‘ν•œ μ΄ˆκΈ°ν™” μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ”λ° μœ μš©ν•©λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° μ„€μ •, 파일 λ‘œλ”©, μ™ΈλΆ€ API 호좜 λ“±μ˜ μ΄ˆκΈ°ν™” μž‘μ—…μ„ static λΈ”λ‘μ—μ„œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
public class DatabaseConfig {
    public static String DB_URL;
    public static String DB_USERNAME;
    public static String DB_PASSWORD;

    static {
        // λ°μ΄ν„°λ² μ΄μŠ€ 섀정을 μ΄ˆκΈ°ν™”
        DB_URL = "jdbc:mysql://localhost:3306/mydb";
        DB_USERNAME = "admin";
        DB_PASSWORD = "password";

        // λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° μ΄ˆκΈ°ν™”
        try {
            Connection conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
            // ...
        } catch (SQLException e) {
            e.printStackTrace();
        }

        // 파일 λ‘œλ”© λ“± λ³΅μž‘ν•œ μ΄ˆκΈ°ν™” μž‘μ—… μˆ˜ν–‰
        // ...
    }

    public static void main(String[] args) {
      // static 블둝에 μ˜ν•΄ μ΄ˆκΈ°ν™”λœ 값듀을 μ‚¬μš©
      System.out.println("DB URL: " + DatabaseConfig.DB_URL);
      System.out.println("DB Username: " + DatabaseConfig.DB_USERNAME);
      System.out.println("DB Password: " + DatabaseConfig.DB_PASSWORD);
    }
}

μœ„μ˜ μ˜ˆμ œμ—μ„œλŠ” DatabaseConfig 클래슀 내뢀에 static 블둝을 μ„ μ–Έν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€ 섀정을 μ΄ˆκΈ°ν™”ν•˜κ³ , λ°μ΄ν„°λ² μ΄μŠ€μ— μ—°κ²°ν•˜κ³ , 파일 λ‘œλ”© λ“±μ˜ μ΄ˆκΈ°ν™” μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. static 블둝은 클래슀 λ‘œλ”© μ‹œ 단 ν•œ 번 μ‹€ν–‰λ˜λ―€λ‘œ, main() λ©”μ†Œλ“œμ—μ„œ static 블둝에 μ˜ν•΄ μ΄ˆκΈ°ν™”λœ λ³€μˆ˜λ“€μ„ μ‚¬μš©ν•˜μ—¬ 좜λ ₯ν•©λ‹ˆλ‹€. 좜λ ₯ κ²°κ³ΌλŠ” μ΄ˆκΈ°ν™”λœ 값듀이 잘 좜λ ₯λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. static 블둝을 μ‚¬μš©ν•¨μœΌλ‘œμ¨ μ΄ˆκΈ°ν™” μž‘μ—…μ„ κ°„νŽΈν•˜κ²Œ μ²˜λ¦¬ν•  수 있으며, μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

5. μžλ°” static의 μ‚¬μš© μ˜ˆμ‹œ 및 μž₯단점

μ‚¬μš© μ˜ˆμ‹œ

  1. μœ ν‹Έλ¦¬ν‹° λ©”μ†Œλ“œ: static λ©”μ†Œλ“œλŠ” μΈμŠ€ν„΄μŠ€ 생성 없이 ν˜ΈμΆœν•  수 μžˆμœΌλ―€λ‘œ, μœ ν‹Έλ¦¬ν‹° λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•  λ•Œ 주둜 μ‚¬μš©λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Math 클래슀의 abs() λ©”μ†Œλ“œλ‚˜ Arrays 클래슀의 sort() λ©”μ†Œλ“œ 등은 static λ©”μ†Œλ“œλ‘œ κ΅¬ν˜„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
int absValue = Math.abs(-10); // μ •μˆ˜μ˜ μ ˆλŒ“κ°’μ„ κ΅¬ν•˜λŠ” μœ ν‹Έλ¦¬ν‹° λ©”μ†Œλ“œ
int[] nums = {5, 2, 8, 1};
Arrays.sort(nums); // 배열을 μ •λ ¬ν•˜λŠ” μœ ν‹Έλ¦¬ν‹° λ©”μ†Œλ“œ
  1. μƒμˆ˜: static λ³€μˆ˜λŠ” μ—¬λŸ¬ 개의 μΈμŠ€ν„΄μŠ€μ—μ„œ 값을 κ³΅μœ ν•˜λ―€λ‘œ, μƒμˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ 많이 μ‚¬μš©λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Math 클래슀의 PIλ‚˜ String 클래슀의 EMPTY λ¬Έμžμ—΄μ€ static final λ³€μˆ˜λ‘œ μ„ μ–Έλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
double circleArea = Math.PI * radius * radius; // μ›μ˜ 넓이 계산
String str = "Hello";
if (str.equals("")) {
    // ...
}
  1. νŒ©ν† λ¦¬ λ©”μ†Œλ“œ: μΈμŠ€ν„΄μŠ€ 생성을 λ‹΄λ‹Ήν•˜λŠ” factory λ©”μ†Œλ“œλŠ” 객체λ₯Ό μƒμ„±ν•˜κ³  λ°˜ν™˜ν•  λ•Œ static λ©”μ†Œλ“œλ‘œ κ΅¬ν˜„λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Calendar 클래슀의 getInstance() λ©”μ†Œλ“œλŠ” static λ©”μ†Œλ“œλ‘œ ν˜„μž¬ λ‚ μ§œμ™€ μ‹œκ°„μ„ 가지고 μžˆλŠ” Calendar 객체λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
Calendar cal = Calendar.getInstance(); // ν˜„μž¬ λ‚ μ§œμ™€ μ‹œκ°„μ„ κ°€μ§€λŠ” Calendar 객체λ₯Ό 생성

μž₯단점

μž₯점

  • static λ©€λ²„λŠ” 클래슀의 μΈμŠ€ν„΄μŠ€ 생성 없이 ν˜ΈμΆœν•  수 μžˆμ–΄, νŽΈλ¦¬ν•œ 접근이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • μœ ν‹Έλ¦¬ν‹° λ©”μ†Œλ“œλ‚˜ μƒμˆ˜, νŒ©ν† λ¦¬ λ©”μ†Œλ“œ 등을 κ΅¬ν˜„ν•  λ•Œ μœ μš©ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ©”λͺ¨λ¦¬ λ‚­λΉ„ 없이 ν•œ 번만 μ΄ˆκΈ°ν™”λ˜μ–΄ 클래슀 μ „μ²΄μ—μ„œ κ³΅μœ λ˜λŠ” 값듀을 λ‹€λ£° 수 μžˆμŠ΅λ‹ˆλ‹€.

단점

  • static 멀버가 λ§Žμ•„μ§ˆμˆ˜λ‘ 클래슀의 μ˜μ‘΄μ„±μ΄ 높아지고, λ³΅μž‘λ„κ°€ 증가할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ‚˜ λ©”μ†Œλ“œλ₯Ό μ°Έμ‘°ν•  수 μ—†μ–΄, 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ νŠΉμ„±μ„ μ œν•œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • thread-safeν•˜μ§€ μ•Šμ„ 수 μžˆμœΌλ―€λ‘œ, synchronized μ˜ˆμ•½μ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ 동기화 μž‘μ—…μ΄ ν•„μš”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

정적(static) λ©€λ²„μ˜ μ‚¬μš©μ€ νŽΈλ¦¬ν•¨κ³Ό νš¨μœ¨μ„±μ„ μ œκ³΅ν•˜μ§€λ§Œ, 객체 지ν–₯적인 ν”„λ‘œκ·Έλž˜λ°μ˜ 원칙을 μœ„λ°°ν•  μˆ˜λ„ μžˆμœΌλ―€λ‘œ μ μ ˆν•œ μƒν™©μ—μ„œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. μœ ν‹Έλ¦¬ν‹° λ©”μ†Œλ“œμ™€ μƒμˆ˜, νŒ©ν† λ¦¬ λ©”μ†Œλ“œ 등에 적극 ν™œμš©ν•˜μ—¬ μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ λ†’μ΄λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

λŒ“κΈ€