📕 3. 객체지향 상속
📄 5. 인터페이스
1). 인터페이스?
인터페이스는 구성원이 오직 메소드만 있고 모든 메소드가 추상 메소드인 경우입니다
- 추상메소드보다 더 심각하게..
- 혼자서 객체도 못만들고
- 오직 추상 메소드만 있고, 변수를 선언할 수 없다(단 상수는 선언가능)
- ✨하지만 다중 상속이 가능!!!✨
2). 특징
인터페이스의 모든 멤버가 public이고,
모든 메소드는 알아서 abstract가 된다(public abstract 가 붙은것으로 처리).다중 상속이 가능
인터페이스도 다형성이 가능하다.
interface Idieable {public void Die();} interface Imovable {public void Move(int x, int y);} interface monster : Unit , Idieable, Imovable{ ... public void Die(){ 으앙쥬금ㅋ; } public void Move(int x, int y){ (x,y)로 가보쟤 }; ... } static void Main(String[] argv) { Idiable 죽는아이 = new monster(); Imovable 걷는아이 = new monster(); }
인터페이스를 구현한다는 의미
- 인터페이스의 추상 매서드(미완성 설계도)를 구현한다는 의미이다.
3). 추상클래스 vs 인터페이스
추상클래스 | 인터페이스 | |
---|---|---|
공통점 | 1. 추상매서드를 가지고 있음 2. 미완성임 | 1. 추상매서드를 가지고 있음 2. 미완성임 |
완성하기 | 상속을받아서 | Implement함으로 |
구성 | 변수 & 생성자 & 추상매서드 | 추상매서드 |
클래스이긴함 | 그냥 메소드로 이루어진 껍데기임 |
4). 왜쓰는건가?
그 함수의 구현을 강제하기 위해서 사용한다
인터페이스는 인터페이스를 상속받는 클래스가 지켜야 할 내용을 정의할 때 사용합니다.
그리고 방식에 대해 입맛에 따라 구현을 다르게 할떄.
5. 구현
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Interface_EX_1 { interface IRunable{void Run();} interface IFlyable{void Fly();} interface IFloatable{void Floating();} class FlyingCar : IRunable, IFlyable { public static int 만든개수 = 0; public FlyingCar() { 만든개수++; } public void Fly() { Console.WriteLine("비행 엔진 작동 : 어케했냐? ㅋㅋ"); Console.WriteLine("난다!"); //대충 나는 동작 } public void Run() { Console.WriteLine("평범한 지상용 엔진 작동"); Console.WriteLine("달린다"); //대충 달리는 동작 } } class SwimingCar : IRunable, IFloatable { public static int 만든개수 = 0; public SwimingCar() { 만든개수++; } public void Run() { Console.WriteLine("물에 젖지 않는 지상용 엔진 작동"); Console.WriteLine("달린다"); //대충 달리는 동작 } public void Floating() { Console.WriteLine("수륙 양용 엔진 작동"); Console.WriteLine("물에 뜸!"); //대충 물에 뜨는 동작 } } class Program { static void Main(string[] args) { /////////////////////////////////// Console.WriteLine("--------------인터페이스로 구현한 물에 뜨는 자동차"); SwimingCar 물에뜨는자동차1 = new SwimingCar(); 물에뜨는자동차1.Floating(); 물에뜨는자동차1.Run(); /////////////////////////////////// Console.WriteLine("--------------인터페이스로 구현한 하늘 나는 자동차"); FlyingCar 하늘에나는자동차1 = new FlyingCar(); 하늘에나는자동차1.Fly(); /////////////////////////////////// Console.WriteLine("--------------Static으로 검사하는 하늘 나는 자동차 개수"); Console.WriteLine(FlyingCar.만든개수); ArrayList 하늘자동차 = new ArrayList(); for (int i = 0; i <= 10; i++) { 하늘자동차.Add(new FlyingCar()); } Console.WriteLine(FlyingCar.만든개수); } } }
참고
'CS > SW 공학' 카테고리의 다른 글
| 니앙팽이 - 객체지향(OOP) | 4-0 | SOLID 원칙 (0) | 2023.02.02 |
---|---|
| 니앙팽이 - 객체지향(OOP) | Extra | 응집도 결합도 (0) | 2023.02.01 |
| 니앙팽이 - 객체지향(OOP) | 3-4 | 추상클래스 (0) | 2023.02.01 |
| 니앙팽이 - 객체지향(OOP) | 3-3 | 다형성 (0) | 2023.02.01 |
| 니앙팽이 - 객체지향(OOP) | 3-2 | 메소드 오버라이딩 (method overriding) (0) | 2023.02.01 |