728x90
이전 포스팅에선 추상클래스와 인터페이스 각각을 정리했다. 하지만 공부를 할수록 그럼 왜 따로 구분한거지? 라는 의문으로 정리가 안되 각각의 특징을 비교하여 정리를 하려고 한다.
+ 오늘 튜터님께서 진행해주시던 부분이 운이 좋게 인터페이스와 추상클래스를 설명해주시는 강의라 이해한 부분을 추가적으로 정리하려고한다. 각각의 이론에 대해 이해는 됐었지만 도대체 언제 어떻게 사용하는건데..?를 조금이나마 이해한 것 같다.
이전에 정리한 인터페이스와 추상 클래스의 포스팅이다.
🔷인터페이스와 추상클래스 비교
인터페이스 | 추상클래스 | |
느낌..? | 설계도, 청사진 | 복제 |
키워드 | 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();
}
}
⭐ 인터페이스와 추상클래스의 느낌이 비슷해서 두 개를 구분하는데 각각 다른 역할을 하는 것이고, 오히려 클래스와 추상클래스를 비교하여 이해하는 것이 좋다.! ⭐
참고사이트
728x90
'Unity > 개념 공부' 카테고리의 다른 글
[ 내일배움캠프 ] TIL.16 - Console 팀 프로젝트 마무리 (0) | 2024.05.07 |
---|---|
[ 내일배움캠프 ] TIL.15 - 델리게이트 (0) | 2024.05.03 |
[ 내일배움캠프 ] TIL.14 - 추상 클래스와 추상 메서드 ( Abstract ) (0) | 2024.05.02 |
[ 내일배움캠프 ] WIL.10 - C# 기초 & 개인 프로젝트 진행 (0) | 2024.04.26 |
[ 내일배움캠프 ] TIL.10 - Newtonsoft.Json (1) | 2024.04.26 |