1. ๋ฉ์ ์ ๊ธฐ๋ฅ๊ณผ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ์๋ ํ๋ก๊ทธ๋จ ์คํ ( ์์๊ณผ ์ธํฐํ์ด์ค ๋ชจ๋ ์ฌ์ฉ )
- ๋ฌธ๋ฒ์ ์ผ๋ก๋ ์ ํฉํ๋ ๋์ ๋ฐ์ธ๋ฉx
NetworkAdapter2 (interface ๋ถ๋ชจ ํด๋์ค)
public interface NetworkAdapter2 {
void connect();
default void description() {
System.out.println("์๋ฐ 8์์ ์ถ๊ฐ๋ ์๋ก์ด ๋ฌธ๋ฒ");
}
}
Chat (Class ๋ถ๋ชจ ํด๋์ค)
public class Chat {
Chat() {}
// ๋ฉ์์ง ๋ณด๋ด๋ ๊ธฐ๋ฅ
void sendMsg() {
System.out.println("๋ฉ์์ง๋ฅผ ๋ณด๋
๋๋ค.");
}
// ๋ฉ์์ง ๋ฐ๋ ๊ธฐ๋ฅ
void rcvMsg() {
System.out.println("๋ฉ์์ง๋ฅผ ๋ฐ์ต๋๋ค.");
}
}
WiFi (์์ ํด๋์ค)
class WiFi extends Chat implements NetworkAdapter2 {
String company;
String name;
Wifi(String company, String name) {
this.company = company;
this.name = name;
}
@Override
public void connect() {
System.out.println(company + " WiFi์ ์ฐ๊ฒฐ๋์์ต๋๋ค.");
}
@Override
public void sendMsg() {
System.out.println(name + "์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋
๋๋ค.");
}
@Override
public void rcvMsg() {
System.out.println(name + "(์ผ)๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ๋ฐ์ต๋๋ค.");
}
}
5G (์์ ํด๋์ค)
class FiveG extends Chat implements NetworkAdapter2 {
String company;
String name;
FiveG(String company, String name) {
this.company = company;
this.name = name;
}
@Override
public void connect() {
System.out.println(company + " 5G์ ์ฐ๊ฒฐ๋์์ต๋๋ค.");
}
@Override
public void sendMsg() {
System.out.println(name + "์๊ฒ ๋ฉ์์ง๋ฅผ ๋ณด๋
๋๋ค.");
}
@Override
public void rcvMsg() {
System.out.println(name + "(์ผ)๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ๋ฐ์ต๋๋ค.");
}
}
์์(extends)์ 1๊ฐ๋ง ๊ฐ๋ฅ(๋ค์ค์์ ์ง์X)
์ธํฐํ์ด์ค ์์(implements)์ ์ฌ๋ฌ๊ฐ ๊ฐ๋ฅ
Main
import java.util.Scanner;
public class Interface2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("๋คํธ์ํฌ๋ฅผ ์ ํํ์ธ์. [1]Wi-Fi [2]5G : ");
int num = sc.nextInt();
if(num == 1) {
WiFi wifi = new WiFi("SKT","ํ๊ธธ๋");
wifi.connect();
wifi.sendMsg();
wifi.rcvMsg();
} else {
FiveG fiveg = new FiveG("KT", "์๊บฝ์ ");
fiveg.connect();
fiveg.sendMsg();
fiveg.rcvMsg();
}
}
}
์๋์ ์ ํ๋๋ฐ...
๋ฉ์ ์ ๊ธฐ๋ฅ๊ณผ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋ฌถ์ฌ์๊ธฐ ๋๋ฌธ์ ๋์ ๋ฐ์ธ๋ฉ ๋ถ๊ฐ.
์ข์ ์ค๊ณ๊ฐ ์๋.
์ํ๋ ๋ฐฉํฅ์ ๋ฌธ์๋ฅผ ๋ณด๋ผ ๋ ์๋์ผ๋ก ์ ํฉํ ๋คํธ์ํฌ๊ฐ ์ฐ๊ฒฐ๋๋ ๊ฒ
์ฌ์ค ์๋ฐ๋ง์ผ๋ก๋ ์ ๋ง ์๋์ผ๋ก ๋คํธ์ํฌ๋ฅผ ์ฐพ๊ธฐ๋ ๋ถ๊ฐํ๋ ์ด๊ฑด ์กฐ๊ฑด๋ฌธ์ผ๋ก ๊ตฌํ
2. ๋ฉ์ ์ ๊ธฐ๋ฅ๊ณผ ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋ถ๋ฆฌํ '์ฝ์ฝ์ํก' ํ๋ก๊ทธ๋จ
NetworkAdapter3 (interface ๋ถ๋ชจ ํด๋์ค)
public interface NetworkAdapter3 {
void send(String msg);
}
WiFi
class Wifi implements NetworkAdapter3 {
@Override
public void send(String msg) {
System.out.println("WiFi >> " + msg);
}
5G
class FiveG implements NetworkAdapter3 {
@Override
public void send(String msg) {
System.out.println("5G >>> " + msg);
}
CocoaTalk
import java.util.Scanner;
public class CocoaTalk {
private String to; // ์๋๋ฐฉ ์ด๋ฆ
private String msg; // ์ ๋ฌํ ๋ฉ์์ง
public CocoaTalk() {
Scanner sc = new Scanner(System.in);
System.out.print("๋ฐ๋ ์ฌ๋ : ");
to = sc.next();
this.to = to;
}
public void writeMsg() {
Scanner sc = new Scanner(System.in);
System.out.print("๋ฉ์์ง : ");
msg = sc.nextLine();
this.msg = "To. " + to + " : " + msg;
}
public void send(NetworkAdapter3 na) {
na.send(msg);
}
}
Main
import java.util.Scanner;
public class CocoaMain {
public static void main(String[] args) {
CocoaTalk cocoaTalk = new CocoaTalk();
cocoaTalk.writeMsg();
NetworkAdapter3 adapter3;
Scanner sc = new Scanner(System.in);
System.out.print("๋คํธ์ํฌ๋ฅผ ์ ํํ์ธ์. [1]Wi-Fi [2]5G : ");
int sel = sc.nextInt();
if(sel == 1) adapter3 = new Wifi();
else adapter3 = new FiveG();
cocoaTalk.send(adapter3);
}
}
NetworkAdapter3๋ interfaceํด์ send()๋ฅผ ์ ์ธ. send()์ ๊ตฌ์ฒด์ ์ธ ๊ธฐ๋ฅ ๊ตฌํ์ ๋ชฐ๋ผ๋ ๋จ.
NetworkAdapter3๋ฅผ ์์๋ฐ์ ์์ ํด๋์ค๋ค์ send()์ ๊ตฌ์ฒด์ ์ธ ๊ธฐ๋ฅ ๊ตฌํ์ ๋ฃ๋๋ค.
๊ธฐ๋ฅ์ ๊ฐ ํด๋์ค์ ๋ง๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ถ๋ ฅ (Wi-Fi, 5G)
๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ CocoaTalk์ ๋คํธ์ํฌ์ ๋ํด ์ ํ ๋ชฐ๋ผ๋ ๋๋ค. ์ค์ง ๋ฌธ์๋ฅผ ๋ณด๋ด๋ ๊ฒ์๋ง ์ง์ค
์ถํ ๋คํธ์ํฌ๊ฐ ์๋ฌด๋ฆฌ ์ถ๊ฐ๋๋ค ํ๋ค CocoaTalk ์์ค๋ฅผ ๊ณ ์น ํ์ ์๋ค.
์ด์ฒ๋ผ ์๋ก ๋์จํ ๊ด๊ณ ..
์ฆ ์์กดํ์ง ์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์๋ฐ์ ๊ฐ์ฒด์งํฅ ๊ฐ๋ ์์ ๊ฐ์ฅ ์ค์ํ๋ค.