Deff_Dev

[Unity/C#] 추상클래스, 인터페이스 본문

Unity(유니티)/유니티 공부

[Unity/C#] 추상클래스, 인터페이스

Deff_a 2024. 3. 11. 01:50

해당 포스팅은 고박사님의 유니티 C# 강의를 보고 공부한 내용과 추가적으로 공부한 내용을 정리한 포스팅입니다.

 

추상 메소드

  • 한정자, 반환 형식, 메소드 이름, 매개변수 까지만 정의하고, 메소드가 호출되었을 때 어떤 행동을 하는지 내용이 없는 메소드

추상 클래스

  • 추상 메소드를 포함하고 있는 미완성된 클래스

 

추상 클래스 특징

  • new 연산자를 이용해 클래스 인스턴스를 생성할 수 없고, 추상 클래스를 상속 받은 자식 클래스에서만 구현 후 사용 가능하다.
  • 추상 메소드와 추상 프로퍼티를 정의할 수 있다.

추상 메소드 특징

  • 추상 클래스에서만 정의할 수 있다.
  • 추상 메소드의 접근 지정자는 public이나 protected 중 하나로 정의한다.
  • 추상 메소드를 정의할 때 static, virtual을 사용할 수 없고, abstract 키워드를 사용해서 정의한다.

추상 클래스, 메소드 사용 이유

  • 클래스를 상속 받는 자식 클래스가 메소드 오버라이딩을 사용할 때 자식 클래스에서 “무조건” 메소드를 구현하도록 하기 위해 사용
  • 가상 메소드(virtual)는 자식 클래스에서 메소드를 구현하지 않아도 문제가 없기 때문에 자식 클래스에서 꼭 구현하도록 강제성을 주기 위해 사용

자식 클래스에서 추상 메소드를 작성하지 않을 시 오류가 발생한다. (강제성)

 

 

추상 클래스 예제

추상 메소드는 override를 붙여서 구현한다.


인터페이스

  • 추상 클래스에서 추상적인 부분(추상 메소드, 프로퍼티)만 따로 떼어 구현한 것
  • 인터페이스는 추상 클래스와 마찬가지로 다른 클래스의 구현, 사용 방향을 제시하는 목적으로 사용
  • 추상 클래스와 비슷하지만 추상 클래스는 클래스이기 때문에 다중 상속이 불가능하지만 인터페이스는 다중 상속이 가능하다.

 

인터페이스 특징

  • 메소드, 프로퍼티, 인덱서, 이벤트만 선언할 수있다.
  • 추상 메소드와 마찬가지로 구현부가 없다.
  • 접근 지정자를 사용할 수 없고, 모든 것이public으로 선언된다.
  • new 연산자를 이용해 인스턴스를 생성할 수 없다.
  • 인터페이스를 상속받는 자식 클래스의 인스턴스를 생성할 수 있다.
  • 인터페이스를 상속받는 자식 클래스는 인터페이스에 선언되어 있는 모든 메소드, 프로퍼티를 구현해야 한다.
  • 이때 구현되는 메소드, 프로퍼티는 접근 지정자를 모두 public으로 설정한다.

인터페이스 장점

  • 개발시간을 단축시킬 수 있다.
  • 표준화가 가능하다.
  • 서로 관계가 없는 클래스들에게 관계를 맺어줄 수 있다.
  • 독립적인 프로그래밍이 가능하다.

 

인터페이스에 선언된 메소드를 구현하지 않을 시 오류 발생

 

 

인터페이스 예제


인터페이스를 상속하는 인터페이스

  • 인터페이스 간에 상속이 가능하다.

 

왜 상속을 할까 ?

  • 상속하려는 인터페이스가 소스 코드가 아닌 어셈블리일 때
    • .Net Framework SDK에서 제공하는 인터페이스들과 같은 경우 수정이 불가하기 때문에 새로운 기능은 상속으로 추가
  • 상속하려는 인터페이스를 상속하는 클래스들이 존재하는 경우
    • 인터페이스를 수정하면 상속받는 모든 클래스를 수정해야됨.

 

만약 PlayerAttack() 메소드를 IMovingEntity 인터페이스에 정의했다면 PlayerAttack() 메소드가 필요없는 Goblin 클래스에서도 정의를 해야된다.

이런 효율적인 기능확장을 위해 인터페이스 상속을 사용한다.


인터페이스 다중 상속

  • 클래스와 다르게 인터페이스는 다중 상속이 가능하다.