관리 메뉴

Algo μ“°μž

06. μ ‘κ·Όμ œν•œμž(Access Modifier) λ³Έλ¬Έ

πŸ’» Programming Language/C#

06. μ ‘κ·Όμ œν•œμž(Access Modifier)

S.Honey 2022. 4. 6. 09:16
namespace AccessModifierEx
{
    class Demo
    {
        // public μ ‘κ·Ό μ œν•œμž
        public static void public_method() { }

        // private μ ‘κ·Ό μ œν•œμž
        private static void private_method() { }

        // protected μ ‘κ·Ό μ œν•œμž
        protected static void protected_method() { }

        // internal μ ‘κ·Ό μ œν•œμž
        internal static void internal_method() { }

        // protected internal μ ‘κ·Ό μ œν•œμž
        protected internal static void protected_internal_method() { }

        // private protected μ ‘κ·Ό μ œν•œμž
        private protected static void private_protected_method() { }

        public Demo()
        {
            // 클래슀 자체 λ‚΄λΆ€μ—μ„œ μ ‘κ·Ό

            Demo.public_method();
            Demo.private_method();
            Demo.protected_method();
            Demo.internal_method();
            Demo.protected_internal_method();
            Demo.private_protected_method();

            // 자체 클래슀 λ‚΄λΆ€μ—μ„œλŠ” μ ‘κ·Όν•˜λŠ”λ°μ— λ¬Έμ œκ°€ μ—†μŒ.
        }
    }

    class Demo2 : Demo
    {
        public Demo2()
        {
            // 상속받은 μžμ‹(νŒŒμƒ) ν΄λž˜μŠ€μ—μ„œ μ ‘κ·Ό

            Demo.public_method();
            Demo.protected_method();
            Demo.internal_method();
            Demo.protected_internal_method();
            Demo.private_protected_method();

            // 이 클래슀 νŒŒμΌμ€ 같은 μ»΄νŒŒμΌλŸ¬μ—μ„œ μ–΄μ…ˆλΈ”λ¦¬λ‘œ λ§Œλ“€μ–΄μ§€κΈ°μ— 총 5개 λ©”μ†Œλ“œ μ ‘κ·Όκ°€λŠ₯
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // 상속받지 μ•Šμ€ μ™ΈλΆ€ν΄λž˜μŠ€μ—μ„œ μ ‘κ·Ό
            Demo.public_method();
            Demo.internal_method();
            Demo.protected_internal_method();

            // Main 문도 κ²°κ΅­ 같은 μ–΄μ…ˆλΈ”λ¦¬λ‚΄μ— μ‘΄μž¬ν•¨.
            // λ”°λΌμ„œ, public을 ν¬ν•¨ν•œ 총 3개 λ©”μ†Œλ“œ μ ‘κ·Όκ°€λŠ₯
        }
    }
}
  • μ ‘κ·Όμ œν•œμžλ‚˜ ν•œμ •μžλΌκ³  ν‘œν˜„ν•˜κΈ°λ„ ν•œλ‹€.
  • 영문 ν‘œκΈ°λ‘œ Access Modifier 라고 ν•œλ‹€.
  • μ ‘κ·Όμ œν•œμžλŠ” κ³΅κ°œμˆ˜μ€€μ„ μ •ν•˜μ—¬ 접근을 μ œν•œν•˜λŠ” ν‚€μ›Œλ“œλ₯Ό λ§ν•œλ‹€.
  • μ’…λ₯˜λ‘œλŠ” public, private, protected, internal, protected internal, private protected κ°€ μžˆλ‹€.
  • public, private, protectedλ₯Ό 주둜 μ‚¬μš©

β˜…β˜…β˜… 클래슀 멀버에 ν•œμ •μžκ°€ μ„€μ •λ˜μ§€ μ•Šμ•˜μ„ κ²½μš°μ—λŠ” 무쑰건 private으둜 μžλ™ μ§€μ •λœλ‹€.


  • public :
    • 클래슀의 λ‚΄λΆ€ λ˜λŠ” μ™ΈλΆ€ λͺ¨λ“  κ³³μ—μ„œ μ ‘κ·Όν•  수 μžˆλŠ” μ§€μ •μž

  • private :

    • μΊ‘μŠν™”ν• λ•Œ 주둜 μ‚¬μš©ν•˜λ©° 클래슀 μ™ΈλΆ€μ—μ„œλŠ” μ ‘κ·Όν•  수 없도둝 ν•˜λŠ” μ§€μ •μž
    • 즉, λ‚΄λΆ€μ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•˜λ„λ‘ ν•˜λŠ” μ§€μ •μž
    • λ˜ν•œ 상속받은 μžμ‹(νŒŒμƒ) ν΄λž˜μŠ€μ—μ„œλ„ μ ‘κ·Όν•  수 μ—†λ‹€.

  • protected :

    • 클래슀 μ™ΈλΆ€μ—μ„œλŠ” μ ‘κ·Όν•  수 μ—†λŠ” μ§€μ •μž
    • 단, 상속받은 μžμ‹(νŒŒμƒ) ν΄λž˜μŠ€μ—μ„œλŠ” μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•˜λŠ” μ§€μ •μž.

  • internal :
    • 동일 μ–΄μ…ˆλΈ”λ¦¬μ— μžˆλŠ” μ½”λ“œμ—μ„œλ§Œ public으둜 μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•˜λŠ” μ§€μ •μž.
    • λ‹€λ₯Έ μ–΄μ…ˆλΈ”λ¦¬μ— μžˆλŠ” μ½”λ“œμ—μ„œλŠ” privateκ³Ό 같은 μ ‘κ·Ό μˆ˜μ€€μ„ 가지기에 접근이 μ•ˆλ¨.
    • λ˜ν•œ internal ν‚€μ›Œλ“œκ°€ 같은 namespace λ‚΄μ—μ„œλ§Œ μ ‘κ·Όκ°€λŠ₯ν•˜λ‹€λŠ” 말은 ν‹€λ¦°λ§μž„.

  • protected internal :
    • 동일 μ–΄μ…ˆλΈ”λ¦¬μ— μžˆλŠ” μ½”λ“œμ—μ„œλ§Œ protected둜 μ ‘κ·Όν•  수 μžˆλŠ” μ§€μ •μž

  • private protected :
    • 동일 μ–΄μ…ˆλΈ”λ¦¬μ— μžˆλŠ” ν΄λž˜μŠ€μ—μ„œ 상속받은 클래슀 λ‚΄λΆ€μ—μ„œλ§Œ 접근이 κ°€λŠ₯