All :L
[Java] ์ธํฐํ์ด์ค (Interface) ๋ณธ๋ฌธ
๋ฐ์ํ
๐ abstract class
1๏ธโฃ abstract class ์๋ฏธ
- ์์ ํด๋์ค์์ ๋ฐ๋์ ์ฌ์ ์ํด์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์กฐ์์ ๊ตฌํ์ด ๋ฌด์๋ฏธํ ๋ฉ์๋
- ๋ฉ์๋์ ์ ์ธ๋ถ๋ง ๋จ๊ธฐ๊ณ ๊ตฌํ๋ถ๋ ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ๋์ฒด
- ๊ตฌํ๋ถ๊ฐ ์๋ค๋ ์๋ฏธ๋ก abstract ํค์๋๋ฅผ ๋ฉ์๋ ์ ์ธ๋ถ์ ์ถ๊ฐ
- ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ ํด๋์ค๋ผ๋ ์๋ฏธ๋ก ํด๋์ค ์ ์ธ๋ถ์ abstract ์ถ๊ฐ
- ๊ณตํต ๋ถ๋ชจ๋ฅผ ๋ฝ์ ์์ ๊ตฌ์กฐ
- ์์ ๊ด๊ณ ์ ์๋ฅผ ํตํ ํด๋์ค ์ ๋น
- ๊ด๊ณ๋ฅผ ํตํ ๊ฐ์ฒด ํ์ฉ
2๏ธโฃ abstract class ํน์ง
- abstract ํด๋์ค๋ ์์ ์ ์ฉ ํด๋์ค
- ์์์ abstract method ์ฌ์ ์ํ ์ฑ ์
- ํด๋์ค์ ๊ตฌํ๋ถ๊ฐ ์๋ ๋ฉ์๋๊ฐ ์์ผ๋ฏ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ X
- ์์ ํด๋์ค ํ์ ์ผ๋ก์จ ์์์ ์ฐธ์กฐ ๊ฐ๋ฅ
- ์กฐ์ ํด๋์ค์์ ์์๋ฐ์ abstract ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํ์ง ์์ ๊ฒฝ์ฐ
- ํด๋์ค ๋ด๋ถ์ abstract ๋ฉ์๋๊ฐ ์๋ ์ํฉ์ด๋ฏ๋ก ์์ ํด๋์ค๋ abstract ํด๋์ค๋ก ์ ์ธ๋์ด์ผ ํจ.
3๏ธโฃ abstract class ์ฌ์ฉ ์ด์
- abstract ํด๋์ค๋ ๊ตฌํ์ ๊ฐ์ ๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ ์์ ์ฑ ํฅ์
- interface์ ์๋ ๋ฉ์๋ ์ค ๊ตฌํํ ์ ์๋ ๋ฉ์๋๋ฅผ ๊ตฌํํด ๊ฐ๋ฐ์ ํธ์ ์ง์
๐ interface
1๏ธโฃ ์ธํฐํ์ด์ค ์๋ฏธ
- ์๋ก ๋ค๋ฅธ ๋ ์์คํ , ์ฅ์น, ์ํํธ์จ์ด ๋ฐ์๋ฅผ ์๋ก ์ด์ด์ฃผ๋ ๋ถ๋ถ, ๋๋ ๊ทธ๋ฐ ์ ์ ์ฅ์น
- GUI(Graphic User Interface): ํ๋ก๊ทธ๋จ๊ณผ ์ฌ์ฉ์ ์ฌ์ด์ ์ ์
2๏ธโฃ ์ธํฐํ์ด์ค ์์ฑ
- ์ธํฐํ์ด์ค ์์ฑ
- ์ต๊ณ ์์ค์ ์ถ์ํ ๋จ๊ณ : ์ผ๋ฐ ๋ฉ์๋๋ ๋ชจ๋ abstract ํํ
- ํด๋์ค์ ์ ์ฌํ๊ฒ interface ์ ์ธ
- ๋ฉค๋ฒ ๊ตฌ์ฑ
- ๋ชจ๋ ๋ฉค๋ฒ๋ณ์๋ public static final์ด๋ฉฐ, ์๋ต ๊ฐ๋ฅ
- ๋ชจ๋ ๋ฉ์๋๋ public abstract์ด๋ฉฐ, ์๋ต ๊ฐ๋ฅ
3๏ธโฃ ์ธํฐํ์ด์ค ์์
- ์ธํฐํ์ด์ค ์์
- ํด๋์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธํฐํ์ด์ค๋ extends๋ฅผ ์ด์ฉํด ์์ ๊ฐ๋ฅ
- ํด๋์ค์ ๋ค๋ฅธ ์ ์ ์ธํฐํ์ด์ค๋ ๋ค์ค ์์ ๊ฐ๋ฅ
- ํท๊ฐ๋ฆฌ ๋ฉ์๋ ๊ตฌํ ์์ฒด๊ฐ X
4๏ธโฃ ์ธํฐํ์ด์ค ๊ตฌํ๊ณผ ๊ฐ์ฒด ์ฐธ์กฐ
- ์ธํฐํ์ด์ค ๊ตฌํ๊ณผ ๊ฐ์ฒด ์ฐธ์กฐ
- ํด๋์ค์์ implements ํค์๋๋ฅผ ์ฌ์ฉํด interface ๊ตฌํ
- implementsํ ํด๋์ค๋ ๋ชจ๋ abstract ๋ฉ์๋๋ฅผ overrideํด์ ๊ตฌํ
- but, ๊ตฌํํ์ง X → abstract ํด๋์ค๋ก ํ์
- ์ฌ๋ฌ ๊ฐ์ interface implements ๊ฐ๋ฅ
- ๋คํ์ฑ์ ์กฐ์ ํด๋์ค ๋ฟ ์๋๋ผ ์กฐ์ ์ธํฐํ์ด์ค์๋ ์ ์ฉ
- interface์์ ๊ด๊ณ๋ is a ๊ด๊ณ์ด์ง๋ง ์ข ๋ ์ธ๋ถ์ ์ผ๋ก is able to๋ผ๊ณ ํจ
๐ interface์ ํ์์ฑ
1๏ธโฃ ์ธํฐํ์ด์ค์ ํ์์ฑ
- ๊ตฌํ์ ๊ฐ์ ๋ก ํ์คํ ์ฒ๋ฆฌ - abstract ๋ฉ์๋ ์ฌ์ฉ
- ์ธํฐํ์ด์ค๋ฅผ ํตํ ๊ฐ์ ์ ์ธ ํด๋์ค ์ฌ์ฉ์ผ๋ก ์์ฌ์ด ๋ชจ๋ ๊ต์ฒด ์ง์
- ์๋ก ์์์ ๊ด๊ณ๊ฐ ์๋ ํด๋์ค๋ค์๊ฒ ์ธํฐํ์ด์ค๋ฅผ ํตํ ๊ด๊ณ ๋ถ์ฌ๋ก ๋คํ์ฑ ํ์ฅ
- ๋ชจ๋ ๊ฐ ๋ ๋ฆฝ์ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ฅ → ๊ฐ๋ฐ ๊ธฐ๊ฐ ๋จ์ถ
2๏ธโฃ default method
- ์ธํฐํ์ด์ค์ ์ ์ธ๋ ๊ตฌํ๋ถ๊ฐ ์๋ ์ผ๋ฐ ๋ฉ์๋
- ๋ฉ์๋ ์ ์ธ๋ถ์ default modifier ์ถ๊ฐ ํ ๋ฉ์๋ ๊ตฌํ๋ถ ์์ฑ(public์ผ๋ก ํ์ ๋จ)
- ํ์์ฑ
- ๊ธฐ์กด์ interface ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ interface์ ์ถ๊ฐํด์ผ ํ๋ ๊ธฐ๋ฅ ๋ฐ์
- abstract ๋ฉ์๋๋ ๋ชจ๋ ๊ตฌํ์ฒด๋ค์ด ์ถ๊ฐ๋๋ ๋ฉ์๋๋ฅผ override ํด์ผ ํจ.
- default ๋ฉ์๋๋ abstract๊ฐ ์๋๋ฏ๋ก ๋ฐ๋์ ๊ตฌํํด์ผ ํ ํ์๋ ์์ด์ง.
- ์ถฉ๋
- JDK1.7 ์ดํ → interface method์ ๊ตฌํ๋ถ๊ฐ ์์ผ๋ฏ๋ก ์ถฉ๋์ด ์์์
- JDK1.8 ์ดํ → default method๊ฐ ์๊ธฐ๋ฉด์ ๋์ผํ ์ด๋ฆ์ ๊ฐ๋ ๊ตฌํ๋ถ๊ฐ ์๋ ๋ฉ์๋ ์ถฉ๋
- ์ฐ์ ์์
- super class์ method ์ฐ์ → super class๊ฐ ๊ตฌ์ฒด์ ์ธ ๋ฉ์๋๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ default method๋ ๋ฌด์๋จ
- interface๊ฐ์ ์ถฉ๋ → ํ๋์ interface์์ default method๋ฅผ ์ ๊ณตํ๊ณ ๋ค๋ฅธ interface์์๋ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋(default ์ ๋ฌด์ ๋ฌด๊ด)๊ฐ ์์ ๋ sub class๋ ๋ฐ๋์ overrideํด์ ์ถฉ๋ ํด๊ฒฐ
3๏ธโฃ static method
- interface์ ์ ์ธ๋ static method
- ์ผ๋ฐ static ๋ฉ์๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณ๋์ ๊ฐ์ฒด ํ์ X
- ๊ตฌํ์ฒด ํด๋์ค ์์ด ๋ฐ๋ก ์ธํฐํญ์ใ ก ์ด๋ฆ์ผ๋ก ๋ฉ์๋์ ์ ๊ทผํด์ ์ฌ์ฉ
4๏ธโฃ private method
- interface์ body๋ฅผ ๊ฐ์ง๋ ๋ฉ์๋๊ฐ ๋ฑ์ฅํ๋ฉด์ ๊ณตํต์ ์ผ๋ก ์ฒ๋ฆฌํ ๋ชจ๋ ๋ฐ์
- ์ธ๋ถ๋ก ๊ณต๊ฐํ ํ์ X ๋ฉ์๋ ์ง์ ์ ์ํด private method ์ถ๊ฐ
- defaul ํค์๋๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ static ์ฒ๋ฆฌ ๊ฐ๋ฅ
๋ฐ์ํ
'STUDY > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์ปฌ๋ ์ (Collection) (1) | 2024.10.30 |
---|---|
[Java] ์ ๋ค๋ฆญ (Generic) (2) | 2024.10.28 |
[Java] ๋คํ์ฑ (Polymorphism) (0) | 2024.10.24 |
[Java] ์์ (Inheritance) (0) | 2024.10.20 |
[Java] ์ถ์ํ (Abstraction) (0) | 2024.10.18 |
Comments