์ถ์ ํด๋์ค (Absract Class)
๊ตฌํ๋ถ๋ฅผ ๊ฐ์ง ์ ์์ง๋ง, ์ธ์คํด์ค๋ ์์ฑํ ์ ์๋ค.
์ถ์ ํด๋์ค๋ ๊ตฌํ๋ถ๋ฅผ ๊ฐ์ง ์ ์๋ค. ๊ตฌํ๋ถ๋ฅผ ๊ฐ์ง ์๋ ์์ง๋ง, ํด๋์ค์ ๋ฌ๋ฆฌ ์ธ์คํด์ค ์์ฑ์ ํ ์ ์๋ค.
ํ์ง๋ง ์ถ์ ํด๋์ค๋ฅผ ์์ ๋ฐ์ ํด๋์ค์ ์ธ์คํด์ค๋ ์์ฑ ๊ฐ๋ฅํ๋ฉฐ, ์ ์บ์คํ ๋ํ ๊ฐ๋ฅํ๋ค.
์ถ์ ํด๋์ค ์ ์ธ์ ๋ค์๊ณผ ๊ฐ์ด absract ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ๋ค.
abstract class ํด๋์ค์ด๋ฆ
{
// ํด๋์ค์ ๋์ผํ๊ฒ ๊ตฌํ
}
์ ๊ทผ์ฑ ์ธก๋ฉด์์ ๋ณธ๋ค๋ฉด, ํด๋์ค์ ๋ ๊ฐ๊น๋ค.
์ธํฐํ์ด์ค๋ ๋ชจ๋ ๋ฉ์๋๊ฐ public์ผ๋ก ์ ์ธ๋๋ ๋ฐ๋ฉด, ํด๋์ค๋ ํ์ ์๋ฅผ ๋ช ์ํ์ง ์์ผ๋ฉด ๋ชจ๋ ๋ฉ์๋๊ฐ private์ผ๋ก ์ ์ธ๋๋ค.
์ถ์ ๋ฉ์๋(Abstract Method)๋ฅผ ๊ฐ์ง ์ ์๋ค.
abstract class AbstractClass
{
public abstract void AbstractMethod(); // ์ถ์ ๋ฉ์๋
}
class DerivedClass : AbstractClass
{
public override void AbstractMethod() // ์ถ์ ๋ฉ์๋ ๊ตฌํ ๊ฐ์
{
...
}
}
์ถ์ ๋ฉ์๋๋ ์ถ์ ํด๋์ค๊ฐ ์ธํฐํ์ด์ค์ ์ญํ ์ ํ ์ ์๊ฒ ํด์ฃผ๋ ์ฅ์น์ด๋ค.
๊ตฌํ์ ๊ฐ์ง๋ ๋ชปํ์ง๋ง, ์์ ํด๋์ค์์ ๋ฐ๋์ ๊ตฌํํ๋๋ก ๊ฐ์ ํ๋ค.
์์ ํด๋์ค๋ค์ ๋ฐ๋์ ์ด ์ถ์ ๋ฉ์๋๋ค์ ๊ฐ์ง๊ณ ๊ตฌํํด๋จ์ ๊ฑฐ๋ผ๋ ์ผ์ข ์ ์ฝ์์ธ ์ ์ด๋ค.
์ถ์ ๋ฉ์๋์ ๊ธฐ๋ณธ ์ ๊ทผ์ฑ์ ๋ฌด์์ผ๊น?
abstract class AbstractClass
{
abstract void AbstractMethod(); // public? private?
์ถ์ ํด๋์ค๋ ํด๋์ค๋ ๊ทธ ์์์ ์ ์ธ๋๋ ๋ชจ๋ ํ๋, ๋ฉ์๋, ํ๋กํผํฐ, ์ด๋ฒคํธ ๋ชจ๋ ์ ๊ทผ ํ์ ์๋ฅผ ๋ช ์ํ์ง ์์ผ๋ฉด private์ผ๋ก ๊ฐ์ฃผํ๋ค. ์ฌ๊ธฐ์ ์ถ์ ๋ฉ์๋ ๋ํ ์์ธ๊ฐ ๋ ์๋ ์๋ค.
ํ์ง๋ง ์ฝ์ ์ญํ ์ ํ๋ ์ถ์ ๋ฉ์๋๊ฐ private์ด๋ผ๋ ๊ฒ์ด ๋ง์ด ์ ๋๋ค.
๊ทธ๋์ C# ์ปดํ์ผ๋ฌ๋ ์ถ์ ๋ฉ์๋๊ฐ ๋ฐ๋์ public, protected, internal, protected internal ํ์ ์ ์ค ํ๋๋ก ์์๋ ๊ฒ์ ๊ฐ์ํ๋ค.
์ถ์ ํด๋์ค๊ฐ ๋ ๋ค๋ฅธ ์ถ์ ํด๋์ค๋ฅผ ์์ํ๋ ๊ฒฝ์ฐ
์ถ์ ํด๋์ค๋ ๋ ๋ค๋ฅธ ์ถ์ ํด๋์ค๋ฅผ ์์ํ ์ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ ์์ ์ถ์ ํด๋์ค๋ ๋ถ๋ชจ ์ถ์ ํด๋์ค์ ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ์ง ์์๋ ๋๋ค. ์ถ์ ๋ฉ์๋๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ ํด๋์ค์์ ๊ตฌํํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
"๊ทธ๋์, ์ถ์ ํด๋์ค๋ ์ ์ฌ์ฉํ๋๊ฑด๋ฐ?"
์ถ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ์ด๋ค ์ผ์ด ๋ฐ์ํ ๊น? ๋ง์ฝ ํ๋ผ๋ฆฌ ์ผ์ ํ๋๋ฐ, ๋ค์๊ณผ ๊ฐ์ ๋ง์ ๋ค์๋ค๊ณ ์๊ฐ ํด๋ณด์.
"์ด ํด๋์ค๋ ์ง์ ์ธ์คํด์คํํ์ง ๋ง๊ณ ์์ ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ์ธ์.
Method1()๊ณผ Method2()๋ ๊ผญ ์ค๋ฒ๋ผ์ด๋ฉ ํด์ผ ํฉ๋๋ค."
ํ๋ก๊ทธ๋๋จธ๋ ์ฌ๋์ด๊ธฐ ๋๋ฌธ์ ์๋ฌด๋ฆฌ ์ด๋ฐ ์ข์ ๋ฉ๋ด์ผ์ด ์๋ค๊ณ ํ๋๋ผ๋, ์ผ์ด ๋ง๋ค๋ณด๋ฉด ๊น๋จน์ ์๋ ์๋ค.
์ถ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ผ์ด ์์ด์ง๋ค.
์ปดํ์ผ๋ฌ๊ฐ ์ค๋ฒ๋ผ์ด๋ฉ์ ๊ฐ์ ํ๋๋ก ์๊ตฌํ๊ณ , ์ ํ๋ฉด ์ปดํ์ผ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๊ฒ์ด ์ถ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ค.
- ์ด ๊ธ์ <์ด๊ฒ์ด C#์ด๋ค> ์ฑ ์ ๋ฐํ์ผ๋ก ๊ณต๋ถํ ๊ธ์ ๋๋ค.