240103 - 개인과제 2일차

유시아·2024년 1월 3일
0

개인과제

목록 보기
6/16
post-custom-banner

오늘은 개인과제 대신 강의를 밀기로 했다.
개념 위주로 정리해보았다.

다중상속x >> 인터페이스ooo

다중상속은 왜 안쓰는가?

1. 다이아몬드 문제(Diamond Problem)
2. 설계의 복잡성 증가
3. 이름 충돌과 충돌 해결의 어려움
4. 설계의 일관성과 단순성 유지

인터페이스는 왜 쓰는가?
1. 코드의 재사용성
2. 다중 상속 제공
** 3. 유연한 설계

인터페이스
클래스가 구현해야 하는 멤버들을 정의(클래스의 종류x) >> 클래스에 대한 제약 조건을 명시
인터페이스 예시 코드↓↓

interface IMyInterface
{
    void Method1();
    int Method2(string str);
}
================================
class MyClass : IMyInterface
{
    public void Method1()
    {
        // 구현
    }

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

인터페이스를 활용한 아이템 사용 구현 예시 코드↓↓

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

// 아이템 클래스
public class Item : IUsable
{
    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);
}

열거형
서로 관련된 상수들의 집합을 정의
각 상수는 정수값으로
열거형 게임 예시 코드↓↓

// 게임 상태
enum GameState
{
    MainMenu,
    Playing,
    Paused,
    GameOver
}

// 방향
enum Direction
{
    Up,
    Down,
    Left,
    Right
}

// 아이템 등급
enum ItemRarity
{
    Common,
    Uncommon,
    Rare,
    Epic
}

예외처리
catch 우선순위 >> 위에서부터 순서대로!
상속관계면 >> 상위 예외 타입의 catch 블록 먼저

finally
예외 발생 여부와 상관없이 항상 실행
try-catch 뒤에 작성, 생략가능

예외처리 예시 코드↓↓

// 플레이어 이동
try
{
    // 플레이어 이동 코드
    if (IsPlayerCollidingWithWall())
    {
        throw new CollisionException("플레이어가 벽에 충돌했습니다!");
    }
}
catch (CollisionException ex)
{
    // 충돌 예외 처리
    Debug.Log(ex.Message);
    // 예외에 대한 추가 처리
}


// 리소스 로딩
try
{
    // 리소스 로딩 코드
    LoadResource("image.png");
}
catch (ResourceNotFoundException ex)
{
    // 리소스가 없는 경우 예외 처리
    Debug.Log(ex.Message);
    // 예외에 대한 추가 처리
}
catch (ResourceLoadException ex)
{
    // 리소스 로딩 중 오류가 발생한 경우 예외 처리
    Debug.Log(ex.Message);
    // 예외에 대한 추가 처리
}


// 게임 상태 전이
try
{
    // 상태 전이 코드
    if (currentGameState != GameState.Playing)
    {
        throw new InvalidStateException("게임이 실행 중이 아닙니다!");
    }
    // 게임 상태 전이 실행
}
catch (InvalidStateException ex)
{
    // 상태 예외 처리
    Debug.Log(ex.Message);
    // 예외에 대한 추가 처리
}
profile
패션컴공탈출기
post-custom-banner

0개의 댓글