[C#] Interface

Min·2024년 8월 13일
0

CSharp

목록 보기
13/25
post-thumbnail

Interface vs Abstract Class

인터페이스와 추상클래스를 비교하는 경우가 많다. 아마 메서드를 강제한다는 점에서 공통점을 찾을 수 있기 때문이 아닐까? 실제로 언리얼 같은 경우 추상클래스와 다중상속을 이용하여 인터페이스 클래스 템플릿을 만들어놓기도 하였다. 그런 의미에서 (c++은 클래스의 다중상속이 가능하기 때문에) 인터페이스는 추상클래스의 기능을 제한하여 그 기능의 목적성을 더욱 명확하게 한 것처럼 보이기도 한다.

하지만 저 말은 진짜 말 그대로 둘의 공통점과 차이점일 뿐, 기능들의 목적과 의도를 설명하지는 못한다. 둘의 공통점과 차이점에서 그 개념을 명확하게 하기 보다는, 실제 내가 기능을 사용해 보면서 느낀 두 기능의 목적성을 기록해 놓고 싶다는 생각이 들었다.


추상클래스

내가 생각하는 추상 클래스의 가장 큰 특징은 파생클래스의 메서드를 강제할 수 있다는 점이 아니라, '인스턴스화'가 불가능하다는 점이다. 이는 추상클래스의 이름 그대로, 추상적인 개념을 정의한 것이기 때문에 실체화 되면 안된다는 기능의 의도를 보여준다고 생각한다. 그렇기에 추상클래스가 파생클래스에 강제할 기능이 있다면, 그건 해당 개념으로부터 정의된 구체적인 클래스들이 반드시 거쳐야할 공정이나 가져야 할 기능들 이어야한다고 생각한다.


인터페이스

인터페이스의 가장 큰 특징은 '다중상속'이 가능한 기능이라는 점이다. C#에서는 기본적으로 클래스의 다중상속을 허용하지 않지만, 인터페이스는 다중상속이 가능하다. 다중상속이 가능하다는 것은 즉 '기능의 모듈화'가 가능하다는 것이다. 즉, 어떤 기능을 사용할 때 반드시 가져야할 멤버를 미리 정의해놓고 다중상속을 통해 클래스에 강제한다는 것의 의미가, 상속을 통해 클래스에 기능을 부착 하는것 이라고 말할 수 있다는 것이다.


둘은 대척점에 있는가?

맨날 둘이 비교하다 보니 마치 둘이 배타적 관계인것처럼 착각할때가 있다. 하지만 둘은 함께 사용할때 그 용도가 더 명확해진다.
인터페이스와 추상 클래스를 조합한다면, 인터페이스로 만든 여러 모듈을 추상클래스에 부착하여 추상클래스를 정의하고, 해당 기능을 추상화하여 파생클래스에서 재정의 하는 식으로 사용 할 수 있겠다.

profile
티내는 청년

0개의 댓글

관련 채용 정보