나 개발자 진짜 되냐?

[ C# 기본 문법 19 ] 인터페이스와 열거형 본문

C# 을 맛보았어요!/문법정리를 해보았어요!

[ C# 기본 문법 19 ] 인터페이스와 열거형

Snow Rabbit 2024. 9. 23. 20:13

 

 

인터페이스 와 열거형에 대해 알아보자!

 


 

🌟 인터페이스 🌟

 

클래스가 구현해야 하는 멤버들을 정의

 

클래스가 아니라, 제약 조건을 명시!

 

클래스가 인터페이스를 구현할 경우,

모든 인터페이스 멤버를 구현

 

인터페이스는 다중 상속을 지원

interface IMyInterface
{
    void Method1();
    int Method2(string str);
}

 

인터페이스

 

규칙 1

 

시작은 interface

 

 

규칙2

 

변수 이름 앞에 I 붙여주기

 

class MyClass : IMyInterface
{
    public void Method1()
    {
        // 구현
    }

    public int Method2(string str)
    {
        // 구현
        return 0;
    }
}

 

상속과 크게 다르지 않다.

 

인터페이스에 있던

모든 메서드를 다 쓰는 것이 중요하다!

 

선언할 땐 

똑같이

new를 사용해서 구현한다.

 

// 아이템을 사용할 수 있는 인터페이스
// 인터페이스 설정
public interface IUsable
{
    void Use();
}

// 아이템 클래스
public class Item : IUsable
//인터페이스를 써주었으니 use가 있어줘야한다.
{
	//get,set 배웠듯 중간다리 역할을 해주는 친구! + 필드 역할까지
    public string Name { get; set; }

    public void Use() // 인터페이스때문에 써야한다!
    { 
        Console.WriteLine("아이템 {0}을 사용했습니다.", Name);
    }
}

// 플레이어 클래스
public class Player
{
    public void UseItem(IUsable item) // 아이템에서 가져오는거지만
    //인터페이스로 맨 처음에 만들었기 때문에 인터페이스것을 가져와야 한다.
    //상속이라 별 차이없는거같지만 인터페이스에서 참조해서 가져오는 것
    {
        item.Use();
    }
}

// 게임 실행
static void Main()
{
    Player player = new Player();
    // {} 는 초기화 해준것!
    Item item = new Item { Name = "Health Potion" };
    player.UseItem(item);
}

 

예시문을 참고하며

인터페이스가 무엇인지

어떻게 선언하고 구현하는지 

익혀보자!!

 

 

중요한 것은

 

아이템을 우리는

인터페이스에서 만든 아이템

상속받아서 사용한 것

 

아이템의 종류가 다양하다면,

그 애들을 하나의 클래스로 만드는 것이 아니기 때문에

Iusable를 상속받아서 써주면

 

player.UseItem(item);

메서드를

가져와서 사용이 가능하다!

 

물체에게 하나의 동작을 심어주는 느낌이다.

 

 

상속 상속이라고 해서

추상클래스랑 헷갈리는 경우가 있는데

 

추상클래스와 인터페이스의 장단점을 정리했다.

 

 

인터페이스

 

 < 장점 >

 

추상적인 동작만 정의하고 구현을 가지지 않는다.

다중상속 가능 ( 클래스가 아니기 때문 )

여러 클래스가 동일한 인터페이스 구현 가능

코드 재사용 파워 가능

 

< 단점 >

 

인터페이스를 구현하는 클래스는

그 인터페이스 안에 있는 동작을 모두 해주어야 하기 때문에

작업량이 걱정

 

추상 클래스

 

 < 장점 >

 

 

일부동작의 구현, 추상 메서드를 포함 가능

단일상속만 가능

다른 클래스와 상속 가능

공통된 동작만 추상화,

하위 클래스에서 재정의 할 필요 없음

 

< 단점 >

 

다중상속 불가

누가 뭐래도 상속이기 때문에

유연성이나 약간의 제약이 있을 수 있음

 

 

상속을 받아서 동작 필요 : 추상 클래스

특정한 기능들의 호환성 : 인터페이스

 


🌟 열거형 🌟

일련의 연관된 상수들을 이름 지어주면서

코드의 가독성을 높여준다.

 

////////////열거형 정의//////////
enum MyEnum
{
    Value1, 	// 상수값 0
    Value2,	// 상수값 1
    Value3	// 상수값 2
}


////열거형 상수 값 지정////

enum MyEnum
{
    Value1 = 10, // 상수값 10
    Value2,		 // 상수값 11
    Value3 = 20  // 상수값 20
}

////////////열거형 사용//////////
MyEnum myEnum = MyEnum.Value1;

////////////열거형 형변환//////////
int intValue = (int)MyEnum.Value1;  // 열거형 값을 정수로 변환
MyEnum enumValue = (MyEnum)intValue;  // 정수를 열거형으로 변환

////스위치문과 함께 사용/////

switch(enumValue)
{
    case MyEnum.Value1:
        // Value1에 대한 처리
        break;
    case MyEnum.Value2:
        // Value2에 대한 처리
        break;
    case MyEnum.Value3:
        // Value3에 대한 처리
        break;
    default:
        // 기본 처리
        break;
}

 

좋은 예시를 가져왔다.

// 월 열거형
public enum Month
{
    January = 1,
    February,
    March,
    April,
    May,
    June,
    July,
    August,
    September,
    October,
    November,
    December
}

// 처리하는 함수
static void ProcessMonth(int month)
{
    if (month >= (int)Month.January && month <= (int)Month.December)
    {
        Month selectedMonth = (Month)month;
        Console.WriteLine("선택한 월은 {0}입니다.", selectedMonth);
        // 월에 따른 처리 로직 추가
    }
    else
    {
        Console.WriteLine("올바른 월을 입력해주세요.");
    }
}

// 실행 예제
static void Main()
{
    int userInput = 7; // 사용자 입력 예시
    ProcessMonth(userInput);
}

예시를 보면서

열거형은 특히 더 자세히 보도록 하자!\

 

중요하고 어려운건..

형변환인 거 같다.