πŸ’» Programming Language/C#

16. μΆ”μƒν΄λž˜μŠ€(Abstract Class) 이해

S.Honey 2022. 4. 6. 09:28
namespace AbstractClassEx
{
    abstract class MyAbstractClass
    {
        protected void protectedMethod()
        {
            Console.WriteLine("μΆ”μƒν΄λž˜μŠ€μ˜ protected method");
        }

        public void publicMethod()
        {
            Console.WriteLine("μΆ”μƒν΄λž˜μŠ€μ˜ public method");
        }

        public abstract void abstractMethod();
        // μΈν„°νŽ˜μ΄μŠ€μ—μ„œλŠ” μΆ”μƒλ©”μ†Œλ“œκ°€ 기본적으둜 public이기 λ•Œλ¬Έμ— λ°˜ν™˜νƒ€μž…λ§Œ μ‚¬μš©ν–ˆμ§€λ§Œ 
        // μΆ”μƒν΄λž˜μŠ€μ—μ„œλŠ” μΆ”μƒλ©”μ†Œλ“œμ— μ œν•œμž 및 abstract ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄μ€˜μ•Ό ν•œλ‹€.
    }

    class Child : MyAbstractClass
    {
        public override void abstractMethod() 
            // μ΄λ•Œ override ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μΆ”μƒν΄λž˜μŠ€ λ‚΄ μΆ”μƒλ©”μ†Œλ“œλ₯Ό μž¬μ •μ˜ν•œλ‹€.
        {
            Console.WriteLine("μΆ”μƒν΄λž˜μŠ€μ˜ AbstractMethod 호좜");
            protectedMethod();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyAbstractClass ma = new Child();
            ma.abstractMethod();
            ma.publicMethod();
        }
    }
}
Output

μΆ”μƒν΄λž˜μŠ€μ˜ AbstractMethod 호좜
μΆ”μƒν΄λž˜μŠ€μ˜ protected method
μΆ”μƒν΄λž˜μŠ€μ˜ public method

  • μΆ”μƒν΄λž˜μŠ€ : μΈν„°νŽ˜μ΄μŠ€μ™€ λΉ„μŠ·ν•˜λ‹€ ν•˜μ§€λ§Œ, μΆ”μƒν΄λž˜μŠ€λŠ” κ΅¬ν˜„(λͺΈν†΅)λΆ€λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€. = κ΅¬ν˜„λΆ€λ₯Ό μ•ˆκ°€μ§ˆ μˆ˜λ„ μžˆλ‹€.

  • μΆ”μƒν΄λž˜μŠ€λŠ” κ΅¬ν˜„μ„ κ°€μ§ˆ 수 μžˆμ§€λ§Œ μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€ 수 μ—†λ‹€.

  • μ‚¬μš©ν•˜λŠ” ν•œμ •μžλŠ” abstract와 classλ₯Ό μ‚¬μš©ν•œλ‹€.

μΆ”μƒν΄λž˜μŠ€ μ„ μ–Έ ν˜•μ‹

 abstract class 클래슀λͺ… 
{
   ...
    // ν΄λž˜μŠ€μ™€ 동일
}

  • 좔상 ν΄λž˜μŠ€λŠ” ν΄λž˜μŠ€μ™€ 달리 μΆ”μƒλ©”μ†Œλ“œλ₯Ό κ°€μ§€κ³  μžˆλ‹€.

  • 좔상 ν΄λž˜μŠ€λŠ” λͺ¨λ“  멀버에 μ ‘κ·Ό μ œν•œμžλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ„ 경우 private으둜 μ„€μ •λœλ‹€.
    • 단, μΆ”μƒλ©”μ†Œλ“œλŠ” μ•ˆλ¨. κ΅¬ν˜„λΆ€κ°€ μžˆλŠ” λ©”μ†Œλ“œμ— ν•œμ •ν•˜μ—¬ private으둜 μ„€μ •λ˜λŠ”κ²ƒ.

  • 좔상 λ©”μ†Œλ“œλ₯Ό μ§€μ •ν•  λ•Œ abstract ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

μΆ”μƒλ©”μ†Œλ“œμ˜ ν˜•μ‹

    public abstract void A();

  • 좔상 λ©”μ†Œλ“œλŠ” private을 μ‚¬μš©ν•  수 μ—†λ‹€ => μ™ΈλΆ€μ—μ„œ κ΅¬ν˜„ν•˜μ—¬ μ‚¬μš©ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμž„
    • λ”°λΌμ„œ public, protected, internal, protected internal 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•΄μ•Όν•œλ‹€.

  • override ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μΆ”μƒν΄λž˜μŠ€ λ‚΄ μΆ”μƒλ©”μ†Œλ“œλ₯Ό μž¬μ •μ˜ν•œλ‹€.