namespace InterfaceEx
{
interface IMyInterfaceA
{
void output();
}
interface IMyInterfaceB
{
void output();
}
class MyClass : IMyInterfaceA, IMyInterfaceB // ๋ค์ค ์์
{
static void Main(string[] args)
{
MyClass myClass = new MyClass();
IMyInterfaceA ia = new MyClass();
ia.output();
IMyInterfaceB ib = new MyClass();
ib.output();
}
void IMyInterfaceA.output()
// ๋ค์ค์์์ ํตํด ๊ฐ์ ธ์จ ํด๋์ค๋ค์ ๋ฉ์๋๋ช
์ด ๊ฐ์๊ฒฝ์ฐ์๋ `ํด๋์ค.๋ฉ์๋()` ํํ๋ฅผ ์ด์ฉํ๋ค.
{
Console.WriteLine("InterfaceA");
}
void IMyInterfaceB.output()
{
Console.WriteLine("InterfaceB");
}
}
}
์ธํฐํ์ด์ค(Interface) ์ ์ธ
interface ํค์๋๋ฅผ ์ฌ์ฉ
interface ์ธํฐํ์ด์ค๋ช
{
๋ฐํํ์ ๋ฉ์๋๋ช
(๋งค๊ฐ๋ณ์);
...
}
๋ค์ค์์
์ ํตํด ๊ฐ์ ธ์จ ํด๋์ค๋ค์ ๋ฉ์๋๋ช
์ด ๊ฐ์๊ฒฝ์ฐ์๋ ํด๋์ค.๋ฉ์๋()
ํํ๋ฅผ ์ด์ฉํ๋ค.
์ธํฐํ์ด์ค
์์๋ ํ๋๋ฅผ ํฌํจํ์ง ์๋๋ค๋ ํน์ง์ด ์๋ค.
- (์ด๋ฒคํธ, ๋ฉ์๋, ํ๋กํผํฐ๋ง์ ๋ฉค๋ฒ๋ก ๊ฐ์ง๋ค.)
์ธํฐํ์ด์ค
์ ๋ฉค๋ฒ๋ ๋ชจ๋ public ์ ๊ทผ๊ถํ์ผ๋ก ์ค์
๋๋ค.
- ๋ฐ๋ผ์ ์ ๊ทผ ์ ํ์(private, protected ๋ฑ)๋ฅผ ์ฌ์ฉํ ์ ์๋ค. =>
public๋ ์์จ์ฃผ๋๊ฒ ์ข์
(public ์ฌ์ฉ์ ๊ฒฝ๊ณ ๋ธ ^^;)
์ธํฐํ์ด์ค
๋ ์ผ์ข
์ ๋ช
์ธ์
์ด๋ค.
- ๋ช
์ธ์๋ฅผ ๋ณด๊ณ ํจ์๋ฅผ ์์ฑํ๋ ์ผ์ข
์ ์ค๋ช
์
์ธํฐํ์ด์ค
๋ ๊ตฌํ๋ถ(๋ชธํต)๊ฐ ์๋ ์ถ์๋ฉค๋ฒ(์ด๋ฒคํธ, ๋ฉ์๋, ํ๋กํผํฐ ๋ฑ)
๋ฅผ ๊ฐ์ง๋ค.
์ธํฐํ์ด์ค
๋ ๋ค์ค ์์
์ด ๊ฐ๋ฅํ๋ค.
- ๊ฐํน ๋ฌธ์ ์ ์ด ๋ฐ๊ฒฌ๋ ๋๊ฐ ์์ผ๋ ์กฐ์ฌํ์.
์ธํฐํ์ด์ค
๋ ๋ค๋ฅธ ์ธํฐํ์ด์ค
๋ฅผ ์์ ๋ฐ์ ์ ์๋ค.(= ์ธํฐํ์ด์ค
๊ฐ์ ์์๋ ๊ฐ๋ฅํ๋ค.)
ํด๋์ค
์์๋ ์ธํฐํ์ด์ค
๋ฅผ ์์๋ฐ์ ์ ์๊ณ , ๊ตฌ์กฐ์ฒด
์์๋ ์ธํฐํ์ด์ค
๋ฅผ ์์ ๋ฐ์ ์ ์๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก
์ธํฐํ์ด์ค
๋ ์ธ์คํด์ค
๋ฅผ ์์ฑํ ์ ์๋ค.
namespace MultiInheritanceEx
{
class A
{
public void Output()
{
Console.WriteLine("A์ ์ถ๋ ฅ");
}
}
class B
{
public void Output()
{
Console.WriteLine("B์ ์ถ๋ ฅ");
}
}
class Program : A, B
// C#์ ์ด์๊ฐ์ ํด๋์ค ๋ค์ค์์์ด ๋ถ๊ฐ๋ฅํ๋ค. => A์ B๋ฅผ class๋ก ์ ์ธ
// ๋จ A์ B๊ฐ ์ธํฐํ์ด์ค์ธ ๊ฒฝ์ฐ์ ๋ค์ค์์์ด ๊ฐ๋ฅํ๋ค.
//
{
static void Main(string[] args)
{
}
}
}
- ์์ ๊ฐ์ด ๋ค์ค ํด๋์ค๋ฅผ ์์๋ฐ๋ ๊ฒ์ C#์์๋ ๋ถ๊ฐ๋ฅํ๋ค.
namespace MultiInheritanceEx
{
interface AA
{
void Output();
}
interface BB
{
void Output();
}
class Program : AA, BB
// C#์ ์ด์๊ฐ์ ํด๋์ค ๋ค์ค์์์ด ๋ถ๊ฐ๋ฅํ๋ค. => A์ B๋ฅผ class๋ก ์ ์ธ
// ๋จ A์ B๊ฐ ์ธํฐํ์ด์ค์ธ ๊ฒฝ์ฐ์ ๋ค์ค์์์ด ๊ฐ๋ฅํ๋ค.
//
{
static void Main(string[] args)
{
}
}
}
- ์์ ๊ฐ์ด ์ธํฐํ์ด์ค๋ค์ ๋ํ ๋ค์ค์์์ ๊ฐ๋ฅํ๋ค.
์ธํฐํ์ด์ค์์ ์ธํฐํ์ด์ค๋ฅผ ์์(interface inherits interface)
์ธํฐํ์ด์ค ์์ ํ์
interface ์์ ์ธํฐํ์ด์ค ๋ช
: ๋ถ๋ชจ ์ธํฐํ์ด์ค ๋ช
{
...
}
namespace InterfaceEx2
{
interface ParentInterface
{
void myMethod(string str);
}
interface ChildInterface : ParentInterface
{
void myMethod(string str, int i);
}
class MyClass : ChildInterface
{
public void myMethod(string str)
{
Console.WriteLine(str + "๋ถ๋ชจ ์ธํฐํ์ด์ค ํธ์ถ");
}
public void myMethod(string str, int i)
{
for (int j = 0; j < i; j++)
{
Console.WriteLine(str + j + "์์ ์ธํฐํ์ด์ค ํธ์ถ");
}
}
// ์์์ธํฐํ์ด์ค๊ฐ ์ ์ด์ ๋ถ๋ชจ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์๊ธฐ์
// ์์์ธํฐํ์ด์ค๋ฅผ ์์ํ ํด๋์ค์์ ๋ถ๋ชจ ์ธํฐํ์ด์ค ๋ด์ ๋ฉ์๋ ๋ํ ์ ์๋ฅผ ํด์ค์ผ ํ๋ค.
}
class Program
{
static void Main(string[] args)
{
MyClass mc = new MyClass();
mc.myMethod("๋ถ๋ชจ");
mc.myMethod("์์", 3);
ParentInterface parent = new MyClass();
parent.myMethod("parent");
}
}
}
Output
๋ถ๋ชจ๋ถ๋ชจ ์ธํฐํ์ด์ค ํธ์ถ
์์0์์ ์ธํฐํ์ด์ค ํธ์ถ
์์1์์ ์ธํฐํ์ด์ค ํธ์ถ
์์2์์ ์ธํฐํ์ด์ค ํธ์ถ
parent๋ถ๋ชจ ์ธํฐํ์ด์ค ํธ์ถ
- ์ต์ข
์ ์ผ๋ก
์์์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ๋ ํด๋์ค
์์๋ ์์์ธํฐํ์ด์ค
๊ฐ ์ ์ด์ ๋ถ๋ชจ์ธํฐํ์ด์ค
๋ฅผ ์์
๋ฐ์๊ธฐ ๋๋ฌธ์ ์์์ธํฐํ์ด์ค๋ฅผ ์์ํ ํด๋์ค
์์ ๋ถ๋ชจ ์ธํฐํ์ด์ค
๋ด์ ๋ฉ์๋ ๋ํ ์ ์๋ฅผ ํด์ค์ผ ํ๋ค.