인터페이스(interface)
마소의 공식 설명
인터페이스에는 비추상 클래스 class 또는 struct가 구현해야 하는 관련 기능 그룹에 대한 정의가 포함되어 있습니다. 인터페이스에서는 구현이 있어야 하는 static 메서드를 정의할 수 있습니다. 인터페이스는 멤버에 대한 기본 구현을 정의할 수 있습니다. 인터페이스에서는 필드, 자동 구현 속성, 속성과 유사한 이벤트 등과 같은 인스턴스 데이터를 선언할 수 없습니다.
예를 들어 인터페이스를 사용하면 여러 소스의 동작을 클래스에 포함할 수 있습니다. 해당 기능은 언어가 클래스의 여러 상속을 지원하지 않기 때문에 C#에서 중요합니다. 또한 구조체는 다른 구조체나 클래스에서 실제로 상속할 수 없기 때문에 구조체에 대한 상속을 시뮬레이트하려는 경우 인터페이스를 사용해야 합니다.
그렇다면 추상 클래스와 뭐가 다른가?
주로 언급되는 차이점으로는 (추상클래스를 기준으로 인터페이스가 다른점을 작성)
1. 상속 : 클래스와 달리 다중 상속이 가능
2. 구현 : 함수의 구현부를 작성할 수 없음
3. 필드(변수) : 필드를 가질 수 없음
4. 접근 제한자 : 모두 public이며, 제한자를 사용 불가.
5. 생성자 : 생성자를 가질 수 없음
6. 스태틱 : 스태틱 메서드 및 프로퍼티를 가질 수 없음
이 있다.
*속성은 인터페이스도 가능하다. (int Integer{ get; set; })
그렇다면 C# 최신에서는?
C# 8 에서는 "디폴트 인터페이스 메서드" 기능과 "스태틱 멤버" 기능이 추가되었다.
디폴트 인터페이스 메서드는 기존에 불가능했던 함수의 구현부 작성을 가능하게 해주며,
스태틱 멤버는 말 그대로 인터페이스에 스태틱 메서드와 프로퍼티를 추가할 수 있도록 변경되었다.
코딩을 하다보니 인터페이스에 이 기능은 생각해보니까 여기저기서 비슷하게 정의되어 그냥 추상 메서드로 사용하고 싶었지만 다중상속이 불가능해서 클래스로 바꿀수 없어 그냥 억지로 사용했던 경험이 좀 있는데 이러한 문제가 해결되었다.
'코딩 > C#' 카테고리의 다른 글
[Unity] Layout Group 갱신(새로고침) 하는법 (0) | 2024.09.12 |
---|---|
[Unity] TMP 리치 텍스트(마크업 포맷, 태그) 사용법 (4) | 2024.09.11 |
C# Enum으로 반복문(foreach) 사용 및 개수 구하기 (.Count, .Length) (0) | 2023.09.11 |
댓글