728x90
반응형
- 주제
1. 인터페이스
2. Enums (열거형)
3. 예외 처리(try-catch & finally)
- 공부내용
1. 인터페이스란?
클래스가 구현해야 하는 기능이나 속성을 정의해 놓은 것이다.
클래스에서 해당 인터페이스를 구현하면, 인터페이스 내의 기능을 가져다 쓸 수 있다.
다중 상속을 지원하여, 클래스가 여러 인터페이스를 구현함으로써 여러 개의 기능을 조합하여 사용이 가능하다.
1-1. 인터페이스 구현(정의 -> 구현할 클래스 생성 -> 사용)
클래스가 인터페이스를 구현할 경우, 모든 인터페이스 멤버(메서드, 프로퍼티, 이벤트[event])를 구현해야 한다.
//인터페이스 정의
public interface IMovable
{
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); // 적 이동
1-2. 다중 상속 구현
클래스가 더 다양한 동작을 수행할 수 있게 해준다.
// 인터페이스 1
public interface IItemPickable
{
void PickUp(); //1.아이템을 줍는 기능
}
// 인터페이스 2
public interface IDroppable
{
void Drop(); //2.아이템을 버리는 기능
}
// 두개의 인터페이스를 구현하는 아이템 클래스
public class Item : IItemPickable, IDroppable
{
public string Name { get; set; } //자동프로퍼티로 Name 필드 생성
public void PickUp()
{
Console.WriteLine("아이템 {0}을 주웠습니다.", Name);
}
public void Drop()
{
Console.WriteLine("아이템 {0}을 버렸습니다.", Name);
}
}
// 플레이어 클래스
public class Player
{ //인터페이스를 참조하여 사용
public void InteractWithItem(IItemPickable item) //Item item이 아니라 IItemPickable item
{
item.PickUp();
}
public void DropItem(IDroppable item)
{
item.Drop();
}
}
// 게임 실행
static void Main()
{
Player player = new Player();
Item item = new Item { Name = "Sword" };
// 아이템 주울 수 있음
player.InteractWithItem(item);
// 아이템 버릴 수 있음
player.DropItem(item);
}
2. Enums(열거형)이란?
서로 관련된 상수(정수 값으로 지정 됨)들의 집합을 정의할 때 사용된다.
열거형을 사용하면 가독성이 향상되고,
의미 있는 이름을 사용하여 상수를 정할 수 있다.
스위치 문과 함께 사용될 때 가장 효과적이다.
사용 사례) 게임 상태(메인, 플레이, 정지, 종료), 방향(위, 아래, 좌, 우), 아이템 등급(노말, 레어, 에픽)
2-1. 열거형 구현
//열거형 정의
enum DaysOfWeek
{
Sunday, ---> 0이 이미 지정되어 있다.
Monday, ---> 1 (1씩 상승)
Tuesday, ---> 2
Wednesday,
Thursday,
Friday,
Saturday
}
//열거형 사용
class Program
{
static void Main(string[] args)
{
DaysOfWeek day = DaysOfWeek.Monday; ----> 사용
Console.WriteLine("Today is " + day);
}
}
//상수값 지정
public enum Month
{
January = 1, ---> 1로 정수값 지정
February, ---> 2 (이전 항목의 정수값을 지정하면, 자동으로 이전 정수값 +1)
March, ---> 3
April,
May,
June,
July,
August,
September,
October,
November,
December
}
//형변환 개념
int intvalue = (int)Month.January // 열거형 값 -> 정수로 변환
Month enumvalue = (Month)January; // 정수 -> 열거형으로 변환
//실행
static void ProcessMonth(int month)
{ //열거형 값을 정수로 변환
if (month >= (int)Month.January && month <= (int)Month.December)
{
Month selectedMonth = (Month)month;
Console.WriteLine("선택한 월은 {0}입니다.", selectedMonth);
// 월에 따른 처리 로직 추가
}
else
{
Console.WriteLine("올바른 월을 입력해주세요.");
}
}
//열거형 & 스위치문 사용
switch(enumValue)
{
case Month.January:
// January에 대한 처리
break;
case Month.February:
// February에 대한 처리
break;
case Month.March:
// March에 대한 처리
break;
default:
// 기본 처리
break;
}
3. 예외 처리 (try-catch & finally)
예외 처리를 통해 오류 상황을 처리하고, 프로그램의 계속 실행할 수 있다.
3-1. 예외 처리 구현
try
{
// 예외가 발생할 수 있는 코드
}
catch (ExceptionType1 ex)
{
// ExceptionType1에 해당하는 예외 처리
}
catch (ExceptionType2 ex)
{
// ExceptionType2에 해당하는 예외 처리
}
finally --> 생략가능
{
// 예외 발생 여부와 상관없이 항상 실행되는 코드(정리 작업 또는 리소스 해제)
}
3-1. 사용자 정의 예외 처리
catch 블록에서 사용자 정의 예외 타입을 명시하여 예외를 처리하고,
예외에 대한 적절한 처리 로직 작성이 가능하다.
Tip. 가능한 구체적인 예외 클래스를 사용
// 플레이어 이동
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);
// 예외에 대한 추가 처리
}
728x90
반응형
'🌐 유니티 (Unity)' 카테고리의 다른 글
Day 17 - C#(Func & Action, Where문) (0) | 2024.05.02 |
---|---|
Day 16 - C# (참조형, 박싱, 람다, 델리게이트) (0) | 2024.05.01 |
Day 14 - 커밋 컨벤션 설정 & README.md 작성 (0) | 2024.04.29 |
Day 13 - C# (제너릭, out & ref 키워드) (0) | 2024.04.28 |
Day 12 - 텍스트 게임 만들기(오류 해결 과정3) (0) | 2024.04.27 |