Deff_Dev
[Unity/C#] 추상클래스, 인터페이스 본문
해당 포스팅은 고박사님의 유니티 C# 강의를 보고 공부한 내용과 추가적으로 공부한 내용을 정리한 포스팅입니다.
추상 메소드
- 한정자, 반환 형식, 메소드 이름, 매개변수 까지만 정의하고, 메소드가 호출되었을 때 어떤 행동을 하는지 내용이 없는 메소드
추상 클래스
- 추상 메소드를 포함하고 있는 미완성된 클래스
추상 클래스 특징
- new 연산자를 이용해 클래스 인스턴스를 생성할 수 없고, 추상 클래스를 상속 받은 자식 클래스에서만 구현 후 사용 가능하다.
- 추상 메소드와 추상 프로퍼티를 정의할 수 있다.
추상 메소드 특징
- 추상 클래스에서만 정의할 수 있다.
- 추상 메소드의 접근 지정자는 public이나 protected 중 하나로 정의한다.
- 추상 메소드를 정의할 때 static, virtual을 사용할 수 없고, abstract 키워드를 사용해서 정의한다.
추상 클래스, 메소드 사용 이유
- 클래스를 상속 받는 자식 클래스가 메소드 오버라이딩을 사용할 때 자식 클래스에서 “무조건” 메소드를 구현하도록 하기 위해 사용
- 가상 메소드(virtual)는 자식 클래스에서 메소드를 구현하지 않아도 문제가 없기 때문에 자식 클래스에서 꼭 구현하도록 강제성을 주기 위해 사용
자식 클래스에서 추상 메소드를 작성하지 않을 시 오류가 발생한다. (강제성)
추상 클래스 예제
추상 메소드는 override를 붙여서 구현한다.
인터페이스
- 추상 클래스에서 추상적인 부분(추상 메소드, 프로퍼티)만 따로 떼어 구현한 것
- 인터페이스는 추상 클래스와 마찬가지로 다른 클래스의 구현, 사용 방향을 제시하는 목적으로 사용
- 추상 클래스와 비슷하지만 추상 클래스는 클래스이기 때문에 다중 상속이 불가능하지만 인터페이스는 다중 상속이 가능하다.
인터페이스 특징
- 메소드, 프로퍼티, 인덱서, 이벤트만 선언할 수있다.
- 추상 메소드와 마찬가지로 구현부가 없다.
- 접근 지정자를 사용할 수 없고, 모든 것이public으로 선언된다.
- new 연산자를 이용해 인스턴스를 생성할 수 없다.
- 인터페이스를 상속받는 자식 클래스의 인스턴스를 생성할 수 있다.
- 인터페이스를 상속받는 자식 클래스는 인터페이스에 선언되어 있는 모든 메소드, 프로퍼티를 구현해야 한다.
- 이때 구현되는 메소드, 프로퍼티는 접근 지정자를 모두 public으로 설정한다.
인터페이스 장점
- 개발시간을 단축시킬 수 있다.
- 표준화가 가능하다.
- 서로 관계가 없는 클래스들에게 관계를 맺어줄 수 있다.
- 독립적인 프로그래밍이 가능하다.
인터페이스에 선언된 메소드를 구현하지 않을 시 오류 발생
인터페이스 예제
인터페이스를 상속하는 인터페이스
- 인터페이스 간에 상속이 가능하다.
왜 상속을 할까 ?
- 상속하려는 인터페이스가 소스 코드가 아닌 어셈블리일 때
- .Net Framework SDK에서 제공하는 인터페이스들과 같은 경우 수정이 불가하기 때문에 새로운 기능은 상속으로 추가
- 상속하려는 인터페이스를 상속하는 클래스들이 존재하는 경우
- 인터페이스를 수정하면 상속받는 모든 클래스를 수정해야됨.
만약 PlayerAttack() 메소드를 IMovingEntity 인터페이스에 정의했다면 PlayerAttack() 메소드가 필요없는 Goblin 클래스에서도 정의를 해야된다.
이런 효율적인 기능확장을 위해 인터페이스 상속을 사용한다.
인터페이스 다중 상속
- 클래스와 다르게 인터페이스는 다중 상속이 가능하다.
'Unity(유니티) > 유니티 공부' 카테고리의 다른 글
[Unity/C#] 중첩 클래스, 분할 클래스 (0) | 2024.03.12 |
---|---|
[Unity/C#] 메소드 숨기기, 오버라이딩 봉인 (0) | 2024.03.12 |
[Unity/C#] 다형성 (업 캐스팅, 메소드 오버라이딩, is/as 연산자) (0) | 2024.03.11 |
[Unity/C#] 정보 은닉, 캡슐화, 상속 (base 연산자) (0) | 2024.03.11 |
[Unity/C#] 클래스 (0) | 2024.03.09 |