[C#] Lec 07 - 인터페이스, 추상클래스
[C#] Lec 07 - 인터페이스, 추상클래스
인터페이스
- 인터페이스는 인스턴스를 가질 수 없으며 클래스에서 상속받아 사용함
- 인터페이스는 멤버로 메소드, 이벤트, 인덱서, 프로퍼티만을 가질 수 있음 (Field)를 가질 수 없음
- 접근 제한 한정자 (e.g. private, protected)를 가질 수 없고 모든 것이 public으로 선언됨
- 인터페이스를 상속한 클래스는 인터페이스에서 선언된 메소드를 반드시 구현해야 함
- 인터페이스 정의함 → 인터페이스로부터 파생될 클래스가 어떤 메소드를 구현해야하는지 정하고 약속할 수 있음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
namespace Test
{
class Program
{
static void Main(string[] args)
{
}
}
public interface IDog // 인터페이스의 이름앞에는 대문자 I
{
void Bark(); // 구현이 없다 : 선언부만 존재.
}
public interface IMammel
{
}
public class Dog : IDog, IMammel // 여러 개의 인터페이스를 상속받을 수 있음.
{
public string _name;
public string _color;
public Dog(string name, string color)
{
this._name = name;
this._color = color;
}
public void Bark() // interface를 상속받았기 때문에 Bark라는 메소드가 무조건 구현되어야 함
{
Console.WriteLine("Bark");
}
}
}
추상 클래스
1
2
3
4
abstract class Name
{
//Class와 동일
}
- 인터페이스와는 다르게 구현을 가질 수 있음. 그러나 인스턴스로 만들 수 없음.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
abstract class BaseClass
{
public abstract void AMethod();
public virtual void BMethod()
{
Console.WirteLine("BMethod");
}
}
class SonClass : BaseClass
{
public override void AMethod() { // AMethod는 무조건 구현해줘야 함. (abstract이므로)
}
public override void BMethod()
{
}
}
추상 클래스와 인터페이스의 차이점
- 접근자 : Interface는 접근 지정자 가질 수 없음(기본 public) , 추상 클래스는 함수에 대한 접근 지정자 가질 수 있음
- 구현 : Interface는 선언만 가질 수 있음 , 추상 클래스는 선언, 구현 모두 가질 수 있음. (선언만 + 선언&구현)
- 인스턴스화 : 모두 할 수 없음
- 필드 : Interface는 필드를 가질 수 없음, 추상 클래스는 필드를 가질 수 있음
- 메소드 : Interface에는 추상 메소드만 있을 수 있음 , 추상클래스는 추상, 비추상 메소드가 있을 수 있음
This post is licensed under CC BY 4.0 by the author.