본문 바로가기

내일배움캠프_TIL

8월 24일 TIL

인터페이스와 열거형


다중상속을 사용하지 않는 이유

  1. 다이아몬드 문제:
    한 클래스가 두 개 이상의 부모 클래스로부터 동일한 멤버를 상속받을 때 같은 이름의 멤버가 있을 경우 어떤 부모클래스의 멤버인지 애매해짐
  2. 설계의 복잡성 증가:
    다중상속 시 클래스간의 관계가 복잡해지며 클래스간의 상속 관계 파악이 어려워지고 코드의 유지보수가 어려워짐
  3. 이름 충돌과 충돌 해결의 어려움:
    여러개의 클래스로부터 상속받은 멤버들이 충돌할 수 있고 이를 해결하기 위해서는 이름을 재정의하거나 부모클래스를 지정해야하는데 그렇게 되면 코드가 복잡해지고 오류 가능성도 증가한다

이러한 이유로 C#에서는 단일 상속만 가능하도록 제한하여 코드의 일관성과 단순성을 유지한다

만약 다중상속이  필요하다면 인터페이스를 이용하여 유사하게 구현할 수 있다

 

인터페이스를 사용하는 이유

  1. 코드의 재사용성:
    다른 클래스에서 해당 인터페이스를 구현하여 동일한 기능을 공유할 수 있다
    다양한 클래스가 인터페이스로 동일한 동작을 수행하므로 코드 재사용성 향상
  2. 다중 상속 제공:
    C#은 다중상속을 지원하지 않지만 인터페이스를 사용하면 다중상속이 가능하다
    클래스가 여러가지 인터페이스를 구현하도록 해서 여러개의 기능을 조합할 수 있다
  3. 유연한 설계:
    클래스와 인터페이스 간에 느슨한 결합 형성 가능
    구현부와 제시부를 분리해 클래스에서는 인터페이스를 구현하기만 하면 되므로 유연하고 확장 가능한 설계가 가능해진다

인터페이스

인터페이스 특징

  • 클래스가 구현해야하는 멤버를 정의하는 것
  • 클래스의 일종이 아니고 클래스에 대한 제약조건
  • 인터페이스를 상속받은 클래스는 해당 인터페이스의 멤버를 모두 구현해야함
  • 다중상속 지원

인터페이스 구현

  • 인터페이스 및 멤버 정의하기
    interface 키워드 사용, 이름은 I로 시작
interface IMyInterface
{
    void Method1();
    int Method2(string str);
}
  • 인터페이스 구현하기
    클래스에서 상속받은 후 멤버 구현
class MyClass : IMyInterface
{
    public void Method1()
    {
        // 구현
    }

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

인터페이스 vs 추상클래스

인터페이스 장단점

  • 인터페이스는 멤버를 정의만 하고 구현하지 않는다
  • 다중상속을 지원하며 여러 클래스가 하나의 인터페이스를 구현할 수 있다
  • 클래스간의 결합도를 낮추고 코드를 유연하게 만든다
  • 코드의 재사용성과 확장성을 향상시킨다
  • 클래스에서 인터페이스의 멤버를 모두 구현해야하므로 작업량이 증가할 수 있다

추상클래스 장단점

  • 추상클래스는 일부 동작의 구현을 가지고, 추상 메서드를 포함할 수 있다
  • 단일 상속만 가능하고 다른 클래스와 함께 상속계층구조를 형성할 수 있다
  • 코드의 중복을 방지하고 확장성을 제공한다
  • 하위 클래스에서 구현하지 않아도 될 경우 유용
  • 다중상속이 불가능하고 유연성이 제한된다

열거형

사용하는 이유

  1. 가독성:
    연관된 상수의 이름을 지정할 수 있다. 코드의 가독성이 증가하고 상수로 사용할 때 실수로 다른 값을 할당하는 것을 방지한다
  2. 자기문서화:
    의미있는 이름을 사용해 상수를 명명하므로 상수의 의미를 명확하게 한다
  3. 스위치 문과의 호환성:
    스위치 문에서 다양한 상수값에 대한 케이스를 쉽게 작성할 수 있다

특징

  • 서로 관련된 상수들의 집합을 정의한다
  • 정수 값으로 지정한다

열겨형 구현

  • 열거형 정의
    enum 키워드 사용, 0부터 순서대로 값이 할당된다
enum MyEnum
{
    Value1,
    Value2,
    Value3
}
  • 열거형 사용
MyEnum myEnum = MyEnum.Value1;
  • 열거형 상수 값 지정
    상수 값을 직접 할당 할 수 있다. 지정된 요소부터 1씩 증가하며 자동으로 상수 값이 할당된다
enum MyEnum
{
    Value1 = 10,
    Value2,
    Value3 = 20
}
  • 열거형 형변환
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;
}

 

 

 

'내일배움캠프_TIL' 카테고리의 다른 글

8월 28일 TIL  (0) 2023.08.28
8월 25일 TIL  (0) 2023.08.25
8월 23일 TIL  (0) 2023.08.23
8월 21일 TIL  (0) 2023.08.22
8월 18일 TIL  (0) 2023.08.18