Java | ์ธํฐํ์ด์ค(Interface)
- -
๊ณต๋ถํ๊ฑฐ ์์ง ์์ผ๋ ค๊ณ ํ๋ฃจ ํ๋ฃจ ์งฌ๋ด์ ๋จ๊ธฐ๋๋ฐ..
์ด๋ฏธ ์์์ ๊ณต๋ถํ๊ฑด ์ฐ๋๋ฏธ๊ณ ์์ง ๊ธ๋ก ๋ด์๋ด์ง ๋ชปํ ํํธ๊ฐ ๋ง์๋ฐ..
์ด๊ฑธ ๋ค ์ด์ฉ๋ค.. ( /_ \ )
์๋ง ๋ง๊ณ ์ผ๋จ ์จ..
[์ถ์ฒ : ์ ํ ํฌ ์๋ฐ]
์ธํฐํ์ด์ค(Interface)
๊ทน๋จ์ ์ผ๋ก ๋์ผํ ๋ชฉ์ ํ์ ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ๊ฒ๋ ๊ฐ์ ํ๋ ๊ฒ
= ์๋ฐ์ ๋คํฅ์ฑ์ ๊ทน๋ํํ์ฌ ๊ฐ๋ฐ์ฝ๋ ์์ ์ ์ค์ด๊ณ ํ๋ก๊ทธ๋จ ์ ์ง๋ณด์์ฑ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉ
[์ถ์ฒ : Limky ์ฝ์ง๋ธ๋ก๊ทธ]
๋๋ฌผ์ ์ฌ์ก์ฌ๊ฐ ํ๋ ์ผ
๋ ๋๋ฌผ์์ ์ฌ์ก์ฌ์ด๋ค.
์ก์๋๋ฌผ์ด ๋ค์ด์ค๋ฉด ๋ ๋จน์ด๋ฅผ ๋์ ธ์ค๋ค.
ํธ๋์ด๊ฐ ์ค๋ฉด ์ฌ๊ณผ๋ฅผ ๋์ ธ์ค๋ค.
์ฌ์๊ฐ ์ค๋ฉด ๋ฐ๋๋๋ฅผ ๋์ ธ์ค๋ค.
ํด๋์ค ์์ฑ
class Animal5 {
String name;
void setName(String name) {
this.name = name;
}
}
class Tiger5 extends Animal5 {
}
class Lion5 extends Animal5 {
}
class ZooKeeper5 {
// ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ ์ฌ์ฉ
void feed(Tiger5 tiger) { // ํธ๋์ด๊ฐ ์ค๋ฉด ์ฌ๊ณผ๋ฅผ ๋์ ธ ์ค๋ค.
System.out.println("feed apple");
}
void feed(Lion5 lion) { // ์ฌ์๊ฐ ์ค๋ฉด ๋ฐ๋๋๋ฅผ ๋์ ธ์ค๋ค.
System.out.println("feed banana");
}
}
public class A5_Interface {
public static void main(String[] args) {
ZooKeeper5 zooKeeper = new ZooKeeper5();
Tiger5 tiger = new Tiger5();
Lion5 lion = new Lion5();
zooKeeper.feed(tiger); // feed apple ์ถ๋ ฅ
zooKeeper.feed(lion); // feed banana ์ถ๋ ฅ
}
}
์ฌ๊ธฐ์ ๋๋ฌผ์์ ๋๋ฌผ์ด ํธ๋์ด, ์ฌ์ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์ข ๋ฅ์ ๋๋ฌผ์ด ๋์ด๋ ๊ฒฝ์ฐ ์์ ์ฝ๋์ฒ๋ผ ๋ฐ๋ณต์ ์ธ feed ๋ฉ์๋๋ฅผ ์ถ๊ฐํด์ผํ๋ค.
์ด๋ฐ ๋ถํธํจ๊ณผ ๊ท์ฐฎ์์ ๊ทน๋ณตํ๊ธฐ ์ํ ์ธํฐํ์ด์ค์ ๋์์ด ํ์ํ๋ค.
์ธํฐํ์ด์ค ์์ฑ
์ก์๋๋ฌผ(Predator5) ์ ๊ตฌ๋ถ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ๋ค.
์ธํฐํ์ด์ค๋ interface ๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
interface Predator5 {
}
class Animal5 {
String name;
void setName(String name) {
this.name = name;
}
}
(... ์๋ต ...)
๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋๋ฌผ ํด๋์ค์ ์์ฑํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค.
๊ตฌํํ๋ ํค์๋๋ implements ๋ฅผ ์ฌ์ฉํ๋ค.
(... ์๋ต ...)
class Tiger5 extends Animal5 implements Predator5 {
}
class Lion5 extends Animal5 implements Predator5 {
}
(... ์๋ต ...)
์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํจ์ ๋ฐ๋ฅธ ์ฌ์ก์ฌ ํด๋์ค๋ฅผ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝํ ์ ์๋ค.
(... ์๋ต ...)
class ZooKeeper5 {
void feed(Predator5 predator) {
System.out.println("feed apple");
}
}
(... ์๋ต ...)
์ด๋ฐ์์ผ๋ก ์ฌ์ก์ฌ ํด๋์ค์๋ ๋ฐ๋ก ์ถ๊ฐํ ํ์ ์์ด feed ๋ฉ์๋ ํ๋๋ง ๋จ์ ์์ ์ ์๋ค.
์ก์๋๋ฌผ์ด ์ถ๊ฐ๋๋ค๋ฉด ์๋์ ๊ฐ์ด ๊ตฌํํ๋ค.
class Crocodile extends Animal implements Predator {
}
์ธํฐํ์ด์ค์ ๋ฉ์๋
์์์ feed ๋ฉ์๋์ ๋ฐ๋ณต์ ์๋ฐฉํ๊ณ ์ก์๋๋ฌผ์ ์ถ๊ฐ๋ฅผ ์ข ๋ ํธํ๊ฒ ๋ง๋ค์ด์ฃผ์๋ค.
์ด์ ๋ ๋ค๋ฅธ ๋ฌธ์ ๋ฅผ ๋ณผ ์ ์๋ค.
๋๋ฌผ์ ๋ฐ๋ฅธ ์ฌ์ก์ฌ์ ํ๋์ ๊ตฌ๋ถํด์ผํ๋๋ฐ, ์ฌ์ก์ฌ ํด๋์ค๋ฅผ ๋ณด๋ฉด์ ์ฌ๊ณผ๋ง ์ฃผ๋ ๊ฒ์ผ๋ก ๋์ด์๋ค.
ํธ๋์ด๋ ์ฌ๊ณผ, ์ฌ์๋ ๋ฐ๋๋ ๋ก ๊ตฌ๋ถํด์ค์ผํ๋๋ฐ
์ธํฐํ์ด์ค๋ฅผ ์์ ํด์ฃผ๋ฉด ๋๋ค.
interface Predator {
String getFood();
}
(... ์๋ต ...)
๋ด์ฉ ์์ด ๋ฉ์๋์ ์ด๋ฆ๊ณผ ์ ์ถ๋ ฅ์ ๋ํ ์ ์๋ง ์๋ ๊ฒฝ์ฐ๋ ์ธํฐํ์ด์ค์ ๊ท์น ๋๋ฌธ์ด๋ค.
์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ก์๋๋ฌผ์ ๋ฉ์๋๋ ์ถ๊ฐํด์ค๋ค.
class Tiger5 extends Animal5 implements Predator5 { // 'implements Predator5' ๋ฌธ์๋ฅผ ๋ถ์ฌ์ฃผ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค.
public String getFood5() { // ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ ํญ์ public์ผ๋ก ๊ตฌํํด์ผ ํ๋ค.
return "apple";
}
}
class Lion5 extends Animal5 implements Predator5 {
public String getFood5() {
return "banana";
}
}
์ด์ ๋ ์ ํํ ์ถ๋ ฅ๊ฐ์ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ก์ฌ์ ํ๋์ ๋ํ ์ถ๋ ฅ์ ์์ ํด์ค๋ค.
class ZooKeeper5 {
void feed(Predator5 predator5) {
System.out.println("feed " + predator5.getFood5());
}
}
predator5.getFood5()๋ฅผ ํธ์ถํจ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด์ธ ์ก์๋๋ฌผ์ getFood() ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.
์ธํฐํ์ด์ค์ ํต์ฌ๊ณผ ๊ฐ๋
์ธํฐํ์ด์ค๋ ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ๋ฐ๋์ ๊ตฌํํด์ผ ํ๋ ๊ฐ์ ์ฑ์ ๊ฐ๋๋ค.
์ธํฐํ์ด์ค์ ๋ฌธ๋ฒ๊ณผ ๋คํฅ์ฑ
public interface ์ธํฐํ์ด์ค๋ช
{
//์์
ํ์
์์๋ช
= ๊ฐ;
//์ถ์ ๋ฉ์๋
ํ์
๋ฉ์๋๋ช
(๋งค๊ฐ๋ณ์, ... );
//๋ํดํธ ๋ฉ์๋
default ํ์
๋ฉ์๋๋ช
(๋งค๊ฐ๋ณ์, ... ){
//๊ตฌํ๋ถ
}
//์ ์ ๋ฉ์๋
static ํ์
๋ฉ์๋๋ช
(๋งค๊ฐ๋ณ์) {
//๊ตฌํ๋ถ
}
}
- ์์ : ์ธํฐํ์ด์ค์์ ๊ฐ์ ์ ํด์คํ ๋ ํจ๋ถ๋ก ๋ฐ๊พธ์ง ๋ง๊ณ ์ ๊ณตํด์ฃผ๋ ๊ฐ๋ง ์ฐธ์กฐํด๋ผ (์ ๋์ )
- ์ถ์๋ฉ์๋ : ๊ฐ์ด๋๋ง ์คํ ๋ ์ถ์๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ดํ ํด์ ์ฌ๊ตฌํํด๋ผ. (๊ฐ์ ์ )
- ๋ํดํธ๋ฉ์๋ : ์ธํฐํ์ด์ค์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํด์ฃผ์ง๋ง, ๋ง์ ์๋ค๋ฉด ๊ฐ์ ๊ตฌํํด์ ์จ๋ผ. (์ ํ์ )
- ์ ์ ๋ฉ์๋ : ์ธํฐํ์ด์ค์์ ์ ๊ณตํด์ฃผ๋ ๊ฒ์ผ๋ก ๋ฌด์กฐ๊ฑด ์ฌ์ฉ (์ ๋์ )
[์ถ์ฒ : Limky ์ฝ์ง๋ธ๋ก๊ทธ]
์ผ๋ฐ์ ์ผ๋ก ์ธํฐํ์ด์ค๋ผ๋ ์ฌ์ฉํ๋ ์ด์ ์ ๊ทธ ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๊ฒ ์์๋ณผ ์ ์์๋๋ฐ,
๋ฌธ๋ฒ์ด๋ ๋คํฅ์ฑ์ ๋ํ ์ฌ๋ฌ๊ฐ์ง ์ํฉ์ ๋ฐ๋ฅธ ์ฌ์ฉ์ด ์ต์ํ์ง ์์ ์ค์ ์์ ์ฌ์ฉํ ์ ์๋์ง์ ๋ํ ๊ฑฑ์ ์ด ๋ค์๋ค.
๊ฒฐ๊ตญ ํ๋ค๋ณด๋ฉด ๋๊ฒ ์ง ๋ง์ธ๋..
์ค๊ณต์!!
'๐ป ๊ณต๋ถ ๊ธฐ๋ก > โ Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java | ์ถ์ ํด๋์ค(Abstract Class) (0) | 2023.01.06 |
---|---|
Java | ๋คํ์ฑ(Polymorphism) (0) | 2023.01.06 |
Java | ์์ฑ์(Constructor) (0) | 2023.01.06 |
Java | ์์(Inheritance) (0) | 2023.01.06 |
Java | ๋ฉ์๋(Method) (0) | 2023.01.06 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค