์ธํฐํ์ด์ค๋ ์ ํ์ํ ๊น? ๊ทธ๋ฆฌ๊ณ ๋ฌด์์ผ๊น?
Interface์ ์ฌ์ ์ ์๋ฏธ
- inter-(์ํธ๊ฐ์) + -face(๋ฉด) = interface
- ์ ํด์๋ ๋ ๋ฌผ์ฒด๋ ๊ณต๊ฐ ์ฌ์ด์ ๊ฒฝ๊ณ
- ์ฌ์ฉ์๋ ์ค์์น๋ฅผ ํค๋ ๋ฒํผ์ ์ง์ค
- ์ด๊ฑธ ๋๋ฅด๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋ ์ง๋ฅผ ์ (what)
- ์ด๋ป๊ฒ ๊ทธ๋ฐ์ผ์ด ์ผ์ด๋๋์ง๋ ๋ชจ๋ฆ (how)
- ์ค์ ๋์์ ๊ตฌํ ๊ณต๊ฐ์์ ์ผ์ด๋จ
- ๋ฐฐ์ ์ ์ฐ๊ฒฐ
- ์ฌ์ฉ์๋ ์ ์์ง ๋ชปํ๋ ๊ณต๊ฐ
- ๊ตฌํ์๋ง ์๊ณ ์์
- ์ด๋ฏธ ์๊ณ ์๋ ๊ฐ๋
= ํจ์
- ํจ์๋ ๋ธ๋๋ฐ์ค์: ํธ์ถ์๋ ๋ด๋ถ๊ฐ ์ด๋ป๊ฒ ๋๋์ง ์ดํดํ๋ ค ํ์ง ์๋๋ค.
- ํจ์๋ช ๊ณผ ๋ฐํํ: ์ด๋ค ๋์์ ํ๋์ง ์๋ ค์ค
- ํจ์ ๋งค๊ฐ๋ณ์: ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ผ ํจ์๊ฐ ๋์ํ๋์ง ์๋ ค์ค
- ๊ทธ๋์ ํจ์ signature๋ฅผ interface๋ผ ๋ถ๋ฅด๊ธฐ๋ ํจ
- ์ปดํจํฐ ๋ถ์ผ์์ ์ธํฐํ์ด์ค๋ ๋งค์ฐ ๋ค์ํ ๊ฒ์ ์๋ฏธํจ
ํจ์ ์ ์ธ vs ํจ์ ๊ตฌํ
- ํจ์ ์ ์ธ ํจ์ signature interface
- c์ ๊ฐ์ ์ธ์ด์์๋ ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฒ
- ์ ์ธ๊ณผ ๊ตฌํ์ด ๋ถ๋ฆฌ๋์ด ์์ผ๋ฏ๋ก
- ๊ทธ๋ฐ๋ฐ ํจ์ signature, interface๋ง ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ ์์๋ค.
- ํจ์ ํฌ์ธํฐ ๋งค๊ฐ๋ณ์๋ signature๋ง ์ง์
void (*handler) (const char* msg)
๋ถ๋ถ์ ํจ์ signature๋ง ์๊ณ ๊ตฌํ์ด ์๋ค.- OO์์ ๋คํ์ฑ๋ ์ด์ ๊ฐ์ด ๋์ํ๋ค.
- ๊ฒฐ๊ตญ ๋คํ์ฑ์ ๊ตฌํ์ฒด์ ์๋ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ๊ฑฐ์ ๊ฐ์ ๋ฐฉ์์ด๋ผ ์๊ฐํ ์ ์๋ค.
ํจ์ ํฌ์ธํฐ ๋งค๊ฐ ๋ณ์ vs. ํด๋์ค ๋งค๊ฐ๋ณ์
- ๊ทธ๋ฌ๋ฉด ์ด๋ฌํ ์๋ฌธ์ด ๋ค ์ ์๋ค.
- โ๋ด๊ฐ ํ์ํ ๊ฑด ์ค์ ๋ก ๊ตฌํํ ๋ฉ์๋ ํจ์๋ง ์๋ฉด๋๋๋ฐ, ๋คํ์ฑ์ ์ฌ์ฉํ๋ฉด์ ๋ค๋ฅธ ๋ฉ์๋๋ค๊น์ง ๋ธ๋ ค์ค๊ฒ ๋๋ค..?โ
- โํจ์ ํฌ์ธํฐ๊ฐ ๋ ๋์ ๊ฒ ์๋๊ฐ?โ
ํจ์ ํฌ์ธํฐ ๋งค๊ฐ๋ณ์ | ํด๋์ค ๋งค๊ฐ๋ณ์ |
---|---|
- ์ด๋ค ํจ์ ๊ตฌํ๋ signature๋ง ๋ง๋ค๋ฉด ๋ค ๋ฐ์์ค | - ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์ํ ํด๋์ค๋ฉด ๋ค ๋ฐ์์ค - ๊ทธ ์ค ๋คํ์ฑ ๋ฉ์๋ ํ๋๋ฅผ ํธ์ถ - ์ค์ง์ ์ผ๋ก C์ ํจ์ ํฌ์ธํฐ์ฒ๋ผ ์๋ - ๊ทผ๋ฐ ๋ฐฐ๋ณด๋ค ๋ฐฐ๊ผฝ์ด ๋ ํฐ..? |
- ์๋ ๊ทธ๋ฌ๋ฉด ์ถ์ ํด๋์ค์์ ๋ฉ์๋๋ฅผ ์น๋ค abstract๋ก ๋ง๋ค๋ฉด ๋์ง ์์๊น?
- ์ผ๋จ ํจ์ํฌ์ธํฐ์ ์์ ํ ๊ฐ๊ฒ ํ๊ธฐ ์ํด์๋ ์ถ์ํด๋์ค์ ๋ฉ์๋๋ฅผ ํ๊ฐ๋ก ์ ํํ๊ณ , ๊ทธ ๋ฉ์๋๋ฅผ abstract๋ก ๋ง๋ค์.
- ๊ทธ๋ฌ๋ฉด ์์ํ๋ ์ชฝ์์ ๋ฌด์กฐ๊ฑด ๊ตฌํํด์ผ ํ๋๊น, ๊ทธ๋ฐ ์ถ์ํด๋์ค ์์ฒด๋ฅผ ์ธ์๋ก ๋๊ธฐ๋ ํ์๋ ๊ณง ํจ์ ํฌ์ธํฐ์ ์์ ํ ๊ฐ๊ฒ ๋๋ค.
- ์ฌ๊ธฐ์ abstract ๋ฉ์๋์ ๊ฐ์๋ฅผ ๋๋ฆฌ๋ ๊ฒ์ ๊ฒฐ๊ตญ ํจ์ํฌ์ธํฐ ์ฌ๋ฌ๊ฐ๋ฅผ ํ๋ฒ์ ์ฃผ๋ ๊ฒ๊ณผ ๊ฐ์ผ๋ ์ฌ์ฉํ ๋ง ํ ๊ฒ
OO ๊ฐ๋ ๊ณผ ์ธํฐํ์ด์ค
- ๊ตฌ์กฐ์ฒด: ๋ฐ์ดํฐ๋ง ๋ชจ์๋์๋ ๊ฒ
- ํด๋์ค: ๋ฐ์ดํฐ์ ๋์์ ๋ชจ์๋์ ๊ฒ
- ์์ ์ถ์ ํด๋์ค: ๊ตฌํ์ ๋นผ๊ณ ๋์๋ง ๋ชจ์๋์ ๊ฒ == Interface
- Interface
- ์ด๋ ํ ์ํ๋ ์์
- ๋์์ ๊ตฌํ๋ ์์
- ๋์์ signature๋ง ์์
Interface
- class โ interface
- abstract ์ง์ฐ๊ธฐ
- interface๋ ์์ฒด๊ฐ ์ถ์์
- method๋ ํญ์ public
- ํจ์ ํฌ์ธํฐ์ ๊ฐ์ ๊ฐ๋ ์ธ๋ฐ ๋ง์๋๋ค๋ ๊ฒ์ ์ด์ํจ
- ๊ทธ๋ฐ๋ฐ ์์ฆ ์ธ์ด์์๋ ๋ค๋ฅธ ACL๋ ๋ค์ด๊ฐ ์ ์์ด์ง
- ์ ๋์ ์ธ ๊ฒ์ ์๋๊ณ , ์ด๋ฌํ ํ๋ฆ์ด ์์๋ค ์ ๋๋ก ์ดํดํ๋ ๊ฒ์ด ์ข์๋ฏ
- extends๋ฅผ implements๋ก ๋ฐ๊ฟ
:
๋ง์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์์
- interface ๊ตฌํํ์ง ์์ผ๋ฉด ์ปดํ์ผ ์ค๋ฅ
Override์ ๋ฌธ์
- ์คํ๋ฌ์ ๋, ๋์์ ํ๋ ์๋๋๋ก ๋์ํ์ง ์์ ์ ์์
shout
๋ฅผshuot
๋ก ์ผ๋๋ฐ ์ด๊ฑธ ํ์ธ๋ชปํ๊ณ ๋์ด๊ฐ๋ฉด ์ฝ์งํ๊ฒ ๋๋ ๊ฑฐ์- ๊ทธ๋ผ ์ด๋ฐ ์คํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ถ์ ํด๋์ค๋ฅผ ์ธํฐํ์ด์ค๋ก ๋ฐ๊พธ์ด์ผ ํ๋๊ฐ?
- ๊ทธ๊ฑด ์๋๋ค.
- override๋ฅผ ํ๋ ๊ฒฝ์ฐ ๋ช ํํ๊ฒ ์ด๋ฅผ ์ํํ๋ค๋ keyword๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
- ์ฆ, overrideํ๋ ๊ฒฝ์ฐ
override
์ ๊ฐ์ ํค์๋๋ฅผ ํตํด์๋ง ๊ฐ๋ฅํ๋๋ก ์ ์ฝ์ ๊ฑธ์ด๋ฒ๋ฆฐ๋ค. - ์ด๋ ๊ฒ ๋๋ฉด, ์ฝ๋ ์์ฑ์๋
override
์์ด ์ํํ ์ ์์ผ๋ฏ๋ก ๋ณด๋ค ์์ ํ ์ฝ๋ฉ์ด ๊ฐ๋ฅํด์ง๋ค. - ์๋ฐ์์๋
annotation
์ด๋ผ๋ ๊ฒ์ ์ฌ์ฉํ๋ค. ์ด๋ ์ธ์ด์ ์ผ๋ถ๋ก ์กด์ฌํ๋ ๊ฒ์ด ์๋๋ค. (@Override
)
Java Annotation
- ํ๋ก๊ทธ๋จ์ ๋ํ metadata๋ฅผ ์ ๊ณต
- ํ๋ก๊ทธ๋จ์ ์ผ๋ถ๊ฐ ์๋์ด์ ์ฝ๋ ์คํ์๋ ์๋ฌด ์ํฅ์ ์ ๋ฏธ์นจ
- ์ฉ๋
- ์ปดํ์ผ๋ฌ์๊ฒ ์ ๋ณด๋ฅผ ์ ๊ณต (
@Deprecated
,@Override
) - ์ปดํ์ผ, ํน์ ๋ฐฐํฌ ์ค์ ์ด๋ค ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์
- ์ปดํ์ผ๋ฌ์๊ฒ ์ ๋ณด๋ฅผ ์ ๊ณต (
Interface์ ์ ๊ทผ ์ ์ด์
- ์ถ์ ๋ฉ์๋๋
protected
๋ฅผ ๋ถ์ผ ์ ์๋ค. - ๊ทธ ๋๋ฌธ์ ์ธ๋ถ์์ ํธ์ถ์ ๋ชปํด๋ ์์ ํด๋์ค๊ฐ ๊ตฌํํ๋๋ก ๊ฐ์ ํ ์ ์๋ค.
- ์ ์ธํฐํ์ด์ค๋ ์๋๊ฒ ํด๋์์๊น?
์ ์ธํฐํ์ด์ค๋ public method๋ง ๊ฐ๋ฅํ ๊น?
- ๊ฐ๋ ์์ผ๋ก ์ธํฐํ์ด์ค๋ ๋๋ฉด์ด ๋ง๋ฟ๋ ๋ฉด์ ๋งํ๋ค.
- ๊ทธ๋ ๊ธฐ์ ๊ทธ ์ฌ์ด์์ ํ์ํ ๋ชจ๋ ๊ฒ๋ค์ ์ ์ํ๋ ๊ฒ์ด ์ณ๋ค.
- ์ฌ๊ธฐ์ ํน์ ๋ฉ์๋๋ ์ฐ๊ฒฐ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๊ฒ ๋ค๋ ๊ฒ์ด ์๋ฏธ์ ์ผ๋ก ์ด์ํ๋ค.
- ์ด๊ฒ ์ผ๋ฐ์ ์ธ ์๊ธฐ๋ค.
- ์ฃผ๋ฅ ์ธ์ด์์๋
public
์ผ๋ก ๊ฐ์ ํ๋ ๋์ํ์ง ์์๋ ๋ฐฉ๋ฒ์ ์๋ค. - C์ ํค๋ํ์ผ๊ณผ ๋น์ทํ๋ค๊ณ ๋ณด๋ฉด ์ดํด๊ฐ ์ฝ๋ค.
- header file์ includeํ ์ด๋๊ณณ์์๋ ์ฌ์ฉํ ์ ์๋ค.
Interface์ ์ด๋ฆ
- ์์ ๋ถ์ I๋ ๋ฌด์์ธ๊ฐ? (
ILoggable
)- Interface์ ์ฝ์
-able
๊ณผ ๊ฐ์ ํํ๋ก ๋ถ์ผ ์๋ ์์- ์ธํฐํ์ด์ค๋ โ๋ฌด์ธ๊ฐ๋ฅผ ํ ์ ์๋คโ์ ํํ์ด๊ธฐ ๋๋ฌธ์
Interface๋ ๋ค์ค ์์์ ์ํ์ด ์๋ค
- ๋ค์ค ์์์ ๋ฌธ์ ๋ ๊ตฌํ์ด ๊ฐ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด๋ค ๊ฒ์ ์ ํํ ์ง ๋ชจ๋ฅธ๋ค์ ์๋ค.
- ์ฃฝ์์ ๋ค์ด์๋ชฌ๋
- A๊ฐ ์ด๋ฆ์ด ๊ฐ์ ๋ฉ์๋์ B, C๋ฅผ ๋ค์ค์์ํ๋ค๋ฉด ๊ตฌํ์ด ๋๊ฐ๋ผ ์ด๋ค๊ฑธ ์ ํํ ์ง ๋ชจ๋ฅธ๋ค.
- ์ด๋ฐ ๋ฌธ์ ์์ ์ธํฐํ์ด์ค๋ ์์ ๋กญ๋ค.
- ์ธํฐํ์ด์ค๋ ๊ตฌํ์ด ์๊ธฐ ๋๋ฌธ์, A์์ ๊ตฌํ์ ํด์ผํ๊ณ ์ด ๋ ์ด๋ฆ์ด ๊ฐ๋ค๋ฉด ํ๋๋ก ํ์น ์ ์๊ฒ ๋๋ค.
์ด๋ป๊ฒ ์์ํด๋ Interface์ ๊ตฌํ์ ํ๋๋ฟ
- Interface์์ ์ ์ธํ ๋ฉ์๋์ ๊ตฌํ์ Class์์ ์๊น
- Class ๋ค์ค ์์์ ๋ถ๊ฐ๋ฅ
- ๋ฐ๋ผ์ ํ ํด๋์ค์์์ Interface์ ๊ตฌํ์ ๋ฑ ํ๋๋ง ์กด์ฌ
- ๊ทธ๋์ ๋ค์ค ์์์ ํด๊ฒฐ๋ฒ์ผ๋ก ๋ง์ด ์ฌ์ฉํจ
- ๋จ, ๋จ์ํ ๊ทธ ์ฉ๋๋ ์๋
๊น์ ๋ณต์ฌ & ์์ ๋ณต์ฌ
- java์์๋
clone()
์ ์ฌ์ฉํจ - ์ด ๋ฐฉ๋ฒ์ด ์ด๋ ต๋ค ์๊ฐํ์ฌ ๋ณต์ฌ ์์ฑ์ ๋ฐฉ๋ฒ๋ ์ฌ์ฉํจ
public init(other point: Point)
- ์๊ธฐ ์์ ์ ์๋ฃํ์ ๋ฐ์ ์์ ์ ๋ฆฌํดํจ
- ๋ด๋ถ์ ์ผ๋ก ๋ณต์ฌํ๋ ์ฝ๋๋ฅผ ๋ง๋ค์ด ์ฌ์ฉ
- swift์ ๊ฒฝ์ฐ์๋ ๊ธฐ๋ณธ ์๋ฃํ์ด struct๋ก ๋์ด์์ด ์ด ๋ฌธ์ ์์ ์ฝ๊ฐ๋ ์์ ๋กญ๊ธดํจ
์ ๋ฆฌ
- ํจ์ ํฌ์ธํฐ์ฒ๋ผ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค. (๊ตฌํ๊ณผ ์ ์ธ์ ๋ถ๋ฆฌ)
- ๋ค์ค ์์์ ๋์์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค.
ํต์ฌ์ ๋คํ์ฑ, ๋คํ์ฑ ์๋ ์ธํฐํ์ด์ค๋ ์๋ฏธ๊ฐ ์๋ค.