[Unity_C#]_ interface, abstract class, partial class, virtual method
https://storycompiler.tistory.com/222
[C#] 필드 사용가능? - interface, abstract class, partial class, virtual method
안녕하세요, 모스크바에 살고 있는 개발자 윤진입니다. C로 개발을 할때는 헤더파일에 온갖 함수선언을 하며,공동작업을 하는 개발자들끼리 전체적인 그림을 그리곤 했습니다.그럴때마다 Java의
storycompiler.tistory.com
=> 참고 블로그
C#에서는 다양한 방법으로 모듈을 설계&구현할 수 있다.
- interface
- abstract class
- partial class
- virtual method
그렇지만, 각각이 목적과 쓰임이 다르다.
interface
1) 메소드, 2) 속성, 3) 인덱서, 4) 이벤트
만을 사전에 선언하여,
해당 interface를 상속받는 class가 빈 껍데기를 구현하도록 유도하고 있습니다.
만약 아래 코드처럼 interface에 필드를 넣으면, 컴파일 에러가 발생합니다.
컴파일러 : "인터페이스는 필드를 포함할 수 없습니다"
interface InterfaceWithVariable
{
string s; // Error
int InterfaceMethod();
}
변수가 있다는 것은 특정 상태를 기억한다는 것이기에,
이런 '상태'라는 것은 구현영역에서 처리하는게 맞습니다.
추가 참고 사항
[C# 기초문법] 5. 인터페이스(Interface)
인터페이스(Interface) 클래스의 선언부 역할을 합니다. 메소드, 이벤트, 인덱서, 프로퍼티만을 가질 수 있습니다. 구현부가 없기 때문에 당연히 인스턴스를 생성할 수 없습니다. 클래스는 인터페
nshj.tistory.com
https://blog.hexabrain.net/148
C# 강좌 16편. 인터페이스(Interface)
1. 인터페이스(Interface) 이번 강좌에서는 '인터페이스(Interface)'에 대해 알아보려고 합니다. 인터페이스라고 하니, 어디서 많이 들어보신것 같죠? 사전적 의미로는 '사용자인 인간과 컴퓨터를 연결
blog.hexabrain.net
abstract class
추상 클래스
abstract 타입 =>
abstract 타입의 1) 메소드, 2) 속성, 3) 인덱서, 4) 이벤트가 하나 이상 포함된 class 입니다.
추가 구현이 필요한 abstract 타입 있다는 것 외에는 일반 class 정의하듯 만들면 됩니다.
그렇기에 필드에 대한 별도의 제약사항은 없습니다.
abstract class AbstractWithVariable
{
int i;
protected abstract int AbstractMethod(int argument);
}
위의 예처럼 얼마든지 class 필드를 만들 수 있습니다.
partial class
abstract class처럼 필드에 대한 제약이 없습니다.
일반 class를 복수개로 쪼개놓은 것이기 때문에, 분리된 것을 합치면 일반 class가 됩니다.
한 partial class에서 정의한 변수를 다른 다른 partial class에서 사용할 수 있습니다.
partial class PartialWithVariable
{
int i = 10;
}
partial class PartialWithVariable
{
public void Print()
{
Console.WriteLine(i);
}
}
virtual method
상속과정에서 부모-자식 간에 메소드 처리방식을 규정하기 때문에,
abstract나 partial처럼 변수에 대한 제약이 없습니다.
public class VirtualClass
{
int i;
public virtual void Print(int i)
{
Console.WriteLine(i);
}
}