-
์ธํฐํ์ด์คinterfaceJava 2022. 3. 5. 22:12
๐ ์ธํฐํ์ด์ค๋ ์ ํ์ํ ๊น?
ex) ์ฌ์๊ฐ ์ค๋ฉด ๋ฐ๋๋๋ฅผ ์ค๋ค, ํธ๋์ด๊ฐ ์ค๋ฉด ์ฌ๊ณผ๋ฅผ ์ค๋ค, ๊ธฐ๋ฆฐ์ด ์ค๋ฉด ๋ฐ๋๋๋ฅผ ์ค๋ค...
-> ๋๋ฌผ๋ค์ ์ข ๋ฅ๋งํผ์ feed ๋ฉ์๋๊ฐ ํ์ํ๋ ZooKeeper ํด๋์ค๋ฅผ Predator ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํด ๊ตฌํ
-> ๋จ ํ๊ฐ์ feed ๋ฉ์๋๋ก ๊ตฌํ
* ZooKeeper ํด๋์ค๊ฐ ๋๋ฌผ๋ค์ ์ข ๋ฅ์ ์์กด์ ์ธ ํด๋์ค์์ ๋๋ฌผ๋ค์ ์ข ๋ฅ์ ์๊ด์๋ ๋ ๋ฆฝ์ ์ธ ํด๋์ค๊ฐ ๋์๋ค
interface Predator { String getFood(); } class Animal { String name; void setName(String name) { this.name = name; } } class Tiger extends Animal implements Predator{ public String getFood() { return "apple"; } } class Lion extends Animal implements Predator{ public String getFood() { return "banana"; } } class ZooKeeper { void feed(Predator predator) { System.out.println("feed " + predator.getFood()); } }
* feed ๋ฉ์๋์ ์ ๋ ฅ์ผ๋ก Tiger, Lion์ ๊ฐ๊ฐ ํ์๋ก ํ์ง๋ง ์ด์ ๋ Predator๋ผ๋ ์ธํฐํ์ด์ค๋ก ๋์ฒดํ์๋ค.
* tiger - Tiger ํด๋์ค์ ๊ฐ์ฒด, Predator ์ธํฐํ์ด์ค์ ๊ฐ์ฒด : Tiger tiger = new Tiger();
lion - Lion ํด๋์ค์ ๊ฐ์ฒด, Predator ์ธํฐํ์ด์ค์ ๊ฐ์ฒด : Lion lion = new Lion();
๐ก ์ธํฐํ์ด์ค Interface
: interface ํค์๋ ์ด์ฉ(์์ฑ) -> implements ์ธํฐํ์ด์ค ๊ตฌํ
: ๋ชจ๋ ๋ฉ์๋๊ฐ ์ถ์ ๋ฉ์๋(abstract method)๋ก ์ด๋ค์ง ํด๋์ค
: ๋ฉ์๋์ ์ด๋ฆ๊ณผ ์ ์ถ๋ ฅ์ ๋ํ ์ ์๋ง ์๊ณ ๊ตฌํ ๋ด์ฉ์ ์๋ค
-> ์ธํฐํ์ด์ค๋ฅผ implementsํ ํด๋์ค๋ค์ด ๊ตฌํํด์ผํ๋ค
: ์ด๊ณณ์ ์ ์ธ๋ ๋ชจ๋ ๋ฉ์๋๋ public abstract๋ก ์ถ์๋ฉ์๋ : ์ธํฐํ์ด์ค ๋ฉ์๋๋ ํญ์ public์ผ๋ก ๊ตฌํ
: ์ด๊ณณ์ ์ ์ธ๋ ๋ชจ๋ ๋ณ์๋ public static final๋ก ์์
: ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ "๊ฐ์ ์ฑ"์ ๊ฐ๋๋ค
: extends๋ฅผ ์ด์ฉํ์ฌ ์ฌ๋ฌ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๋ค๋์์ ์์ํ ์ ์๋ค. == ๋ค์ค ์์
* ์ผ๋ฐ ํด๋์ค๋ ๋จ์ผ์์๋ง ๊ฐ๋ฅํ๋ค
๐ก ๋ํดํธ ๋ฉ์๋
: ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ ๋ชธํต(๊ตฌํ์ฒด)์ ๊ฐ์ง ์ ์์ง๋ง,
๋ํดํธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ค์ ๊ตฌํ๋ ํํ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์๋ค
: ๋ฉ์๋๋ช ๊ฐ์ฅ ์์ "default" ํ๊ธฐ
: ๋ํดํธ ๋ฉ์๋๋ ์ค๋ฒ๋ผ์ด๋ฉ์ด ๊ฐ๋ฅํ๋ค(์ฌ์ ์ ๊ฐ๋ฅ)
-> printFood ๋ฉ์๋๋ฅผ ์ค์ ํด๋์ค์์ ๋ค๋ฅด๊ฒ ๊ตฌํํ์ฌ ์ฌ์ฉ๊ฐ๋ฅํ๋ค
interface Predator { String getFood(); default void printFood() { System.out.printf("my food is %s",getFood()); } }
๐ก ์คํํฑ ๋ฉ์๋
: ์ธํฐํ์ด์ค๋ช .์คํํฑ๋ฉ์๋๋ช <- ์ฌ์ฉ๋ฒ
: ์ธํฐํ์ด์ค์ ์ ์ํ ์์๋ ์๋ตํด๋ ์๋์ผ๋ก public static final์ด ์ ์ฉ๋๋ค
interface Predator { String getFood(); int LEG_COUNT = 4; // ์ธํฐํ์ด์ค ์์ static int speed() { return LEG_COUNT * 30; } }
* Predator.speed(); ๋ก ์ฌ์ฉ
๐ ์ธํฐํ์ด์ค ๊ตฌํ๊ณผ ํ๋ณํ
: ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ ์ธํฐํ์ด์ค ํ์ผ๋ก ์ ์ธํ ๋ณ์๋ก ํ๋ณํ ๊ฐ๋ฅ
: ์์์์์ ํ๋ณํ๊ณผ ๋์ผํ ์๋ฏธ
: ๋จ, ํด๋์ค ์์๊ณผ ๋ฌ๋ฆฌ ๊ตฌํ์ฝ๋๊ฐ ์๊ธฐ์ ์ฌ๋ฌ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์์
: ํ๋ณํ์ ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋๋ ์ธํฐํ์ด์ค์ ์ ์ธ๋ ๋ฉ์๋๋ง ์ฌ์ฉ๊ฐ๋ฅ
๐ ์ธํฐํ์ด์ค์ ๋คํ์ฑ
: ์ธํฐํ์ด์ค๋ "Client Code"์ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ "๊ฐ์ฒด" ์ฌ์ด์ ์ฝ์
: ์ด๋ค ๊ฐ์ฒด๊ฐ ์ด๋ค interface ํ์ ์ด๋ผ ํจ์ ๊ทธ interface๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ค๋ ์๋ฏธ
: Client๋ ์ด๋ป๊ฒ ๊ตฌํ๋์๋์ง ์๊ด์์ด interface์ ์ ์๋ง์ ๋ณด๊ณ ์ฌ์ฉํ ์ ์์
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฝ์ ์ ์ถ๋ ฅ Scanner (0) 2022.04.11 ๊ธฐ๋ณธ ํด๋์ค(Object, String, Class) (0) 2022.03.06 ๋งต(Map), ์งํฉ(Set), ์์์งํฉ(Enum) (0) 2022.03.05 ํ ํ๋ฆฟ ๋ฉ์๋ (0) 2022.03.04 ์ถ์ ํด๋์ค (0) 2022.03.04