Unity_C#

[Unity_C#]_ interface, abstract class, partial class, virtual method

그냥 하는거지 모 2022. 11. 6. 18:08

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();
    }

변수가 있다는 것은 특정 상태를 기억한다는 것이기에,

이런 '상태'라는 것은 구현영역에서 처리하는게 맞습니다.

 

추가 참고 사항

https://nshj.tistory.com/12

 

[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);
        }
    }