Pink Transparent Star

Unity/개념 공부

[ 내일배움캠프 ] TIL.14 - 추상 클래스와 인터페이스 비교하기

채유나 2024. 5. 2. 11:22
728x90

 

이전 포스팅에선 추상클래스와 인터페이스 각각을 정리했다. 하지만 공부를 할수록 그럼 왜 따로 구분한거지? 라는 의문으로 정리가 안되 각각의 특징을 비교하여 정리를 하려고 한다.

 

 + 오늘 튜터님께서 진행해주시던 부분이 운이 좋게 인터페이스와 추상클래스를 설명해주시는 강의라 이해한 부분을 추가적으로 정리하려고한다. 각각의 이론에 대해 이해는 됐었지만 도대체 언제 어떻게 사용하는건데..?를 조금이나마 이해한 것 같다.

 

이전에 정리한 인터페이스와 추상 클래스의 포스팅이다.

 

[ 내일배움캠프 ] TIL.13 - 인터페이스 ( Interface )

🔷 인터페이스란 ?클래스와 비슷하게 메서드, 속성, 이벤트, 인덱서 등을 갖지만 인터페이스는 이를 직접 구현하지 않고 단지 정의만 갖는 것을 의미한다. 하지만 인터페이스는 클래스의 일종

o-joyuna.tistory.com

 

[ 내일배움캠프 ] TIL.14 - 추상 클래스와 추상 메서드 ( Abstract )

추상화?추상이란, 사물이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것공통적인 성질이나 본질을 추출하여 파악하는것이 추상화의 핵심이다. 🔷 추상 클래스( ab

o-joyuna.tistory.com

 

🔷인터페이스와 추상클래스 비교

  인터페이스 추상클래스
느낌..? 설계도, 청사진 복제
키워드 interface abstract
상속 여부 다중 상속 가능 다중 상속이 불가능
기본 접근 제한자 public  private
메서드 구현 x
파생클래스에서 구현해야함

구현 o
인터페이스로 업캐스팅해야 접근 가능
구현 x
파생클래스에서 override 키워드를 붙여 정의해야함

구현 o
일반적인 클래스의 구현이 있는 메소드
동작 구현 객체의 같은 동작을 보장하기 위함 추상 클래스를 상속받아 기능을 이용, 확장하기 위함
구현 추상 메소드만 가능하다 일반메소드랑 추상메소드 모두 가능하다
선언 생성자와 일반 변수를 가질수 없다 생성자와 일반 변수를 모두 가질 수 있다
상속받는 클래스  반드시 인터페이스에 있는 메서드를 모두 구현해야함 메서드의 부분적인 구현 가능

 

🔷 인터페이스와 추상클래스는 어떤 상황에 사용하는 것인가?

인터페이스 : 구체적인 구현을 각각의 클래스에서 담당할 때 사용

추상클래스 : 구체적으로 구현하는 부분과 그렇지 않는 부분을 나눌 때 사용

 

public interface AttackPhysical
{
    public void Physical();
}

public interface AttackMagic
{
    public void Magic();
}

public abstract class Weapon
{
    public void Attack()
    {
        BattleMethod();
    }
    public abstract void BattleMethod();
}

public class MagicWand : Weapon, AttackMagic
{
    public override void BattleMethod()
    {
        Console.WriteLine(" 마법을 시전합니다.");
    }

    public void Magic()
    {
        Console.Write("얼음속성의");
    }
}

public class Sword : Weapon, AttackPhysical
{
    public override void BattleMethod()
    {
        Console.WriteLine(" 광폭화 합니다.");
    }

    public void Physical()
    {
        Console.Write("근육을 키워");
    }
}

public class Gauntlet : Weapon, AttackMagic, AttackPhysical
{
    public override void BattleMethod()
    {
        Console.WriteLine("시전합니다.");
    }

    public void Magic()
    {
        Console.Write("인피니티 스톤을 모아 ");
    }

    public void Physical()
    {
        Console.Write("힘을 키우고 ");
    }
}

public class Program
{        
    static void Main()
    {
        MagicWand magicWand = new MagicWand();
        Sword sword = new Sword();
        Gauntlet gauntlet = new Gauntlet();

        magicWand.Magic();
        magicWand.Attack();

        sword.Physical();
        sword.Attack();

        gauntlet.Magic();
        gauntlet.Physical();
        gauntlet.Attack();
    }


}

 

 

⭐ 인터페이스와 추상클래스의 느낌이 비슷해서 두 개를 구분하는데 각각 다른 역할을 하는 것이고, 오히려 클래스와 추상클래스를 비교하여 이해하는 것이 좋다.! ⭐

 

참고사이트

 

C#프로그래밍 15 : 인터페이스, 인터페이스와 추상클래스의 비교

특징 / 선언 / 인터페이스르 상속하는 파생클래스(상속, 프로퍼티) / 다중 인터페이스 상속 / 인터페이스의 다형성 / 빈 인터페이스의 상속 / 콜백 / 인터페이스를 상속하는 인터페이스 / 기본구현

velog.io

 

728x90