Amenable
Amenable's Blog
Amenable
  • λΆ„λ₯˜ 전체보기 (189)
    • πŸ“‚ JAVA (87)
      • μ΄νŽ™ν‹°λΈŒ μžλ°” (65)
      • μ£Όμš” κ°œλ… (22)
    • πŸ“‚ 개발 μ„œμ  (22)
      • μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έ (1)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (2)
      • 클린 μ½”λ“œ (8)
      • ν•¨κ»˜ 자라기 (1)
      • 그림으둜 λ°°μš°λŠ” HTTP&Network Basic (10)
    • πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • κ°œλ… (8)
      • λ¬Έμ œν’€μ΄ (0)
    • πŸ“‚ λ„€νŠΈμ›Œν¬ (14)
      • κ°œλ… (6)
      • 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리 (8)
    • πŸ“‚ μŠ€ν”„λ§ (13)
      • κΈ°λ³Έ κ°œλ… (13)
    • πŸ“‚ WEB (5)
    • πŸ“‚ 자료ꡬ쑰 (12)
      • κ°œλ… (2)
      • μ •λ ¬ (8)
      • 트리 (2)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜ (10)
      • μ΅œμ†Œμ‹ μž₯트리 (2)
      • μ΅œλ‹¨ 경둜 (2)
      • λ¬Έμžμ—΄ (2)
      • ETC (4)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ (4)
      • BOJ_λ°±μ€€ (4)
    • πŸ“‚ ν”„λ‘œκ·Έλž˜λ° (3)
    • πŸ“‚ DevOps (2)
      • 배포 (2)
    • πŸ“‚ ν›„κΈ° (8)
      • μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€) (4)
      • 2023λ…„ (3)
      • 2024λ…„ (1)
    • πŸ“‚ 회고 (1)
      • 2023λ…„ (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸš€ GitHub

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Amenable

Amenable's Blog

멀버 ν΄λž˜μŠ€λŠ” λ˜λ„λ‘ static으둜 λ§Œλ“€λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ24)]
πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”

멀버 ν΄λž˜μŠ€λŠ” λ˜λ„λ‘ static으둜 λ§Œλ“€λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ24)]

2023. 5. 8. 22:25

  쀑첩 클래슀(nested class)λž€ λ‹€λ₯Έ 클래슀 μ•ˆμ— μ •μ˜λœ 클래슀λ₯Ό λ§ν•œλ‹€. 쀑첩 ν΄λž˜μŠ€λŠ” μžμ‹ μ„ 감싼 λ°”κΉ₯ ν΄λž˜μŠ€μ—μ„œλ§Œ μ“°μ—¬μ•Ό ν•˜λ©°, κ·Έ μ™Έμ˜ μ“°μž„μƒˆκ°€ μžˆλ‹€λ©΄ ν†±λ ˆλ²¨ 클래슀둜 λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.

  쀑첩 클래슀의 μ’…λ₯˜λŠ” μ•„λž˜μ˜ 4κ°€μ§€κ°€ μžˆλ‹€.

  1. 정적 λ©€λ²„ ν΄λž˜μŠ€
  2. (비정적) λ©€λ²„ ν΄λž˜μŠ€
  3. 읡λͺ… ν΄λž˜μŠ€
  4. μ§€μ—­ ν΄λž˜μŠ€

  '정적 멀버 클래슀'λ₯Ό μ œμ™Έν•˜κ³ λŠ” λͺ¨λ‘ λ‚΄λΆ€ 클래슀(inner class)에 ν•΄λ‹Ήν•œλ‹€. '정적 λ©€λ²„ ν΄λž˜μŠ€'와 '비정적 λ©€λ²„ ν΄λž˜μŠ€'λŠ” λ©€λ²„ ν΄λž˜μŠ€μ— ν•΄λ‹Ήν•œλ‹€.

  이번 글을 톡해 4κ°€μ§€ 쀑첩 ν΄λž˜μŠ€μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ³ , μ™œ 멀버 ν΄λž˜μŠ€λŠ” λ˜λ„λ‘ static으둜 λ§Œλ“€μ–΄μ•Ό ν•˜λŠ”μ§€ μ•Œμ•„λ³΄κ³ μž ν•œλ‹€.

 

1. 정적 멀버 클래슀 🧰

  정적 멀버 ν΄λž˜μŠ€λŠ” λ‹€λ₯Έ 클래슀 μ•ˆμ— μ„ μ–Έλ˜κ³ , λ°”κΉ₯ 클래슀의 private 멀버에도 μ ‘κ·Όν•  수 μžˆλ‹€λŠ” 점만 μ œμ™Έν•˜κ³ λŠ” 일반 ν΄λž˜μŠ€μ™€ λ˜‘κ°™λ‹€.

public class OuterClass {
    private static int number = 10;

    static private class InnerClass {
        void doSomething() {
            System.out.println(number);
        }
    }
}

  정적 멀버 ν΄λž˜μŠ€λŠ” ν”νžˆ λ°”κΉ₯ ν΄λž˜μŠ€μ™€ ν•¨κ»˜ 쓰일 λ•Œλ§Œ μœ μš©ν•œ public λ„μš°λ―Έ 클래슀둜 쓰인닀.

 

2. 비정적 멀버 클래슀 πŸ”©

public class OuterClass {

    private int number = 10;

    void printNumber() {
        InnerClass innerClass = new InnerClass();
    }

    private class InnerClass {
        void doSomething() {
            System.out.println(number);

            // μ •κ·œν™”λœ this μ‚¬μš©
            OuterClass.this.printNumber();
        }
    }
}

  비정적 멀버 클래슀의 μΈμŠ€ν„΄μŠ€λŠ” λ°”κΉ₯ 클래슀의 μΈμŠ€ν„΄μŠ€μ™€ μ•”λ¬΅μ μœΌλ‘œ μ—°κ²°λœλ‹€. κ·Έλž˜μ„œ 비정적 멀버 클래슀의 μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ—μ„œ μ •κ·œν™”λœ thisλ₯Ό μ‚¬μš©ν•΄ λ°”κΉ₯ μΈμŠ€ν„΄μŠ€μ˜ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κ±°λ‚˜ λ°”κΉ₯ μΈμŠ€ν„΄μŠ€μ˜ μ°Έμ‘°λ₯Ό κ°€μ Έμ˜¬ 수 μžˆλ‹€.

  κ·Έλ ‡κΈ° λ•Œλ¬Έμ— κ°œλ…μƒ 쀑첩 클래슀의 μΈμŠ€ν„΄μŠ€κ°€ λ°”κΉ₯ μΈμŠ€ν„΄μŠ€μ™€ λ…λ¦½μ μœΌλ‘œ μ‘΄μž¬ν•  수 μžˆλ‹€λ©΄ 정적 멀버 클래슀둜 λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.

  비정적 멀버 ν΄λž˜μŠ€λŠ” λ°”κΉ₯ 클래슀의 μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œμ—μ„œ 비정적 멀버 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  λ•Œ μžλ™μœΌλ‘œ λ§Œλ“€μ–΄μ§€λŠ” 게 λ³΄ν†΅μ΄μ§€λ§Œ, λ“œλ¬Όκ²ŒλŠ” 직접 λ°”κΉ₯ μΈμŠ€ν„΄μŠ€μ˜ 클래슀.new MemberClass(args)λ₯Ό ν˜ΈμΆœν•΄ μˆ˜λ™μœΌλ‘œ λ§Œλ“€κΈ°λ„ ν•œλ‹€. 이 κ΄€κ³„λŠ” 비정적 멀버 클래슀의 μΈμŠ€ν„΄μŠ€ μ•ˆμ— λ§Œλ“€μ–΄μ Έ λ©”λͺ¨λ¦¬ 곡간을 μ°¨μ§€ν•˜λ©°, 생성 μ‹œκ°„λ„ 더 κ±Έλ¦°λ‹€.

public static void main(String[] args) {
    // 직접 λ°”κΉ₯ μΈμŠ€ν„΄μŠ€μ˜ 클래슀.new MemberClass(args)λ₯Ό ν˜ΈμΆœν•΄ μˆ˜λ™μœΌλ‘œ λ§Œλ“œλŠ” 경우
    InnerClass innerClass = new OuterClass().new InnerClass();
    innerClass.doSomething();
}

  멀버 ν΄λž˜μŠ€μ—μ„œ λ°”κΉ₯ μΈμŠ€ν„΄μŠ€μ— μ ‘κ·Όν•  일이 μ—†λ‹€λ©΄ 무쑰건 static을 λΆ™μ—¬μ„œ 정적 멀버 클래슀둜 λ§Œλ“€μž. static을 μƒλž΅ν•˜λ©΄ λ°”κΉ₯ μΈμŠ€ν„΄μŠ€λ‘œμ˜ μˆ¨μ€ μ™ΈλΆ€ μ°Έμ‘°λ₯Ό κ°–κ²Œ λœλ‹€. 이 μ°Έμ‘°λ₯Ό μ €μž₯ν•˜λ €λ©΄ μ‹œκ°„κ³Ό 곡간이 μ†ŒλΉ„λœλ‹€. 더 λ‚˜μ•„κ°€μ„œλŠ” κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ΄ λ°”κΉ₯ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μˆ˜κ±°ν•˜μ§€ λͺ»ν•˜λŠ” λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ 생길 수 μžˆλ‹€. (μ•„μ΄ν…œ 7)

  비정적 멀버 ν΄λž˜μŠ€λŠ” μ–΄λŒ‘ν„°λ₯Ό μ •μ˜ν•  λ•Œ 자주 μ‚¬μš©λœλ‹€. μ–΄λ–€ ν΄λž˜μŠ€μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό κ°μ‹Έ λ§ˆμΉ˜ λ‹€λ₯Έ ν΄λž˜μŠ€μ˜ μΈμŠ€ν„΄μŠ€μ²˜λŸΌ λ³΄μ΄κ²Œ ν•˜λŠ” λ·°λ‘œ μ‚¬μš©ν•˜λŠ” κ²ƒμ΄λ‹€.

public class MySet<E> extends AbstractSet<E> {

    @Override
    public Iterator<E> iterator() {
        return new MyIterator();
    }

    @Override
    public int size() {
        return 0;
    }

    private class MyIterator implements Iterator<E> {
        @Override
        public boolean hasNext() {
            return false;
        }

        @Override
        public E next() {
            return null;
        }
    }
}

 

3. 읡λͺ… 클래슀 🧲

static List<Integer> intArrayAsList(int[] a) {
    Objects.requireNonNull(a);

    return new AbstractList<>(){
        @Override
        public Integer get(int i){
            return a[i];
        }

        @Override public Integer set(int i , Integer val){
            int oldVal = a[i];
            a[i] = val; // μ˜€ν† μ–Έλ°•μ‹±
            return oldVal; // μ˜€ν† λ°•μ‹±
        }

        @Override
        public int size() {
            return a.length;
        }
    };
}

  읡λͺ… ν΄λž˜μŠ€λŠ” λ°”κΉ₯ 클래슀의 멀버도 μ•„λ‹ˆλ‹€. 멀버와 달리, μ“°μ΄λŠ” μ‹œμ μ— μ„ μ–Έκ³Ό λ™μ‹œμ— μΈμŠ€ν„΄μŠ€κ°€ λ§Œλ“€μ–΄μ§„λ‹€. 그리고 였직 비정적인 λ¬Έλ§₯μ—μ„œ μ‚¬μš©λ  λ•Œλ§Œ λ°”κΉ₯ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•  수 μžˆλ‹€.

  μžλ°”μ—μ„œ λžŒλ‹€λ₯Ό μ§€μ›ν•˜κΈ° 전에 μ¦‰μ„μ—μ„œ μž‘μ€ ν•¨μˆ˜ κ°μ²΄λ‚˜ 처리 객체λ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©ν–ˆλ‹€. 이것은 ν˜„μž¬ λžŒλ‹€μ—κ²Œ 자리λ₯Ό λ¬Όλ €μ£Όμ—ˆλ‹€.

  읡λͺ… 클래슀의 정적 νŒ©ν„°λ¦¬ λ©”μ„œλ“œλ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©ν•  μˆ˜λ„ μžˆλ‹€.

 

4. μ§€μ—­ 클래슀 πŸ”§

  μ§€κΈˆκΉŒμ§€ μ‚΄νŽ΄λ³Έ 쀑첩 클래슀 μ€‘μ—μ„œ κ°€μž₯ λ“œλ¬Όκ²Œ μ‚¬μš©λœλ‹€.

public class MyClass {

    private int number = 10;

    void doSomething() {
        class LocalClass {
            private void printNumber() {
                System.out.println(number);
            }
        }
    }
}

 

  μ§€μ—­ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 곳이면 μ–΄λ””λ“  μ§€μ—­ 클래슀λ₯Ό μ •μ˜ν•΄ μ‚¬μš©ν•  수 μžˆλ‹€. 가독성을 μœ„ν•΄μ„œλŠ” μ§§κ²Œ μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

 

ν•΄λ‹Ή 글은 λ°±κΈ°μ„  λ‹˜μ˜ 'μ΄νŽ™ν‹°λΈŒ μžλ°” μ™„λ²½ 곡랡'을 μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

'πŸ“‚ JAVA > μ΄νŽ™ν‹°λΈŒ μžλ°”' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

둜 νƒ€μž…μ€ μ‚¬μš©ν•˜μ§€ 말라 - [5μž₯. μ œλ„€λ¦­(μ•„μ΄ν…œ26)]  (0) 2023.05.23
ν†±λ ˆλ²¨ ν΄λž˜μŠ€λŠ” ν•œ νŒŒμΌμ— ν•˜λ‚˜λ§Œ λ‹΄μœΌλΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ25)]  (0) 2023.05.08
νƒœκ·Έ 달린 ν΄λž˜μŠ€λ³΄λ‹€λŠ” 클래슀 계측ꡬ쑰λ₯Ό ν™œμš©ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ23)]  (1) 2023.05.08
μΈν„°νŽ˜μ΄μŠ€λŠ” νƒ€μž…μ„ μ •μ˜ν•˜λŠ” μš©λ„λ‘œλ§Œ μ‚¬μš©ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ22)]  (0) 2023.05.07
μΈν„°νŽ˜μ΄μŠ€λŠ” κ΅¬ν˜„ν•˜λŠ” μͺ½μ„ 생각해 μ„€κ³„ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ21)]  (1) 2023.05.07
    'πŸ“‚ JAVA/μ΄νŽ™ν‹°λΈŒ μžλ°”' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • 둜 νƒ€μž…μ€ μ‚¬μš©ν•˜μ§€ 말라 - [5μž₯. μ œλ„€λ¦­(μ•„μ΄ν…œ26)]
    • ν†±λ ˆλ²¨ ν΄λž˜μŠ€λŠ” ν•œ νŒŒμΌμ— ν•˜λ‚˜λ§Œ λ‹΄μœΌλΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ25)]
    • νƒœκ·Έ 달린 ν΄λž˜μŠ€λ³΄λ‹€λŠ” 클래슀 계측ꡬ쑰λ₯Ό ν™œμš©ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ23)]
    • μΈν„°νŽ˜μ΄μŠ€λŠ” νƒ€μž…μ„ μ •μ˜ν•˜λŠ” μš©λ„λ‘œλ§Œ μ‚¬μš©ν•˜λΌ - [4μž₯. ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€(μ•„μ΄ν…œ22)]
    Amenable
    Amenable
    CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

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