객체를 정의할 때 필요없는 부분을 생략하고 객체의 속성 중에서 중요한 부분을 중점으로 두어 간단하게 설계를 있도록 만들어주는 것 ➡ 토대 제공
추상 클래스는 객체로 생성할 수 없고 상속하는 역할로만 사용
추상 클래스를 사용하는 이유 ?
- 클래스들에서 공통적으로 사용되는 변수나 함수를 추출해서 추상 클래스로 만들어서 사용
ex) 자식 클래스의 Rogue, Warrior, Wizard는 공통된 변수를 갖고 공통된 함수를 사용하기에 부모 클래스 Character 정의
- 부모 클래스를 abstract로 지정하면 추상 클래스가 된다
- 추상 함수는 선언만 해두고 정의는 자식 클래스들에서 재정의
abstract class Character
{
protected int health;
protected int attack;
protected float defense;
public void Stats()
{
Console.WriteLine("health : " + health);
Console.WriteLine("defense : " + defense);
Console.WriteLine("attack : " + attack);
}
// 추상 메소드 선언만 함 (정의는 하지 않음)
public abstract void Skill();
}
ex) 자식 클래스 Rogue, Warrior, Wizard 중 하나의 클래스만 예를 들어봄
- Wizard는 Character에 상속되어 있음
- Wizard 자삭 클래스에서 추상함수 Skill( )을 재정의
internal class Wizard : Character
{
public Wizard()
{
health = 75;
attack = 10;
defense = 1;
}
public override void Skill()
{
Console.WriteLine("Magic Attack");
}
}
- 추상 클래스는 객체로 생성할 수 없기 때문에 Character 타입의 다른 클래스 객체를 생성
- character 참조타입으로 추상함수를 호출하면 생성된 객체의 함수가 호출된다
- ❗ 하지만, character.Stats( ) 함수의 경우 추상함수가 아니기 때문에, 일반적인 Character 클래스의 함수가 호출된다
Character character = null;
character = new Wizard();
character.Skill();
character.Stats();
결과값 :
ex) namespace UnrealEngine
using UnrealEngine;
namespace UnrealEngine
{
public class Broadcast
{
public void Send()
{
Console.WriteLine("Send Message");
}
}
}
Broadcast broadcast = new Broadcast();
broadcast.Send();
결과값 :
ex) 위에서 선언한 UnrealEngine 네임 스페이스 외에 UnityEngine namespace 선언
namespace UnityEngine
{
public class Broadcast
{
public void Send()
{
Console.WriteLine("Send Message");
}
}
}
Random random = new Random();
int value = random.Next(0, 3);
Console.WriteLine(value);
1 ~ 30까지의 랜덤한 숫자를 컴퓨터가 뽑고 플레이어가 숫자를 입력하여 맞추는 방식
health는 5개이고 다 사라지거나 정답을 맞출 경우 게임 종료
Random rand = new Random();
int computer = rand.Next(1, 31);
int health = 5;
int answer = 0;
while(health > 0)
{
Console.Write("Computer가 가지고 있는 값 : ");
answer = int.Parse(Console.ReadLine());
if(computer > answer)
{
Console.WriteLine("Computer가 가지고 있는 값보다 작습니다.");
health--;
}
else if(computer < answer)
{
Console.WriteLine("Computer가 가지고 있는 값보다 큽니다.");
health--;
}
else
{
Console.WriteLine("게임에서 승리하였습니다.");
break;
}
Console.WriteLine();
}
if(health <= 0)
{
Console.WriteLine("게임에서 패배하였습니다.");
}
전처리기 중 region & endregion을 다뤄보자
➡ 가독성 좋게 동일한 기능이나 주제로 묶는 것. 접어둘 수 있다.
#region
void Animation()
{
Play();
}
void Animation2()
{
Play();
}
#endregion
오류가 발생할 수 있는 경우, 임의의 예외 처리를 할 수 있다.
try{로직} catch{오류가 발생하면 대신 실행 할 로직}
int a = 5;
int b = 0;
try
{
print(a/b); // 0으로 나누게 되면 오류가 뜬다.
}
catch
{
Debug.Log("0으로 나눠서 오류가 발생하기 때문에 실행합니다.");
}
finally
{
Debug.Log("오류 발생 여부에 상관없이 마지막에 출력되는 것");
}