ํด๋์ค๋ ์ฌ๋ฌ ํด๋์ค๋ฅผ ํ๊บผ๋ฒ์ ์์ํ ์ ์๋ค.(์ฃฝ์์ ๋ค์ด์๋ชฌ๋ : ๋ชจํธ์ฑ ๋ฐ์)
<์ฃฝ์์ ๋ค์ด์๋ชฌ๋ ์์ >
์ต์กฐ์ ํด๋์ค(Ridable)๊ฐ ๋ ๊ฐ์ ํ์ํด๋์ค(Car, Plane)๋ก๋ถํฐ ์์๋ฐ๊ณ ,
์ด ๋๊ฐ์ ํ์ ํด๋์ค๋ฅผ ๋ค์ ํ๋์ ํด๋์ค(MyVehicle)๊ฐ ์์ํ๋ ๊ฒ์ ๋งํ๋ค.
์ฌ๊ธฐ์ MyVehicle๋ Car์ Ride()๋ฉ์๋๋ฅผ ๋ฌผ๋ ค๋ฐ์์ง,
Plane์ Ride()๋ฉ์๋๋ฅผ ๋ฌผ๋ ค๋ฐ์์ง, ๋ชจํธํ๋ค.
public abstract class Ridable
{
public abstract void Ride();
}
public class Car : Ridable
{
public void Run()
{
Console.WriteLine("๋ถ๋ฆ๋ถ๋ฆ");
}
public override void Ride()
{
Run();
}
}
public class Plane : Ridable
{
public void Fly()
{
Console.WriteLine("ํจํจ");
}
public override void Ride()
{
Fly();
}
}
public class MyVehicle : Car, Plane
{
}
ใด ๊ทธ๋๋ ์ฌ๋ฌ ํด๋์ค๋ก๋ถํฐ ๊ตฌํ์ ๋ฌผ๋ ค๋ฐ๊ณ ์ถ๋ค๋ฉด?
๋ค๋ฅธ ํด๋์ค์ ๊ธฐ๋ฅ์ ์๋ก์ด ํด๋์ค์ ๋ฃ๋ ๋ฐฉ๋ฒ์ด ๊ผญ ์์๋ง ์๋ ๊ฒ์ ์๋๋ค.
ํฌํจ์ด๋ผ๋ ๊ธฐ๋ฒ๋ ์๋ค.
๋ค์๊ณผ ๊ฐ์ด ํด๋์ค ์์ ๋ฌผ๋ ค๋ฐ๊ณ ์ถ์ ๊ธฐ๋ฅ์ ๊ฐ์ง ํด๋์ค๋ค์ ํ๋๋ก ์ ์ธํด ๋ฃ๋ ๊ฒ์ด๋ค.
using System;
using System.IO;
namespace MultInterface
{
public abstract class Ridable
{
public abstract void Ride();
}
public class Car : Ridable
{
public void Run()
{
Console.WriteLine("๋ถ๋ฆ๋ถ๋ฆ");
}
public override void Ride()
{
Run();
}
}
public class Plane : Ridable
{
public void Fly()
{
Console.WriteLine("ํจํจ");
}
public override void Ride()
{
Fly();
}
}
public class MyVehicle
{
Car car = new Car();
Plane plane = new Plane();
public void Fly() { plane.Ride(); }
public void Run() { car.Ride(); }
}
class MainApp
{
static void Main(string[] args)
{
MyVehicle car = new MyVehicle();
car.Run(); //๋ถ๋ฆ๋ถ๋ฆ
}
}
}
<์ฌ๊ธฐ์๋ถํฐ ์ค์>
์ธํฐํ์ด์ค์ ๋ค์ค ์์์ ๊ฐ๋ฅํ๋ค.
์ธํ ํ์ด์ค๋ ๋ด์ฉ์ด ์๋ ์ธํ์ ๋ฌผ๋ ค์ค๋ค. ์์ ์ด๋จ์ง ๋ชฐ๋ผ๋ ๊ฒ๋ชจ์ต๋งํผ์ ์ ํํ๊ฒ ์์ ์ ๋ฎ๊ธฐ๋ฅผ ๊ฐ์ ํ๋ค.
(๋ฐ๋ผ์ ํด๋์ค ์ฃฝ์์ ๋ค์ด์๋ชฌ๋๊ฐ์ ๋ฌธ์ ๋ ๋ฐ์ํ์ง ์๋๋ค.)
ํ๋ก๊ทธ๋๋จธ๋ ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ฅผ ๋ค์ค ์์ํ๋ ํด๋์ค๋ฅผ ์์ฌํ๊ณ ์ด์ฉํ ์ ์๋ค.
<์ธํฐํ์ด์ค ๋ค์ค ์์ ์์ >
using System;
using System.IO;
namespace MultInterfaceInheritance
{
interface IRunnable
{
void Run();
}
interface IFlyable
{
void Fly();
}
class FlyingCar : IRunnable, IFlyable
{
public void Run()
{
Console.WriteLine("๋ฌ๋ ค๋ผ ๋ฌ๋ ค!");
}
public void Fly()
{
Console.WriteLine("๋ ์๋ผ ๋ ์!");
}
}
class MainApp
{
static void Main(string[] args)
{
FlyingCar car = new FlyingCar();
car.Run(); //๋ฌ๋ ค๋ผ ๋ฌ๋ ค!
car.Fly(); //๋ ์๋ผ ๋ ์!
IRunnable test = new FlyingCar();
test.Run(); //๋ฌ๋ ค๋ผ ๋ฌ๋ ค!
/*์ปดํ์ผ์๋ฌ*///test.fly();
//'IRunnable'์๋ 'fly'์ ๋ํ ์ ์๊ฐ ํฌํจ๋์ด ์์ง ์๊ณ ,
//'IRunnable' ํ์์ ์ฒซ ๋ฒ์งธ ์ธ์๋ฅผ ํ์ฉํ๋ ์ก์ธ์ค ๊ฐ๋ฅํ ํ์ฅ ๋ฉ์๋ 'fly'์ด(๊ฐ) ์์ต๋๋ค.
IRunnable runnable = car as IRunnable;
runnable.Run(); //๋ฌ๋ ค๋ผ ๋ฌ๋ ค!
IFlyable flyable = car as IFlyable;
flyable.Fly(); //๋ ์๋ผ ๋ ์!
}
}
}
<์์ >
using System;
namespace MultiInterfaceInheritance
{
interface IRunnable
{
void Run();
}
interface IFlyable
{
void Fly();
}
class FlyingCar : IRunnable, IFlyable
{
public void Run()
{
Console.WriteLine("Run! Run!");
}
public void Fly()
{
Console.WriteLine("Fly! Fly!");
}
}
class MainApp
{
static void Main(string[] args)
{
FlyingCar car = new FlyingCar();
car.Run();
car.Fly();
IRunnable runnable = car as IRunnable;
runnable.Run();
//runnable.Fly();//์ปดํ์ผ์๋ฌ
IFlyable flyable = car as IFlyable;
//flyable.Run();//์ปดํ์ผ์๋ฌ
flyable.Fly();
}
}
}
<์์ ์ถ๋ ฅ>
Run! Run!
Fly! Fly!
Run! Run!
Fly! Fly!
'C# > ์ด๊ฒ์ด C#์ด๋ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
38. ์ธํฐํ์ด์ค ์์ 1, 2 ๋ณต์ต (0) | 2022.02.22 |
---|---|
37. ์ถ์ํด๋์ค : ์ธํฐํ์ด์ค์ ํด๋์ค ์ฌ์ด (0) | 2022.02.22 |
34. ์ธํฐํ์ด์ค๋ฅผ ์์ํ๋ ์ธํฐํ์ด์ค (0) | 2022.02.15 |
33. ์ธํฐํ์ด์ค(1) (0) | 2022.02.14 |
์ด๊ฒ์ด C#์ด๋ค 7์ฅ ์ฐ์ต๋ฌธ์ ์ฐธ๊ณ (0) | 2022.02.14 |