김김김의 게임개발
  • C# #15 인터페이스, 열거형, 예외 처리, 값형과 참조형
    2023년 08월 24일 20시 34분 02초에 업로드 된 글입니다.
    작성자: noun06

    인터페이스(Interface)

    • 클래스 혹은 구조체간의 공통된 기능을 공유하여 공통된 동작을 정의하는데 사용된다. 
    • 다중 상속이 지원되지 않는 C#에서 인터페이스는 다중 상속을 지원하여 더 다양한 동작을 조합하고 수행한다.
    • 클래스와 인터페이스 간에 느슨한 결합을 형성하여 유연한 설계를 가능하게 한다. (느슨한 결합은 각 클래스와 객체들 간의 의존성을 최소화하여 수정, 변경의 영향을 최소화하는 개념이다.)

     

    • 인터페이스 정의하기
    public interface IMovable // 대문자 I를 인터페이스명 앞에 붙힌다
    {
        void Move(int x, int y); // 이동 메서드 선언
    }

     

    • 인터페이스를 구현하는 클래스 생성하기
    public class Player : IMovable
    {
        public void Move(int x, int y)
        {
            // 플레이어의 이동 구현
        }
    }
    
    public class Enemy : IMovable
    {
        public void Move(int x, int y)
        {
            // 적의 이동 구현
        }
    }

     

    • 인터페이스를 사용하여 객체 이동하기
    IMovable movableObject1 = new Player();
    IMovable movableObject2 = new Enemy();
    
    movableObject1.Move(5, 0); // 플레이어 이동
    movableObject2.Move(1, 9); // 적 이동

     

    열거형(Enums)

    • 서로 관련이 있는 명명된 상수들의 집합을 정의하는 데 사용된다. 코드의 가독성을 향상시키며 스위치 문과의 호환성이 좋다. 열거형의 각 상수는 주로 값으로 지정되지만 열거형 값 사이의 형변환을 지원한다. 

     

    • 열거형 정의 및 상수 값 정의
    enum MyEnum
    {
        Value1 = 1,
        Value2,
        Value3
    }

     

    • 열거형 사용
    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;
    }

     

    예외처리(Exception Handling)

    • 프로그램이 실행 중에 발생하는 예상치 못한 상황 또는 오류를 처리하는 메커니즘.
    • try: 예외가 발생할 수 있는 코드.
    • catch: 예외가 발생한 경우 해당 예외를 처리하기 위한 코드.
    • finally: 예외 발생 여부와 관계없이 반드시 실행되는 코드.
    • throw: 사용자 정의 예외처리, 특정 상황에서 예외를 강제로 발생시키는 코드.
    try
    {
        // 예외가 발생할 수 있는 코드
        int result = Divide(10, 0);
        Console.WriteLine("Result: " + result);
    }
    catch (DivideByZeroException ex)
    {
        // 예외 처리 코드
        Console.WriteLine("Error: " + ex.Message);
    }
    finally
    {
        // 항상 실행되는 코드 (예: 리소스 정리)
        Console.WriteLine("Cleanup");
    }
    
    int Divide(int a, int b)
    {
        if (b == 0)
            throw new DivideByZeroException("Cannot divide by zero.");
        return a / b;
    }

     

    값형(Value Type)과 참조형(Referecne Type)

    • 값형은 변수에 값을 직접 저장하며 데이터를 스택 메모리에 저장한다. 
    • 변수가 실제 데이터를 보유하고 있으며, 해당 변수를 다른 변수에 할당하거나 전달 할 때는 값이 복사된다.
    • int, float, char, bool, struct 등

     

    • 참조형은 변수가 실제 값 대신에 데이터에 대한 참조(메모리 주소)를 저장한다. 실제 데이터는 힙 메모리에 저장된다.
    • 변수가 실제 데이터를 가리키는 참조를 갖고 있으며, 해당 변수를 할당하거나 전달 할 때는 참조가 복사된다. 
    • class, array, interface, delegate, string 등

    • 참조형 변수는 여러 변수가 동일한 데이터를 가리킬 수 있어 복잡한 객체와 메모리 사용에 대한 유연성을 제공함.
    • 값형 변수는 값의 복사로 인한 성능상의 이점을 가지고 있음.

     

    박싱과 언박싱(Boxing and Unboxing)

    • 박싱은 값형을 참조형으로 변환하는 과정을 의미함. 값형 변수가 힙 메모리에 새로운 객체로 래핑되고, 해당 객체의 주소가 참조형 변수에 저장됨. 
    int value = 42;
    object boxedValue = value; // 값형을 박싱하여 object 형식으로 변환

     

    • 언박싱은 참조형을 값형으로 변환하는 과정을 의미함. 박싱된 객체에서 실제 값을 추출하여 값형 변수에 할당하며, 이때 박싱된 객체의 형식이 반드시 일치해야 함.
    object boxedValue = 42;
    int unboxedValue = (int)boxedValue; // 참조형을 언박싱하여 값형으로 변환

     

     

    'C#' 카테고리의 다른 글

    C# #17 TextRPG - 턴제 전투  (0) 2023.08.25
    C# #16 델리게이트, 람다, LINQ, 고급 자료형 및 기능  (0) 2023.08.24
    C# #14 블랙잭  (0) 2023.08.23
    C# #13 알고리즘 기초 3  (0) 2023.08.23
    C# #12 TextRPG 4  (0) 2023.08.22
    댓글