์์๊ณผ ํด๋์ค ์ค๊ณ ์ ํํ ์ฌ์ฉํ๋ virtual, abstract, interface ๊ฐ ๋ฌด์์ธ์ง, ๋ฌด์จ ์ฐจ์ด๊ฐ ์๋์ง ์์๋ณด์
virtual (ํจ์, ์์ฑ, ์ธ๋ฑ์, ์ด๋ฒคํธ)
: ํ์ ํด๋์ค์๊ฒ ์์์ผ๋ก ์๋ฒฝํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ.
public class Animal(){
public virtual void Speak(){
Console.WriteLine("");
}
}
public class Dog : Animal(){
public override void Speak(){
Console.WriteLine("๋ฉ๋ฉ");
}
}
Dog maltize = new Dog();
maltize.Speak();
virtual ํ์ ์๋ฅผ ์ฌ์ฉํ๋ ํจ์๋ ํ์ ํด๋์ค์๊ฒ ์๋ฒฝํ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์๋ค.
ํ์ ํด๋์ค์์ override๋ก ์ฌ์ ์ ํ ์ ์๊ณ ํ์๋ ์๋๋ค.
์ฐธ๊ณ ) maltize.Speak()๋ฅผ ํธ์ถํ๋ฉด ๋ถ๋ชจ ํด๋์ค๊ฐ ์๋ ์์ ํด๋์ค๋ง ํธ์ถ๋๋ค.(๋ฎ์ด์์์ง)
abstract ( ํจ์, ์์ฑ, ์ธ๋ฑ์, ์ด๋ฒคํธ, ํด๋์ค )
: ํํ๊ฐ ๋ถ์์ ํด์ ํ์ ํด๋์ค์์ override๋ก ์ฌ๊ตฌํ(ํ์)ํด์ผ ํ๋ค.
: ์ฌ๋ฌ ํ์ ํด๋์ค์์ ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ ์ ์ํ ๋ ์ฌ์ฉํ๋ค.
public abstract class Animal {
public abstract void Speak();
}
public class Dog : Animal {
public override void Speak(){
Console.WriteLine("๋ฉ๋ฉ");
}
}
Dog maltize = new Dog();
maltize.Speak();
interface
: abstract์ ๋น์ทํ์ง๋ง ๋ฉค๋ฒ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. Property๋ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
public interface Animal(){
void Speak();
string Name { get; set; }
}
public class Dog : Animal {
private string name;
public void void Speak(){
Console.WriteLine(name + " ๋ฉ๋ฉ");
}
public string Name {
get{ return name; }
set{ name = value; }
}
}
Dog maltipoo = new Dog();
maltipoo.Name = "์๋น";
maltipoo.Speak();
์์/์ถ์ ํด๋์ค์ Interface์์ ์ฐจ์ด์
1) ์์, ์ถ์ ํด๋์ค๋ ํ ๋ถ๋ชจ ํด๋์ค๋ง ์์๋ฐ์ ์ ์์ง๋ง, ์ธํฐํ์ด์ค๋ ์ฌ๋ฌ๊ฐ ๊ฐ์ง ์ ์๋ค.
But, ํด๋์ค๊ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ, ์ธํฐํ์ด์ค์ ๋ชจ๋ ๋ฉค๋ฒ๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
2) abstract๋ ๊ฐ๋ ์ ์ผ๋ก ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ(๋๋ฌผ - ๊ฐ์์ง)์์ ์ฌ์ฉ๋๋ฉฐ intercace๋ ์๋ก ๋ค๋ฅธ ๊ณ์ธต(์ฌ๋์ด๋ ๊ธฐ๊ณ๊ฐ ๋ง์ํ๊ฒ(speak)ํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ ๋)์ด๋ ํ์ ์ด๋๋ผ๋ ๊ฐ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
'๐ฎ Unity Study > C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C#] Generic, Template (0) | 2023.08.21 |
---|---|
[C#] ๋ฌธ๋ฒ Keyword (0) | 2023.08.19 |
[C#][Unity] Event (0) | 2023.08.18 |
[C#] ? Question Mark (0) | 2023.08.18 |
[C#] C# ๋ฒ์ ๋ณ ์ถ๊ฐ๊ธฐ๋ฅ ์ฌํญ, .NET & Visual Studio ๋ฒ์ (0) | 2023.08.18 |