[C#]TIL (20) | 2023.08.21

kjg5370·2023년 8월 21일
0

TIL

목록 보기
20/91
post-thumbnail

들어가기 앞서

개인과제에 너무 집중한 나머지 TIL을 쓰면서 강의 내용을 정리하는 걸 뒷전으로
미뤄버렸습니다. 개인과제가 생각보다 제 마음대로 안되서 시간을 너무 많이 써버렸지만
조금이라도 정리해보겠습니다.

오늘 배운 것

인터페이스와 열거형

  • 인터페이스 ( Interface )
    클래스가 구현해야 하는 멤버들을 정의하는 것.
    클래스와 비슷하게 메서드, 속성 및 이벤트를 선언하는데 사용되지만, 인터페이스는 실제 구현을 포함하지 않음.
    인터페이스를 구현하는 클래스에서 해당 멤버들을 구현해야 함.

    • C#에서 인터페이스를 정의하는 방법

       interface IMyInterface
       {
          // 메서드 선언
          void MyMethod();
      
          // 속성 선언
          int MyProperty { get; set; }
      
          // 이벤트 선언
          event EventHandler MyEvent;
       }
    • 인터페이스를 구현하는 클래스

      class MyClass : IMyInterface
      {
          // 인터페이스에서 선언한 메서드 구현
          public void MyMethod()
          {
              // 구현 내용
          }
      
          // 인터페이스에서 선언한 속성 구현
          public int MyProperty { get; set; }
      
          // 인터페이스에서 선언한 이벤트 구현
          public event EventHandler MyEvent;
      }
    • 인터페이스의 장단점

      장점

      • 다중 상속의 제약 극복 : 클래스는 하나의 부모 클래스만 상속할 수 있기 때문에 다중 상속이 제한됨.
        인터페이스를 통해 클래스가 여러 개의 인터페이스를 구현할 수 있어 다중 상속과 비슷한 효과를 얻을 수 있음.

      • 유연한 구조 : 인터페이스를 사용하면 클래스의 내부 구현과는 독립적으로 코드를 작성할 수 있음.
        다른 클래스와의 결합도가 낮아지며, 코드를 변경하거나 확장할 때 다른 클래스에 영향을 덜 주는 유연한 구조를 만들 수 있음.

      • 표준화된 동작 보장 : 인터페이스를 사용하면 다양한 클래스가 같은 인터페이스를 구현할 수 있으므로, 클래스 간에 일관된 동작을 보장할 수 있음.

      • 모듈화 및 테스트 용이성 : 인터페이스를 사용하면 각 클래스의 역할과 책임이 명확히 나뉘므로, 코드의 모듈화가 쉬워짐.
        또한 테스트를 수행할 때 모의 객체(Mocking)를 사용하여 인터페이스의 메서드 동작을 흉내내어 테스트하기 용이.

      단점

      • 추가 작업 필요 : 인터페이스를 사용하면 클래스에서 인터페이스의 메서드 및 멤버를 모두 구현해야 함.

      • 복잡성 증가 : 인터페이스를 지나치게 많이 사용하면 클래스와 인터페이스 사이의 관계가 복잡해질 수 있음.

      • 런타임 오버헤드 : 인터페이스는 런타임에 메서드를 호출할 때 해당 메서드의 실제 구현을 찾아야 하는 오버헤드가 발생할 수 있음. 클래스의 직접적인 메서드 호출보다는 약간의 성능 저하를 가져올 수 있음.

  • 다중 상속
    한 클래스가 여러 개의 부모 클래스로부터 상속을 받는 것을 의미.

    • 문제점

      1. 다이아몬드 문제 (Diamond Problem) : 다중 상속을 허용하면 하나의 클래스가 두 개 이상의 클래스로부터 상속받을 때, 공통 부모 클래스의 메서드나 속성을 어떤 순서로 호출해야 할지 모호성이 발생.

      2. 이중 정의 (Multiple Definitions): 다중 상속을 통해 같은 메서드나 속성을 둘 이상의 부모 클래스로부터 상속받을 때, 충돌이 발생하여 어떤 버전의 메서드를 사용해야 할지 결정하기 어려워짐.

      3. 의존성 증가: 다중 상속을 사용하면 클래스 간의 복잡한 상속 구조가 형성될 수 있으며, 이로 인해 코드의 유지보수와 디버깅이 어려워질 수 있음.

      4. 클래스 설계의 복잡성과 모호성: 다중 상속을 사용하면 클래스 간의 상속 관계가 복잡해지므로 클래스의 설계와 구현이 어려워지며, 어떤 클래스를 기반으로 확장하는 것이 적절한지 모호해질 수 있음.

  • 열거형
    C# 프로그래밍 언어에서 사용되는 데이터 형식 중 하나로, 연관된 상수 값을 그룹화하고 이름을 부여하는 데 사용.

    • 정의

      enum Days //  기본적으로 첫 번째 멤버는 0으로 시작
      {
          Sunday,
          Monday,
          Tuesday,
          Wednesday,
          Thursday,
          Friday,
          Saturday = 8 // 명시적으로 할당
      }
    • 사용

      Days today = Days.Wednesday;
      if (today == Days.Wednesday)
      {
          Console.WriteLine("Today is Wednesday.");
      }
    • 사용하는 이유

      1. 가독성 : 열거형을 사용하면 일련의 연관된 상수들을 명명 할 수 있음. 이를 통해 코드의 가독성이 향상되고, 상수를 사용할 때 실수로 잘못된 값을 할당하는 것을 방지 가능.
      2. 자기 문서화 : 열거형은 의미 있는 이름을 사용하여 상수를 명명하므로, 코드의 가독성이 향상되며, 상수의 의미를 명확하게 설명할 수 있음.
      3. 스위치 문과의 호환성 : 열거형은 스위치 문과 함께 사용될 때 유용. 열거형을 사용하면 스위치 문에서 다양한 상수 값에 대한 분기를 쉽게 작성할 수 있음.

기억 할 것 & 진행 사항

  • 인터페이스를 통해 다중 상속을 흉내 내거나, 클래스 간의 결합도를 줄이고 유연성을 높일 수 있음.
    • 클래스는 한 번에 여러 인터페이스를 구현할 수 있음
      class MyClass : IMyInterface, IOtherInterface
      {
          // 구현
      }
  • 열거형 특징
    • 열거형은 서로 관련된 상수들의 집합을 정의할 때 사용.
    • 열거형의 각 상수는 정수 값으로 지정.

현재 진행 사항

  • 체크리스트
    • 개발 환경 설정
    • 기본 코드 구조
    • 변수와 자료형
    • 연산자 문자열 처리
    • 조건문과 반복문
    • 배열과 컬렉션
    • 매서드와 구조체
    • 클래스와 객체
    • 상속과 다형성
    • 고급 문법 및 기능
    • 인터페이스와 열거형 -> 여기까지 정리중
    • 예외 처리 및 값형과 참조형
    • 델리게이트, 람다 및 LINQ
    • 고급 자료형 및 기능
    • 알고리즘 기초
    • 정렬 알고리즘
    • 탐색 알고리즘
    • 고급 알고리즘
    • 문제해결 전략과 실전 연습 -> 현재 여기까지 강의 수강

내일 할 일

  • 하루 계획
    • 오전
      • 09:00 ~ 09:30 : 팀원 간 인사 및 하루 계획 작성
      • 09:30 ~ 14:00 : 개인 과제
      • 12시-1시: 점심식사
    • 집중 코딩
      • 14:00 ~ 18:00 : 개인 과제
    • 저녁
      • 6시-7시: 저녁식사
      • 19:00 ~ 20:00 : 지급 받은 강의 복습
      • 20:00 ~ 20:30 : 6조 회의
      • 20:30 ~ 21:00 : TIL,마무리 회고 진행
profile
학생입니다

0개의 댓글