namespace ASD
{
interface IMethod
{
void Attack(string monsterName, int playerDmg)
void Defend(string monsterName, int playerDmg)
....
}
}
이런식으로 사용하게 된다.
인터페이스는 객체지향의 꽃(?)이라 한다.. 고수일수록 잘 다뤄야한다!
- 인터페이스는
메서드, 이벤트, 인덱서, 프로퍼티
만 가질 수 있다- 무조건 접근제한자는
public
으로 고정- 인터페이스는 자신을 상속받는 자식클래스에
오버라이딩을 강제
- 자식 클래스에서 구현할 메서드는 모두
public접근제한자
로 작성- 인터페이스내에서는
구현이 불가
- 인터페이스를 인스턴스화 할순 없지만, 상속받는 자식클래스는 인스턴스화 가능
여러개의 인터페이스 상속가능 (다중상속 가능)
- 불문율로 인터페이스 이름 첫글자는
I
로 시작
ex.interface ILogger
,interface INamer
...
namespace Test
{
interface ITimer
{
void TimeRightNow(string message);
}
class Time : ITimer
{
public void TimeRightNow(string message)
{
Console.WriteLine($"{System.DateTime.Now}, {message}");
}
}
class MainClass
{
static ITimer timer = new Time();
public static void Main()
{
timer.TimeRightNow(Console.ReadLine());
}
}
}
이런식으로 자식클래스에서 강제를 할때 사용!
추상클래스와 인터페이스의 차이는 뭘까??
추상클래스와 메서드도 마찬가지로 자식클래스에서 구현을 강제하는것이 맞다... 다른점을 찾아보자!
분류 | interface | Abstract Class |
---|---|---|
접근 지정자 | 함수에 대한 지정자를 가질수 없고 기본적으로 public이다 | 추상메서드를 제외한 함수에 대한 접근지정자를 가질 수 있다 |
구현 | 구현 불가, 서명만 가능 | 구현 제공 가능 |
속도 | interface 가 상대적으로 느림 | abtract 가 상대적으로 빠름 |
인스턴스화 | 추상적이며 인스턴스화 불가 | 인스턴스화 불가 |
필드 | 가질 수 없다 | 필드와 상수 정의 가능 |
메소드 | 추상메소드만 존재 | 비추상 메서드 존재 가능 |
가장큰 이점은 역시 다중상속이다.
인터페이스는 행동을 요구하고
추상클래스는 개념을 요구한다는 느낌으로 전 받아들여요인터페이스는 필드가 없고
추상클래스는 필드도 존재할 수 있기 때문이죠
Enum 은 여러개의 상수를 하나의 컨테이너에서 관리하기 위해 사용하는 자료형
enum의 사용이유중 가장 중요한건 자동완성 기능이다.
우리가 관리해야할 것들이 많다면, 우리 머리로 일일히 기억하기 어렵기때문에 사용을 적극 권장한다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test
{
class MainClass
{
enum ANIMALINZOO
{
TIGER,
LION,
PANDA,
RABBIT,
FOX
}
public static void Main()
{
Console.WriteLine((int)ANIMALINZOO.FOX);
}
}
}
이렇게 배열처럼 몇번째 값인지 접근할 수 있게 된다.
index번호로 접근가능~
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test
{
class MainClass
{
enum ANIMALINZOO
{
TIGER = 10,
LION,
PANDA,
RABBIT,
FOX
}
public static void Main()
{
Console.WriteLine((int)ANIMALINZOO.FOX);
}
}
}
이러면 자동으로 첫번째 인덱스 값이 10으로 설정되어, FOX의 인덱스는 14가 된다
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Test
{
class MainClass
{
enum ANIMALINZOO
{
TIGER = 10,
LION,
PANDA,
RABBIT = 123897,
FOX
}
public static void Main()
{
Console.WriteLine((int)ANIMALINZOO.FOX);
}
}
}
이렇게 인덱스는 자유롭게 변경가능