์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋๊ฐ? ๊ทธ๋ฅ ์ค์ง์ ์ธ ๋ด์ฉ์ด ๋ด๊ธด ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํด์ผ ํ๋๊ฐ?
๋ชจ๋ ๊ฒ์ด ์ธํฐํ์ด์ค์ฌ์ผ ํ๋ค๋ ์ฃผ์ฅ
๋ค๋ฅธ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ ๋๋ก ์ง์ ํธ์ถํ๋ฉด ์๋๋ค. ๋ชจ๋ ๊ฒ์ ์ธํฐํ์ด์ค๋ก ๋ง๋ค์ด๋ผ.
- ์?: OO์์๋ ๋์ปคํ๋ง์ด โ์ธ์ ๋ ๊ฐ์ฅ(?)โ ์ค์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ๋ฉด ๊ต์ฅํ ์ง์ ๋ถํ๊ฒ ๋ณํ๋ค.
- ํน์๋ผ๋ ๋ค๋ฅธ ๊ตฌํ์ด ์๊ธธ์๋ ์์์์?
- ์๊ธธ์๋ ์์๊ธธ ์๋ ์๋ค.
- ํ์ํ ๋ ๋ง๋๋ ๊ฒ์ด ์ข๋ค.
- ์ค์ธ์๋ ๋ชจ๋ ๋ฏธ๋๋ฅผ ๋๋นํ๋ฉด์ ๊ตฌ์ถ๋์ด ์์ง ์๋ค. ์ ์ํํธ์จ์ด์์๋ง ๊ทธ๋ ๊ฒ ํ๋๊ฐ?
์ธํฐํ์ด์ค : ๊ตฌํ = 1 : 1์ ์ด์ํ๋ค.
- OO์์์ ์ธํฐํ์ด์ค ์ ์ (์ด ๊ฐ์์์)
- ์ํ๋ ๋ฉ์๋ ๊ตฌํ๋ ์๋ ์์ ์ถ์ ํด๋์ค
public
๋ฉ์๋ ์๊ทธ๋ด์ฒ๋ง ๋ชจ์๋ ๊ฒ- C ์ธ์ด์ header ํ์ผ ๊ฐ์ ์กด์ฌ
- OO์์์ ์ธํฐํ์ด์ค: ์ฃผ ์ฉ๋๋ฅผ ๊ธฐ์ค์ผ๋ก
- ํจ์ ํฌ์ธํฐ์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ: ๋คํ์ฑ
- ๋ค์ค ์์์ ํ๋ด๋ผ ์ ์์: ๋คํ์ฑ
- ๋ณํ์ ๋๋นํด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์์(๋จ, ํ์ํ ๊ฒฝ์ฐ๋ง): ๋คํ์ฑ
- **๋คํ์ฑ ์๋ ์ธํฐํ์ด์ค๋ ์๋ค.**๊ฐ ์ผ๋ฐ์ ์ธ ์ฃผ์ฅ
์ธํฐํ์ด์ค์ ์๋ชป๋ ์ดํด
- ์ ์ธํฐํ์ด์ค๋ง ์ค์์ ํ๋๊ฐ?
- ์ด ์ง์์์ ์ฑ์์ฒ๋ผ ๋ฐ๋๋ ์ฑ : GoF์ ๋์์ธ ํจํด
- ์ฑ ๋ด์ฉ์ ๊ด์ฐฎ๋ ๊ณกํดํ๋ ์ฌ๋๋ค์ด ๋ฌธ์ ์
- โProgramming to an Interface, not an Implementation.โ
- ์ ๋ฌด์กฐ๊ฑด Java interface ์ฌ์ฉํ๋ฉด ๋๋๊ตฌ๋! โ
- ํ์ง๋ง ์ฌ๊ธฐ์ interface๋ ๊ทธ ์๋ฏธ๋ก ์ ์๊ฒ ์๋๋ค.
- ์ฌ์ค interface๋ผ๋ ์ฉ์ด์์ฒด๋ฅผ ์ฌ๋ฌ๊ณณ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ ๋ฌธ์ ๋ผ ๋ณผ ์๋ ์๋ค.
Java์ Interface๊ฐ ์๋ ๊ทผ๊ฑฐ
- ํด๋น ์ฑ
์ C++๋ก ์์ฑ๋์ด ์์, ์ฆ
interface
๋ฅผ ์ง์ํ์ง ์๋๋ค. - ๋คํ์ฑ์ด ์ธํฐํ์ด์ค์ ์์กดํ๋ค๊ณ ๋ช
์๋์ด ์๋ค.
- ์์์์ ๋์์ ์ฌ์ฌ์ฉ๋ง ๋งํ๋ ๊ฒ์ ๋ฐ์ชฝ์ง๋ฆฌ์ด๋ค.
- ์์์ ํตํด ์์์ด ๋ฐ๋ผ์ผํ๋ ๊ณตํต interface๋ฅผ ์ ์ํ๋ ๊ฒ๋ ์ค์ํ๋ค.
- ๊ทธ ์ด์ ๋ ๋คํ์ฑ์ด ๊ณตํต interface์์ด๋ ์กด์ฌํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ถ๋ชจ์ ๋คํ์ ๋ฉ์๋ ์๊ทธ๋ด์ณ๋ผ๋ ์๋ฏธ๋ก ์ฌ์ฉํ๋ค.
- ์ถ์ ํด๋์ค์ ์๋ interface๋ง ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ฅ์ ์ด ์๋ค.
- ํด๋ผ์ด์ธํธ๋ ์๊ธฐ๊ฐ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ ํ์ ์ด ๋ญ์ง ๋ชฐ๋ผ๋ ๋๋ค.
- ํด๋ผ์ด์ธํธ๋ ๊ฐ์ฒด๋ฅผ ๊ตฌํํ๋ ํด๋์ค์ ๋ํด ๋ชฐ๋ผ๋ ๋๋ค.
- ๋จ, ์ถ์ ํด๋์ค๊ฐ ๊ฐ์ ํ๋ interface๋ง ๋ฐ๋ฅด๋ฉด ๋๋ค.
- ์ถ์ ํด๋์ค์ ์๋ interface๋ง ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ฅ์ ์ด ์๋ค.
์ฆ, ์ฌ๊ธฐ์ ๋งํ๋ interface๋ ์๋ฐ์์ ๋งํ๋
Interface
๊ฐ ์๋๋ผ ๋ฉ์๋ ์๊ทธ๋์ณ ๊ทธ ์์ฒด๋ฅผ ๋งํ๋ค.
์ธํฐํ์ด์ค์ ๋ํด ํ๋ก๊ทธ๋๋ฐํ๋ผ๋ ์๋ฏธ
- ์์ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์๋ก ๊ฒฐํฉ๋๊ฐ ์ค์ด๋ ๋ค.
- ํจ์ == ๋ธ๋๋ฐ์ค ๋ผ๋ ๋ง์ ๋คํ์ฑ์ด ์ถ๊ฐ๋ ๊ฒ์ ๋ถ๊ณผ
- ํจ์๋ ํจ์ ์์์ ๋ฌด์์ด ์ผ์ด๋๋์ง ์๋ ค๊ณ ํ์ง ๋ง์๋ผ.
- ํ๋ผ๋ฏธํฐ์ ๋ฐํํ๋ง, ์ฆ ์๊ทธ๋ด์ณ๋ง ๋ณด๊ณ ๊ฐ์.
- ํด๋์ค๋ ๊ตฌ์ฒด ํด๋์ค์ ์์กดํ์ง ๋ง๊ณ , ๋ถ๋ชจ์์ ์ ์ํ ๋คํ์ ๋ฉ์๋์ ์์กดํ์.
- ํจ์๋ ํจ์ ์์์ ๋ฌด์์ด ์ผ์ด๋๋์ง ์๋ ค๊ณ ํ์ง ๋ง์๋ผ.
- ํต์ฌ: ๋คํ์ฑ์ ๊ฐ์ง ์ผ๋ฐ์ ๋ฉ์๋ ์๊ทธ๋ด์ฒ๋ฅผ ์ ์
- ๋ฌด์กฐ๊ฑด Java์
interface
๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค? โ
- ๋ฌด์กฐ๊ฑด Java์
ํ์ ์ ๊ฐ์ฅ ์ค์ํ ๋ชฉํ๋ ์ค์ ์๋ฐฉ
- ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํ์ ํ๊ฒฝ
- ๋ชจ๋๊ฐ ์ง๊ด์ ์ผ๋ก ์ดํดํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ค์๋ฅผ ์ค์ธ๋ค.
- ์ฃผ๊ด์ฑ์ด ๊ทธ๋๋ง ์ ์
- OO์ ์บก์ํ
- ๋คํ์ฑ, ํฌ์ธํฐ, ์ฌ๊ท ํจ์ ๋ฑ์ด ์ดํดํ๊ธฐ ์ด๋ ค์ด ์ด์
- ์ง๊ด์ฑ์ด ์ค์ด๋ฆ
- ์ถ์์
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ถ์ํ๋ฅผ ์ํ๋๊ฒ ์ค์๊ฐ ์ ๋ค.
์ธํฐํ์ด์ค์ ์ฌ๋ฐ๋ฅธ ์ ์
- ์ด๋ฐ ๊ธฐ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์๋ฅผ ํ๋ค๋ฉด, (์ฃผ๋ฅ ์ธ์ด, ์ฃผ ์ฉ๋)
- ์ํ๋ ๊ตฌํ๋ ์์ด ๋ฉ์๋ ์๊ทธ๋ด์ฒ๋ง ์๋ ์ถ์ ํด๋์ค
- ํจ์ ํฌ์ธํฐ์ฒ๋ผ ๋๋ ๋ค์ค ์์ ๋์ ์ฌ์ฉ๊ฐ๋ฅ (๋คํ์ฑ)
- ์ด์ธ์ ์ฃผ๊ด์ ์๊ฒฌ์ ์ฅ์ ์ด ํ์คํ ๋ณด์ผ ๋ ๋ฐ์๋ค์ด์.
์ดํด๋ฆฝ์ค API์ ์ธํฐํ์ด์ค - ๋์ปคํ๋ง์ ์ํ ์
- ์ดํด๋ฆฝ์ค: Java IDE
- ๋ง์ ์ฌ๋๋ค์ด ์ฌ์ฉํ์ฌ ์ดํด๋ฆฝ์ค API๋ฅผ ์ฌ์ฉํ ๋ง์ ๋๊ตฌ๋ค์ด ์์
- ๊ทผ๋ฐ, ์ด API ๋ฒ์ ๋ฐ๋ ๋๋ง๋ค ๋ฉ์๋ ์๊ทธ๋ด์ฒ๊ฐ ๋ฐ๋๋ค๋ฉด?
- ๋ง์ ๋๊ตฌ๋ค์ด ๊ณ ์ฅ๋จ
- ๋ค ๋ฐ๊ฟ์ค์ผ ํจ
- ์ด๋ฌํ ๋ณํ๊ฐ ์ ์ด์ผ ํจ
์ค๊ณ์ ๋ง์ ์๊ฐ ํฌ์
- ์ถํ ๋ณํ์ ๊ฐ๊ฑดํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ๊ผผ๊ผผํ ์ค๊ณํจ
- ํ์ง๋ง ๋ฐ๋์ง ์๋ API๋ ๋ฐ์ ๋ ์์
- ๊ทธ๋ ๊ธฐ์ ๋ค์ ๋ Java ํค์๋์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๊ณ ์ฝ์ํจ
interface
: ์ ๋๋ก ๋ฐ๋์ง ์์class
: ์ธ์ ๋ ๋ฐ๋ ์ ์์
ํ์ง๋ง interface๋ก ๋ฐ์ ์์ผ์ผ ํ๋ค.
- ์๋ฌด๋ฆฌ ์ค๊ณ๋ฅผ ์ํด๋ ๋ชจ๋ ๋ฏธ๋๋ฅผ ์์ธกํ ์๋ ์๋ค.
- ์๋ ๋์์ ์ถ๊ฐํด์ผ ํ ์ผ์ด ์๊ธด๋ค.
- ์ถ๊ฐํ๊ฒ ๋๋ฉด, ํด๋น ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ํด๋์ค๊ฐ ์ปดํ์ผ ์๋๋ค.
ํด๊ฒฐ๋ฒ
- ์ด์ ๋ฒ์ ๊ณผ ํธํ๋๋ ์๋ก์ด ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์๋ค.
- ๋ค์ ์ซ์๋ฅผ ๋ถ์ด๋ ๋ฐฉ์
- ์ด๋ฌ๋ฉด ์ ๋ฒ์ ์ด ๋์๋ ๊ธฐ์กด ํด๋ผ์ด์ธํธ ์ฝ๋๋ ๋์ํ๋ค.
์ฅ๋จ์
- ์๋ก ์ดํด๋ฆฝ์ค API๋ฅผ ์ฌ์ฉํ๋ ค๋ ์ฌ๋์ด ๋ค์ด์๋ค.
- 1, 2, 3? ๋ญ์จ์ผ ํ์ง?
- ๋ค์ ์ซ์ ๋ถ์ด๋ ์ด๋ฆ์ด ์ข์ ๊ฑธ๊น?
- ์ฌ์ค ์ด๋ฐ ํ๋ก์ ํธ๋ฅผ ๋ค์ ๋ง์ฃผํ๋ ๊ฒ์ด ์ด๋ ค์. ์ค๊ณ์ ์ด๋งํผ ํฌ์๋ฅผ..?
์ฅ์ | ๋จ์ |
---|---|
- interface ์ class ์ ์๋ฏธ๋ฅผ ํ์คํ ๋ถ๋ฆฌ - ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ง๊ฐํธ๋ฆฌ์ง ์์ | - ์ธํฐํ์ด์ค๊ฐ ๊น๋ํ๊ฒ ์ ์ง๋์ง ์์ - ๋น์ฐํ ๋ณํ์ ๋๋ฆผ (์์ ์๋ ์ ์ด์ ๋๋ ค์ ๋ณ๋ฌธ์ ์๋์์) |
ํ์ฌ์๋ ์๋ฏธ๋ ์๋ค.
- ๋ง์ ์ฌ๋๋ค์ด ์์กดํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ ๋ค๋ฉด ๊ณ ๋ คํด๋ณผ๋ง ํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ํ์ฌ ๋ด๋ถ ํ์ด ์๋ ๊ฒฝ์ฐ
- ํ์ง๋ง ์์ฆ์ ๋ฐ์ ์๋๊ฐ ๋ ์ค์ํ๊ฒ ๋์๋ค.
- ์ธํฐ๋ท ๋ฐ๋ฌ๋ก ์๋ฒ์ ๋ฐฐํฌ๊ฐ ์ฉ์ด
- ๋ณด์ ํจ์น๋ฅผ ๋ ์์ฃผํด์ผ ํจ
- ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋์ค..
์ค๋ฌด์์ ๋ฐฉํฅ
- ํ์ฌ ์์ฒด ๊ฐ๋ฐํ ์์
- ํ๋ก๊ทธ๋๋จธ 100+ ๋ช
- ์ด 10๊ฐ์ ์ ํ ํ
- ์ฝ์ดํ
- 10๊ฐ์ ํ์ด ์ฌ์ฉํ๋ ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ฆ
- ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ด๋ถ์์๋ง ์ฌ์ฉ
- ์ฝ์ดํ์์ ํด๋์ค ํน์ ์ธํฐํ์ด์ค์ public ๋ฉ์๋ ์๊ทธ๋ด์ฒ๋ฅผ ๋ฐ๊ฟ
- 10๊ฐ์ ํ์ ๊ฐ๋ฐ ์ผ์ ์ ๋ง์ถฐ์ผ ํจ
- ํํ๊ณ ์์๋ฅผ ํด์ผ ํจ
- ์ด๋ฐ ์ํฉ์์ ์ธํฐํ์ด์ค์ ์ปคํ๋งํด๋๋ฉด ์กฐ๊ธ๋ ๋ซ๋ค.
ํต์ฌ์ ํด๋ผ์ด์ธํธ์์ ์ฝ์
- ๋จ์ํ ๊ตฌ์ฒด ํด๋์ค์์ ๊ฒฐํฉ๋๋ฅผ ์ค์ด๋ ๋ง๋์ ๋ฌธ์ ๊ฐ ์๋๋ค.
- ๋ฌด์์ ๋ณ๊ฒฝํ๊ณ ๋ฌด์์ ๋ณ๊ฒฝํ์ง ์์์ง์ ๋ํ ์ฝ์
- ๊ทธ ์ฝ์์ ๊นจ์ผํ ์ผ์ด ์๊ธด๋ค๋ฉด ์ผ์ ์กฐ์จ๊ณผ ๊ฐ์ ๊ฒ์ด ์ค์
- ์ดํด๋ฆฝ์ค api์ ๊ฐ์ ๋ฐฉ์์ ์ฝ์๋ ๊ทธ ์ค ํ๋
์์ฆ์ ์ ๋ฐ์ดํธ์ ์ต์
- ์์ฆ์ ๋ฒ์ ์ ์๋๊ฐ ๋นจ๋ผ์ก๋ค.
- ๊ทธ๋๋ ์ด๊ฒ์ด ์ผ์์ ์ผ๋ถ๋ผ ์๊ฐํ๋ ๊ฒฝํฅ์ด ์๋ค.
- ์๋ก์ด ๊ธฐ๋ฅ์ด๋ breaking ๋ณํ๋ ์ ๋ฒ์ ์๋ง ์ถ๊ฐ
- ๋ฒ์ ๋ณ๋ก ์ง์ ๊ธฐ๊ฐ์ ๋ช
์
- ์ง์ ๊ธฐ๊ฐ๋์ ์ค์ํ ์ ๋ฐ์ดํธ๋ฅผ ๋ชจ๋ ๋ฒ์ ์ ์ ์ฉํด์ผ ํจ
- ์ง์ ๊ธฐ๊ฐ์ด ๋๋๋ฉด ๋ค์ ๋ฒ์ ์ผ๋ก ์ฎ๊ฒจ์ผ ํจ
- ์ ๋ฐ์ดํธ ํ ์ค์๋์ ๊ณ ์น๋ ๊ฒ์ ํด๋ผ์ด์ธํธ์ ๋ชซ
- ๊ณ ํต์ ์ค์ด๊ธฐ ์ํ ๋ฐฉ๋ฒ๋ค
- migration ๊ฐ์ด๋ ์ ๊ณต
- LTS(Long-Term Support) ๋ฒ์ ์ ๊ณต
์ค์ฉ์ ์ธ ์ธํฐํ์ด์ค ์ฌ์ฉ๋ฒ ์ ๋ฆฌ
- ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋์ค ์ฌ์ฉ
- ๊ธฐ์กด: ๋ค์์ ๊ฒฝ์ฐ์๋ง ์ธํฐํ์ด์ค ์ฌ์ฉ
- ํจ์ ํฌ์ธํฐ
- ๋คํ์ฑ ์๋ ๋ค์ค ์์์ด ํ์ํ ๊ฒฝ์ฐ
- ์ถ๊ฐ: ๋ณํ์ ๋๋นํ ํ์๊ฐ ์๋ค๋ฉด ์ปคํ๋ง์ ์ค์ด๋ ค ์ฌ์ฉํ ๊ฒ
- ๋ด ํด๋์ค์ ์์กดํ๋ ์ฝ๋๋ค์ ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์๋ ๊ฒฝ์ฐ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋ด ํด๋์ค์ ์์กดํ๋ ์ฝ๋๋ค์ ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์๋ ๊ฒฝ์ฐ
๋ณํ์ ๋ํ ๋๋น๋?
์ฝ๊ฒ ๋ฐ๊ฟ ์ ์๋ ๊ฒฝ์ฐ์ ๋ํ ๋๋น
- ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์๋ค๋ฉด, ๊ทธ ๋ ์ธํฐํ์ด์ค๋ก ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
- ์์คํ ์ด ํฌ์ง ์๊ฑฐ๋
- ๋ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ธ๋ถ ํด๋ผ์ด์ธํธ์ ์๊ฐ ์ ๊ฑฐ๋
- ์ฌ๋ฌ ๋ฒ์ ์ ํน์ ๊ธฐ๊ฐ๋์ ์ง์ํ ์ ์๊ฑฐ๋.
์ ๋ฆฌ
- ๊ต์ฅํ ์ฃผ๊ด์ ์ธ ๋ด์ฉ์ด๋ค.
- ์ ๊ทน๋จ์ ์์นํ ๊ฒ์ ํญ์ ์๋ชป๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
- ์๊ฐ์ด ์ง๋ํ์๋ ๋ค์์ค์ด ๊ทธ๋๋ก ์ ์ง๋๊ณ ์๋ค๋ฉด, ํน์ ์ฌ๋์ด ์ฃผ์ฅํ๋ ๊ฒ์ด ์๋ชป๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
- ์์กด์ฑ, ๊ฒฐํฉ๋์ ๋ํ ์ ์์ ๋์ปคํ๋ง์์์ ์์กด์ฑ ์ฃผ์ , ๊ทธ๋ฆฌ๊ณ ๊ทธ์ ์ฅ๋จ์ ์ ์์๋ณด์๋ค.