2023. 10. 24. 14:13ㆍGame Develop/C# Programming
이번 포스트에세는 추상 메서드와 인터페이스를 다뤄보려고 한다.
추상 메서드란?
추상 메서드 : 메서드의 내용이 없고 형태만 있는 메서드.
- 메서드 앞에 abstract(추상적인)를 붙인다.
- 추상 메서드를 하나라도 가진 클래스는 추상 클래스이며
- 추상 클래스에는 클래스 앞에 abstract를 붙여야 한다.
※ 추상 클래스를 상속받은 클래스는 '반드시' 추상 메서드를 재정의해야 한다
인터페이스란?
인터페이스 : 클래스와 비슷하지만 메서드를 선언만 해놓은 집합이다.
- 인터페이스는 변수(데이터)를 가질 수 없다.
- 인터페이스 내에 선언된 메서드는 내용이 없어야한다.
※ 인터페이스를 상속받은 클래스는 반드시 해당 인터페이스의 메서드를 가지고 있어야한다.
// 인터페이스의 기본 형태
interface [인터페이스 이름] // 보통 인터페이스 이름 앞에 I를 붙이는게 국룰임
{
메서드들
}
위의 설명만 놓고 보면 추상 메서드를 놔두고 굳이 인터페이스를 쓸 필요는 없어보인다.
그렇다면 C# 개발자들은 왜 인터페이스 기능을 구현해 놓은걸까?
가장 큰 이유는 C#은 C++과 달리 다중 상속이 불가능하기 때문이다.
다중 상속.
하나의 클래스가 여러 부모 클래스를 상속받음.
C#에서는 클래스의 다중 상속이 불가하다(문법적으로 금지함)
다중 상속이 불가능한 이유는 여러 클래스를 상속받았을 때 동일한 이름의 변수나 동일한 이름의 메서드가 있을 경우,
충돌로 인한 오류 발생할 수 있기 때문이다. 하지만, 인터페이스는 다중 상속이 가능하다.
자 이제 추상 클래스와 인터페이스를 간단하게 구현해보자.
추상 메서드 Test()가 있기 때문에 Human 클래스는 추상 클래스가 됐다.
Human 클래스의 추상 메서드 Test()를 자식 클래스 Student 에서 재정의 해주었다.
어렵지 않게 출력할 수 있다. 이제 인터페이스도 추가해주자
자 추상 메서드와 인터페이스까지 다뤄보았으니.
본격적으로 인터페이스를 활용한 프로그램을 하나 작성해보자.
토끼, 독수리, 호랑이, 말, 참새 5 마리의 동물이 있다. 각 동물은 이름이 있다.
초식 동물은 풀이나 곡식을 먹고,육식 동물은 다른 동물을 잡아먹으며, 날 수 있는 동물들은 날아다니게 할것이다.
각자 식사를 하고, 날 수 있는 동물들은 날 수 있도록 코드를 작성해 보겠다.
저번 시간이랑 똑같이 Animal 클래스를 먼저 작성해주고 나머지 클래스도 빠르게 작성하겠다.
토끼랑 말과 참새가 각각 먹는 것들도 다르니 Plant 클래스도 만들어주면 좋을거 같다.
식물도 만들어줬으니 토끼, 말, 참새의 Eat() 메서드도 바꿔주자.
모든 각 동물 클래스의 메서드 마다 매개변수가 다르고, 또 객체가 늘어나면 늘어날 수록 개발자가 일일히 작성해주어야 하는 번거로움이 있다. 그래서 이런 것들을 한 번에 통제할 수 있는 인터페이스를 만들어서 실행해보려고 한다.
위 동물들은 초식동물과 육식동물이 있고, 날 수 있는 동물도 있으니 세 개의 인터페이스를 만들어보겠다.
세 가지 인터페이스를 만들었으니 각 클래스에게 적합한 인터페이스를 상속해주자
자 이제 메인 클래스를 작성해주자
동물의 왕국 한 편을 다 완성했으니 이번 포스팅은 여기서 마치도록 하겠다.
'Game Develop > C# Programming' 카테고리의 다른 글
C# Practicing(Property 응용) (0) | 2023.10.24 |
---|---|
C# Practicing(static & property) (0) | 2023.10.24 |
C# Practicing(가상 메서드 오버라이드 심화) (1) | 2023.10.24 |
C# Practicing(상속, 가상 메서드) (1) | 2023.10.23 |
C# Practicing(클래스 심화(깊은 복사 VS 얕은 복사)) (1) | 2023.10.23 |