μΈν°νμ΄μ€?
μμ μΆμν κ°λ
μΌλ‘ μΈν°νμ΄μ€μ ν¬ν¨λ λ©μλλ μΌλ°μ μΌλ‘ μ λΆ μΆμ λ©μλμ΄λ€.
λ©μλλ₯Ό μ μΈνλ©΄ κΈ°μ
μ¬λΆ μκ΄μμ΄ public abstract ν€μλλ‘ λμνλ€.
(=> μλΆμ¬λ JVMμ΄ μλμΌλ‘ λΆμ)
μΈν°νμ΄μ€ μμ ν€μλλ implements
μ‘°κΈ λ μμΈν νμ΄μ μ€λͺ
νμλ©΄...
μ°μ μλ°μμλ λ€μ€μμμ μ§μνμ§ μλλ€. (λ©μλ μΆμ²κ° λͺ¨νΈν΄μ§λ λ¬Έμ κ° μκΈ° λλ¬Έμ)
νμ§λ§! μμ ν΄λμ€κ° μ¬λ¬ λΆλͺ¨ ν΄λμ€λ₯Ό μμλ°μ μ μλ€λ©΄ λ€μν λμμ μνν μ μλ λ€μ€μμμ λ²λ¦΄ μ μκΈ°μ μλ°μμλ μΈν°νμ΄μ€λΌλ κ²μ ν΅ν΄ λ€μ€ μμμ μ§μνκ³ μλ€.
μ¦, μΈν°νμ΄μ€(interface)λ λ€λ₯Έ ν΄λμ€λ₯Ό μμ±ν λ κΈ°λ³Έμ΄ λλ νμ μ 곡νλ©΄μ,
λ€λ₯Έ ν΄λμ€ μ¬μ΄μ μ€κ° λ§€κ° μν κΉμ§ λ΄λΉνλ μΌμ’
μ μΆμ ν΄λμ€λ₯Ό μλ―Ένλ€.
μΈν°νμ΄μ€λ μ€λ‘μ§ μΆμ λ©μλμ μμλ§ ν¬ν¨ κ°λ₯!!!!!!!!!!!!!
- μμ : λͺ¨λ νλλ μλμΌλ‘ μμ(final static)μΌλ‘ λ³ν
- λ©μλ : λͺ¨λ λ©μλλ μλμΌλ‘ public abstractκ° μΆκ°λμ΄ μΆμ λ©μλλ‘ λ³κ²½λλ€.
λΉμ°νκ²λ μμ λ°μ ν΄λμ€μμ 무쑰건 ꡬνν΄μΌ ν¨.
- default λ©μλ : μ΄λ¦μμ μ μ μλ―μ΄ μ κ·Όμ νμμ΄λ©°, μλ° λ²μ 1.8λΆν° μΆκ°λ λ¬Έλ²μ΄λ€.
μ μΌνκ² κ΅¬νλΆλ₯Ό κ°μ§ μ μμΌλ©°, μμ λ°μ ν΄λμ€μμ μ¬μ μνμ¬ μ¬μ© κ°λ₯ν¨.
- μ μ λ©μλ : κ°μ²΄μ μκ΄μμ΄ μΈν°νμ΄μ€ νμ
μΌλ‘ μ¬μ© κ°λ₯
μΈν°νμ΄μ€ μ μΈ
μ κ·Όμ μ΄μ interface μΈν°νμ΄μ€μ΄λ¦ {
public static final λ°μ΄ν°νμ
λ³μλͺ
= κ°;
...
public abstract λ©μλμ΄λ¦(λ§€κ°λ³μ λͺ©λ‘) {
}
}
μΈν°νμ΄μ€μ λͺ¨λ νλλ public static final , λͺ¨λ λ©μλλ public abstract μ¬μΌ ν¨.
μ΄ λΆλΆμ λͺ¨λ μΈν°νμ΄μ€μ 곡ν΅μΌλ‘ μ μ©λκΈ° λλ¬Έμ μλ΅ κ°λ₯^^
μ»΄νμΌν λ μ»΄νμΌλ¬κ° μλμΌλ‘ μΆκ°ν΄ μ€.
μΈν°νμ΄μ€ ꡬν
μΈν°νμ΄μ€λ μΆμ ν΄λμ€μ λ§μ°¬κ°μ§λ‘ μμ μ΄ μ§μ κ°μ²΄λ₯Ό μμ±ν μ μμ.
λ°λΌμ μΈν°νμ΄μ€κ° ν¬ν¨νκ³ μλ μΆμ λ©μλλ₯Ό ꡬνν΄ μ€ ν΄λμ€λ₯Ό μμ±ν΄μΌ νλ€.
class ν΄λμ€μ΄λ¦ implements μΈν°νμ΄μ€μ΄λ¦ {...}
μΈν°νμ΄μ€ κΈ°λ³Έ μμ )
NetworkAdapter(interface Class..λΆλͺ¨ ν΄λμ€)
public interface NetworkAdapter {
void connect(); // public abstractκ° ν¬ν¨λμ΄ μμ..
}
Wifi(μμλ°μ μμ ν΄λμ€)
class Wifi implements NetworkAdapter {
String company;
Wifi(String company) {
this.company = company;
}
@Override
public void connect() {
System.out.println(company + "μ Wifiμ μ°κ²°λμμ΅λλ€.");
}
}
5G(μμλ°μ μμ ν΄λμ€)
class FiveG implements NetworkAdapter {
String company;
FiveG(String company) {
this.company = company;
}
@Override
public void connect() {
System.out.println(company + "μ 5Gμ μ°κ²°λμμ΅λλ€.");
}
}
LTE(μμλ°μ μμ ν΄λμ€)
class Lte implements NetworkAdapter {
String company;
Lte(String company) {
this.company = company;
}
@Override
public void connect() {
System.out.println(company + "μ LTEμ μ°κ²°λμμ΅λλ€.");
}
}
Main
public class InterfaceMain {
public static void main(String[] args) {
NetworkAdapter adapter = null;
Scanner sc = new Scanner(System.in);
System.out.print("μ°κ²°ν λ€νΈμν¬λ₯Ό μ ννμΈμ. [1]Wi-Fi [2]5G [3]LTE : ");
int network = sc.nextInt();
switch(network) {
case 1 : new Wifi("SKT"); break;
case 2 : new FiveG("KT"); break;
case 3 : new Lte("LG"); break;
default: System.out.println("λ€νΈμν¬λ₯Ό μλͺ» μ ννμ
¨μ΅λλ€.");
}
adapter.connect();
}
}
μΈν°νμ΄μ€ μμ© μμ )
RemoteControl (interface ν΄λμ€..λΆλͺ¨ ν΄λμ€)
public interface RemoteControl {
// 1) μ£Όμ μ°Έκ³
int MAX_VOL = 100;
int MIN_VOL = 0;
int Basic_VOL = 20;
// 2) μ£Όμ μ°Έκ³
void turnOn();
void turnOff();
void setVol(int volume);
void getInfo();
// 3) μ£Όμ μ°Έκ³
default void setMute(boolean mute) {
if(mute) System.out.println("무μ μ²λ¦¬ ν©λλ€.");
else System.out.println("무μ ν΄μ ν©λλ€.");
}
// 4) μ£Όμ μ°Έκ³
static void changeBattery() {
System.out.println("건μ μ§λ₯Ό κ΅μ²΄ν΄μ£Όμμμ€.");
}
}
1)
μΈν°νμ΄μ€ λ΄μ μλ νλλ μμλ‘ μ μνμ§ μμλ λͺ¨λ final staticμΌλ‘ λ³νλλ€.
2)
λ©μλ λν μλμΌλ‘ public abstract λΆλλ€.
=> μλ? μΈν°νμ΄μ€λ κΈ°λ³Έμ μΌλ‘ λͺ¨λ λ©μλκ° μΆμ λ©μλμ΄κΈ° λλ¬Έ...
3)
λ§μ½ νΉμ κΈ°λ₯μ νΉμ ν΄λμ€μλ§ μΆκ°νκ³ μΆμλ° default λ©μλκ° μμΌλ©΄ μμλ°μ λͺ¨~λ ν΄λμ€μ λ©μλ ꡬνν΄μ€μΌ νλ€. μ§κΈ μμ±νλ μμ μ½λλ μμλ°μ λ©μλκ° 2κ°λκΉ μλμΌλ‘ λ£λλ€ μ³λ..
λ§μ½ μμλ°μ ν΄λμ€κ° 100000κ° λΌλ©΄?.. (λ
Έλ΅)
κ΅μ₯ν λΉν¨μ¨μ μ΄κΈ° λλ¬Έμ μ μΌνκ² μμΈμ²λ¦¬ ν μ μλλ‘ λ§λ κ²μ΄ default λ©μλ μ΄λ€.
(κ·Έλ λ€κ³ λ¨λ°νμ§λ λ§κΈ°)
4)
μΈν°νμ΄μ€ μ΄λ¦μΌλ‘ μ κ·Ό κ°λ₯
μμκ³Ό 무κ΄ν¨!
Audio (μμλ°μ μμ ν΄λμ€)
public class Audio implements RemoteControl {
// 1λ² μ£Όμ μ°Έκ³
private int volume;
// 2λ² μ£Όμ μ°Έκ³
@Override
public void turnOn() {
System.out.println("Audioλ₯Ό μΌλλ€.");
}
@Override
public void turnOff() {
System.out.println("Audioλ₯Ό λλλ€.");
}
// 3λ² μ£Όμ μ°Έκ³
@Override
public void setVol(int volume) {
if(volume > RemoteControl.MAX_VOL) {
this.volume = RemoteControl.MAX_VOL;
} else if(volume < RemoteControl.MIN_VOL) {
this.volume = RemoteControl.MIN_VOL;
} else this.volume = volume;
System.out.println("νμ¬ Audio λ³Όλ₯¨ : " + this.volume);
}
@Override
public void getInfo() {
System.out.println("νμ¬ λ³Όλ₯¨μ " + volume + " μ
λλ€.");
}
@Override
public void setMute(boolean mute) {
if(mute) System.out.println("μ€λμ€λ₯Ό 무μ μ²λ¦¬ ν©λλ€.");
else {
System.out.println("μ€λμ€λ₯Ό 무μ ν΄μ ν©λλ€.");
this.volume = RemoteControl.Basic_VOL;
System.out.println("νμ¬ λ³Όλ₯¨μ " + volume + " μ
λλ€.");
}
}
}
1)
μΈμ€ν΄μ€ νλλ privateμΌλ‘ μ μΈνμ¬ ν΄λμ€ λ΄λΆμμλ§ μ κ·Ό κ°λ₯νλλ‘ νμ
2)
μΈν°νμ΄μ€μ μΆμν λ©μλλ₯Ό μΈ λλ public κΌ μ¨μ€ κ²
3)
λ³Όλ₯¨ νμ©μΉλ₯Ό μ λ λ²μ΄λμ§ μλ λ©μλ μμ±!
μ΄λ‘ μΈν΄ κ΅³μ΄ λ³Όλ₯¨ 쑰건문μ μμ±νμ§ μμλ λκ³ , μλμΌλ‘ μ€μ ν΄λμ κ°μΌλ‘ λ³νλ¨.
Television (μμλ°μ μμ ν΄λμ€)
public class Television implements RemoteControl {
private int volume;
@Override
public void turnOn() {
System.out.println("TVλ₯Ό μΌλλ€.");
}
@Override
public void turnOff() {
System.out.println("TVλ₯Ό λλλ€.");
}
@Override
public void setVol(int volume) {
if(volume > RemoteControl.MAX_VOL) {
this.volume = RemoteContrl.MAX_VOL;
} else if(volume < RemoteControl.MIN_VOL) {
this.volume = RemoteControl.MIN_VOL;
else this.volume = volume;
System.out.println("νμ¬ TV λ³Όλ₯¨ : " + this.volume);
}
@Override
public void getInfo() {
System.out.println("νμ¬ λ³Όλ₯¨μ " + volume + " μ
λλ€.");
}
}
Audio ν΄λμ€μ λμΌνλ.. ν κ°μ§ λ€λ₯Έ μ !!
interface ν΄λμ€μμ μ μΈν λ©μλλ₯Ό μμλ°μ ν΄λμ€μμ ꡬν μνλ©΄ μ€λ₯κ° λλ€.
κ·Όλ° setMute()λ TVν΄λμ€μμλ ꡬνμ μνλλ°λ λΆκ΅¬νκ³ μ€λ₯κ° μλλ€.
μ?!
default λ©μλλ‘ μμ±νκΈ° λλ¬Έμ!
Main
import java.util.Scanner;
public class RemoConMain {
public static void main(String[] args) {
RemoteControl remote = null;
Scanner sc = new Scanner(System.in);
System.out.print("μ νμ μ ννμΈμ. [1]TV [2]μ€λμ€ : ");
int sel = sc.nextInt();
if(sel == 1) {
remote = new TeleVision;
remote.turnOn();
remote.setVol(30);
remote.getInfo();
remote.setMute(true); // 1λ² μ£Όμ μ°Έκ³
} else {
remote = new Audio;
remote.turnOn();
remote.setVol(150);
remote.getInfo();
remote.setMute(false); // 2λ² μ£Όμ μ°Έκ³
}
RemoteControl.changeBattery(); // 3λ² μ£Όμ μ°Έκ³
}
}
1)
default λ©μλμ΄κ³ , λΆλͺ¨μμ λ§λ λ©μλ μ¬μ©
2)
default λ©μλμ΄κ³ , Audioν΄λμ€μμ μ€λ²λΌμ΄λ© ν λ©μλ μ¬μ©
=> false μΌ κ²½μ° λ¬΄μ ν΄μ νκ³ , κΈ°λ³Έ λ³Όλ₯¨ μ€μ κ°μΌλ‘ μ΄κΈ°ννλ κΈ°λ₯ μΆκ°
3)
μΈν°νμ΄μ€ μμμ λ©μλ