프로그래밍/C#

[C#] Interface(인터페이스),abstract class(추상클래스)

gameObject 2023. 6. 22. 20:00
728x90

1. Interface (인터페이스)

먼저 인터페이스는 메소드(함수)의 구현을 하지 않는다.(내용을 채워넣지 않는다는 뜻이다.)

또한 객체를 생성하지도 않으며 필드를 갖지도 않는다.

 

단지 메소드를 적어놓기만 한다.

 

메소드를 적어놓기만 한다는 부분이 

인터페이스를 클래스의 청사진이라고 볼 수 있는 이유이다.

 

인터페이스를 상속하는 클래스들은 인터페이스에 선언되어있는 메소드들을 모두 public으로 구현해야한다.

즉, 밑그림을 먼저 그려두면 인터페이스에 상속된 클래스들이 청사진을 따라 하나씩 메소드를 구현하기 때문에 어떤 기능이 필요할것 같다고 느낀다면 인터페이스에 적어둘 시에 해당 내용을 빠뜨리고 코드를 작성하는 오류를 방지할 수 있다.

public interface 인터페이스이름 // 인터페이스이름 앞에는 관용적으로 I를 붙인다.
{
  void ClickThisObject(bool isClick);
  void PushThisButton(bool isPush);
}

구조는 위와 같이 생겼고, 클래스에서는 이제 clickthisobject와 pushthisbutton은 꼭 구현을 해야하는것이다.

 

* C#은 클래스 다중상속을 지원하지 않는다. 죽음의 다이아몬드 문제때문인데, 인터페이스는 메소드의 내용(구현)을 상속하는것이 아닌 형태만 상속을 하기 때문에 다중 상속이 지원이 가능하다. 

* 인터페이스는 인터페이스를 상속할 수 있다.

 - 수정할 수 없는 인터페이스일 경우

 - 이미 현재 인터페이스를 상속하는 클래스들이 너무 많아 수정이 어려울 경우, 해당 인터페이스를 상속하는 새로운 인터페이스를 구현하여 클래스에 적용시킨다.

 

2. abstract class (추상클래스)

인터페이스와 클래스 사이라고 보면 된다.

메소드의 구현을 가질수가 있으나 추상클래스는 객체를 생성할 수는 없기 때문이다.

abstract class 클래스이름
{
	//클래스와 동일하게 구현한다.
}

추상클래스는 추상메소드를 가질 수 있다는 점이 포인트이다.

추상메소드는 추상 클래스가 인터페이스의 역할도 할 수 있도록 만드는 장치이다.

abstract class 클래스이름
{
 	public abstract void ClickThisObject(bool isClick);
}

추상메소드를 추상 클래스 안쪽으로 이렇게 선언해주면 파생클래스에서 반드시 구현을 해줘야 한다.

 

추상 클래스를 사용하는 이유는 

1) 클래스를 직접 인스턴스화 하지 않고 파생클래스를 만들어 사용해야 할 경우

2) 메소드 a와 메소드 b 는 꼭 오버라이딩 해야한다고 알려줘야할 경우이다.

 

즉, 인터페이스와 추상클래스 둘다 가장 중요한 점은 타인에게 반드시 구현해야하는 메소드를 상기시켜준다는 점에 있는것 같다.

 

 

728x90