ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 내일배움캠프 10일차 TIL - 인터페이스, enum, 학습법 특강
    TIL/C# 2024. 4. 26. 19:34

     

    [학습목표]

    C# 4주차 강의를 시청하고 인터페이스와 열거형 enum에 대해 학습한다. 그리고 학습법 특강을 청취한다.

    [학습내용]

    오늘은 C# 4주차 강의를 시청했다. 인터페이스과 열거형에 관한 내용은 다른 언어에서 자세하게 다룬 적이 없기 때문에 이번 기회에 확실하게 잡아놓고 가기로 했다.

     

    인터페이스

    인터페이스를 다루기 전에 먼저 다중 상속에 관련된 문제에 대해 다뤄야했다.

    C#에서 다중 상속을 사용하지 않는 이유
    1. 다이아몬드 문제: 한 클래스가 두 개 이상의 부모 클래스로부터 상속받는 경우 같은 이름의 멤버의 처리에 대한 문제
    2. 설계의 복잡성 증가
    3. 이름 충돌의 문제와 해결의 어려움
    4. 설계의 일관성과 단순성 유지

     

    기본적으로 C#은 클래스에서 다중 상속을 지원하지 않는다고 한다. 하지만 이걸 인터페이스로 해결할 수 있다고 한다.

    인터페이스(Interface)란 클래스가 구현해야 하는 멤버를 정의한 것이다.
    인터페이스는 클래스의 일종이 아니며, 클래스에 대한 제약조건을 명시하는 것이다. 클래스는 인터페이스를 구현할 때 반드시 그 인터페이스의 모든 멤버를 구현해야 한다.
    인터페이스는 다중상속을 지원한다.

     

    쉽게 말하자면 '클래스를 이렇게 구현하세요 쓸 때 편하게'라는 느낌이다. 다만 추상 클래스와 다른 점은 마지막 줄처럼 다중 상속이 가능하다는 점이다. 그리고 추상 클래스는 그 안에서 일부 구현이 가능하지만, 인터페이스는 불가능하다고 한다.

     

    열거형 enum

    열거형은 서로 관련된 상수들의 집합을 정의할 때 사용된다. 열거형의 상수는 정수 값으로 지정된다.

     

    사실 열거형에 대한 개념 정도는 알고 있었다. 하지만 enum이라는 키워드 자체는 처음 들어봤다. 코딩을 하다 보면 방향을 지정할 때 1~4의 상수를 Left나 Top 등의 이름을 붙여놓은 걸 볼 수 있었다. 이런 게 enum이 아니었을까 추측해본다.

     

    열거형을 사용하는 이유
    1. 가독성
    2. 자기 문서화(Self-documenting)
    3. switch문과의 호환성

     

    첫 번째와 두 번째는 거의 비슷한 말인 거 같다. 상수로 두면 어떤 기능을 할지 한눈에 파악이 어려우니까, 이름을 붙여놔서 가독성을 높이는 것이다.

    그리고 세 번째는 조금 중요한 말인 거 같다. switch문을 다루다보면 여러 입력값들을 처리해야 하는 상황이 올텐데, 이 때 입력값으로 들어온 상수를 이름으로 대치해서 다룬다면 아주 큰 도움을 받을 수 있을 것이다.

    enum MyEnum
    {
    	Value1 = 10,
    	Value2,		// 이전 값의 +1인 11로 자동할당된다.
        	Value3 = 20
    }

     

     

     

    학습법 특강

    캠프를 진행하면서, 혹은 앞으로 쭉 어떻게 공부를 진행하면 좋을지 튜터님의 노하우를 들을 수 있는 시간이었다.

    학습을 GET - SOLVE - SET 의 단계로 진행하여 지식을 자신의 것으로 만들라는 것이었다.

     

    먼저 GET, 계속 시도하고 발굴하라는 것이었다. 다른 사람이 쓴 오픈 소스를 들여다보거나, IDE에서 사용할 수 있는 코드 추천 목록을 한 번씩 들여다보는 시간을 가져보는 것이 좋다고 한다.

     

    SOLVE는 GET에서 생긴 문제를 해결하는 것인데, 에러 로그들을 직접 읽어보고 구글링을 해보거나, 정 안 되면 요즘은 AI 기술도 좋으니 ChatGPT 등에 물어보라는 것이었다. 다만 지금 단계에서는 하나의 문제에 대해 고민하는 시간을 1시간 이상 잡는 것은 비추천한다고 한다.

     

    SET은 이렇게 얻은 지식을 내 것으로 만드는 일이다. 내가 지금 작성하고 있는 TIL 등이 그 예시다.

     

     

    개인 과제 피드백

    기능에 따라 클래스를 구분하고 파일을 나눠서 관리한 점이 좋습니다.

    기능에 적합한 자료구조를 선택하고 활용한 점이 좋습니다.

    Scene 클래스를 상속시켜 다양한 Scene을 관리해준 점이 매우 뛰어납니다.

    Inventory나 Shop의 경우에는 구매/판매/장착 등의 기능을 구현할 때 반환값이 있는 메소드를 이용해 구현해보세요. 추후 switch-case 문의 경우에는 Enum을 사용하면 가독성이 더 좋아집니다.

    깃 컨벤션과 리드미 작성을 더 신경 써주세요.

     

    [회고]

    오늘은 CS 전공 지식을 공부하느라 C# 공부에 많은 시간을 투자하지 못했다. 다음주부터는 팀 프로젝트가 진행될 예정이라고 한다. 그래서 주말을 활용해야하나 고민 중이다.