인터페이스, 프로퍼티

doyeon kim·2025년 1월 20일

C#

목록 보기
4/13

추상 클래스

동일한 메서드를 상황에 따라 다른 방식으로 사용하고 싶을 때
-> 부모 클래스에서는 정의만 하고 상속받는 자식 클래스에서는 재정의하여 원하는 대로 사용한다

예제 : 면적 구하기

// 추상메서드는 반드시 추상 클래스 안에 위치해야 한다.
    abstract class Figure 
    {
        // 넓이를 구하는 함수를 만들고 싶은데 원이나 삼각형, 사각형에 따라 공식이 다름
        // -> 일단 정의만 하고 상황에 맞게 재정의하면서 사용하자!!
        abstract public Double Area();

    }
    
// --------------------------------------------------------------------

// Figure 클래스를 상속받아서 내부의 Area 메서드를 활용
 class Rectangle : Figure 
    {
        
        public double Width{ get; set; }
        public double Height { get; set; }

        public Rectangle(double width, double height)
        {
            this.Width = width;
            this.Height = height;
        }

        // Figure 클래스를 상속받는다면 해당 클래스의 추상 메서드인 Area 를 반드시 구현해야된다.
        public override double Area()
        {
            return Width * Height;
        }
    }




//----------------------------------------------------------------

class Circle : Figure
    {
        public double Diameter{ get; set; }

        public Circle(double diameter)
        {
            this.Diameter = diameter;
        }

        public override double Area()
        {
            return ((Diameter / 2) * (Diameter / 2)) * 3.141592;
        }
    }
    
    출력
    사각형의 면적은 200
	원의 면적은 78.5398

같은 Area 메서드를 상황에 맞게(원,사각형) 재정의해서 사용한다

유의점

  • 추상 메서드가 포함된 클래스는 반드시 추상 클래스여야 한다.(Figure 클래스)

  • 추상 클래스를 상속받은 경우 반드시 해당 클래스 내부의 추상 메서드를 구현하여야 한다.
    (Circle, Rectangle 클래스)


인터페이스

 interface IClassType
    {
        void Attack1();
        void TestAttack();
    }
    
class Parent1
    {
        public void Attack() { }
    }
    
class Child : Parent1, IClassType
    {
        public void TestAttack()
        {
            Console.WriteLine("TestAttack");
        }

        public void Attack1()
        {
            Console.WriteLine("Attack1");
        }
		// 인터페이스에서 정의한 TestAttack, Attack1 재정의
    }

클래스는 다중 상속이 불가능하지만 인터페이스의 경우 다중 상속 가능

선언 부분만 작성해놓고 상속받는 클래스에서 재정의해서 사용
상속받는 클래스에서 인터페이스의 메서드를 반드시 재정의해야됨


프로퍼티(property)

public int m_Def = 0;

public int Def
{
 	get
    {
    	return m_Def;
    }
    
    set
    {
    	m_Def = value
    }
}

public int HP{get; set;} //이렇게도 사용 가능

 static void Main(string[] args)
        {

            Parent2 p2 = new Parent2();

            p2.Def = 10;  
            int val = p2.Def;

            Console.WriteLine(val);
            Console.ReadKey();
        }

p2.Def = 10; => m_Def 를 set 하는 함수처럼 사용
int val = p2.Def; => m_Def 를 get 하는 변수처럼 사용

0개의 댓글