Post

[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.