μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Absolute
- AGI
- ai
- AI agents
- AI engineer
- AI researcher
- ajax
- algorithm
- Algorithms
- aliases
- Array κ°μ²΄
- ASI
- bayes' theorem
- Bit
- Blur
- BOM
- bootstrap
- canva
- challenges
- ChatGPT
- Today
- In Total
A Joyful AI Research Journeyπ³π
[37] 230220 Java Ch. 8 μΈν°νμ΄μ€: 1. μΈν°νμ΄μ€, 2. νμ λ³νκ³Ό λ€νμ± [K-λμ§νΈ νΈλ μ΄λ 37μΌ] λ³Έλ¬Έ
[37] 230220 Java Ch. 8 μΈν°νμ΄μ€: 1. μΈν°νμ΄μ€, 2. νμ λ³νκ³Ό λ€νμ± [K-λμ§νΈ νΈλ μ΄λ 37μΌ]
yjyuwisely 2023. 2. 20. 12:32230220 Mon 37th class
Ch. 8 μΈν°νμ΄μ€
μ§λ: p. 370 ~ (κ΅μ¬: νΌμ 곡λΆνλ μλ°, μ μ: μ μ©κΆ)
νλΉλ―Έλμ΄_νΌκ³΅μ_μ©μ΄μ§.pdf
μ©μ΄ μ°Έκ³
μ€λ λ°°μ΄ κ² μ€ κΈ°μ΅ν κ²μ μ 리νλ€.
μ§λ μμ λ λ°°μ΄ κ² μ€ λ€μ κΈ°μ΅ν κ²
2023.02.17 - [1. Revision 2023/Java] - [36] 230217 Ch. 7 μμ(3): 3. μΆμ ν΄λμ€
μΆμ ν΄λμ€[λΆλͺ¨]: ν΄λμ€λ€μ 곡ν΅μ μΈ νΉμ±μ μΆμΆν΄μ μ μΈν ν΄λμ€
ν΄λμ€λ€μ 곡ν΅μ μΈ νλμ λ©μλλ₯Ό μΆμΆν΄μ μ μΈν ν΄λμ€μ΄λ€.
μ€μ²΄ ν΄λμ€[μμ]: κ°μ²΄λ₯Ό μ§μ μμ±ν μ μλ ν΄λμ€ (μ΄λκΉμ§ λ°°μ΄ κ²!)
μ€μ²΄ ν΄λμ€λ μΆμ ν΄λμ€μ λͺ¨λ νΉμ±μ λ¬Όλ €λ°κ³ , μΆκ°μ μΈ νΉμ±(νλμ λ©μλ)μ κ°μ§ μ μλ€.
An argument is a way for you to provide more information to a function.
κΈ°ν)
API stands for Application Programming Interface.
API = μ€λͺ
μ, μμ κ°μ κ²
An application programming interface(API) is a way for two or more computer programs to communicate with each other.
7 Examples of APIs in Use Today
- Twitter Bots.
- Log-In Using XYZ.
- Weather Snippers.
- Pay with PayPal.
- Google Maps.
- Travel Booking.
- E-Commerce.
https://docs.oracle.com/javase/8/docs/api/
ex) Math ν΄λ¦νμ λ λμ€λ Method Summaryλ₯Ό 보면 μμ€λ₯Ό κ°λ¦¬λ μΈν°νμ΄μ€λ§ μ 곡ν΄μ€λ€.
Ch. 8 μΈν°νμ΄μ€
μ± μ λͺ©μ°¨
08-1 μΈν°νμ΄μ€
08-2 νμ λ³νκ³Ό λ€νμ±
μΈν°νμ΄μ€(interface): κ°μ²΄μ μ¬μ© λ°©λ²μ μ μν νμ
κ°λ° μ½λμ κ°μ²΄κ° μλ‘ ν΅μ νλ μ μ μν μ νλ€.
κ°λ° μ½λκ° μΈν°νμ΄μ€μ λ©μλλ₯Ό νΈμΆνλ©΄ μΈν°νμ΄μ€λ κ°μ²΄μ λ©μλλ₯Ό νΈμΆμν¨λ€. κ΅¬μ± λ©€λ²λ μμ νλμ μΆμ λ©μλμ΄λ€.
μ€κ³ λͺ©μ μ΄ μλ ꡬν λͺ©μ μΌλ‘ μ΄λ€. μΆμ ν΄λμ€λ³΄λ€ λ μΆμμ μΌλ‘ νλ€.
ꡬνμ΄ μ λμ΄ μλ λΆλͺ¨ ν΄λμ€λΌκ³ μκ°νλ©΄ μ΄ν΄κ° μ½λ€.
Why And When To Use Interfaces?
1) To achieve security - hide certain details and only show the important details of an object (interface).
2) Java does not support "multiple inheritance" (a class can only inherit from one superclass). However, it can be achieved with interfaces, because the class can implement multiple interfaces. Note: To implement multiple interfaces, separate them with a comma (see example below).
μ°Έκ³ : https://www.w3schools.com/java/java_interface.asp
μΈν°νμ΄μ€(interface)λ?
μμ ν΄λμ€κ° μ¬λ¬ λΆλͺ¨ ν΄λμ€λ₯Ό μμλ°μ μ μλ€λ©΄, λ€μν λμμ μνν μ μλ€λ μ₯μ μ κ°μ§κ² λ κ²μ λλ€.
νμ§λ§ ν΄λμ€λ₯Ό μ΄μ©νμ¬ λ€μ€ μμμ ν κ²½μ° λ©μλ μΆμ²μ λͺ¨νΈμ± λ± μ¬λ¬ κ°μ§ λ¬Έμ κ° λ°μν μ μμ΄ μλ°μμλ ν΄λμ€λ₯Ό ν΅ν λ€μ€ μμμ μ§μνμ§ μμ΅λλ€.
νμ§λ§ λ€μ€ μμμ μ΄μ μ λ²λ¦΄ μλ μκΈ°μ μλ°μμλ μΈν°νμ΄μ€λΌλ κ²μ ν΅ν΄ λ€μ€ μμμ μ§μνκ³ μμ΅λλ€.
μΈν°νμ΄μ€(interface)λ λ€λ₯Έ ν΄λμ€λ₯Ό μμ±ν λ κΈ°λ³Έμ΄ λλ νμ μ 곡νλ©΄μ, λ€λ₯Έ ν΄λμ€ μ¬μ΄μ μ€κ° λ§€κ° μν κΉμ§ λ΄λΉνλ μΌμ’ μ μΆμ ν΄λμ€λ₯Ό μλ―Έν©λλ€.
μλ°μμ μΆμ ν΄λμ€λ μΆμ λ©μλλΏλ§ μλλΌ μμ±μ, νλ, μΌλ° λ©μλλ ν¬ν¨ν μ μμ΅λλ€.
νμ§λ§ μΈν°νμ΄μ€(interface)λ μ€λ‘μ§ μΆμ λ©μλμ μμλ§μ ν¬ν¨ν μ μμ΅λλ€.
Another way to achieve abstraction in Java, is with interfaces.
An interface is a completely "abstract class" that is used to group related methods with empty bodies:
// interface
interface Animal {
public void animalSound(); // interface method (does not have a body)
public void run(); // interface method (does not have a body)
}
Notes on Interfaces:
- Like abstract classes, interfaces cannot be used to create objects (in the example above, it is not possible to create an "Animal" object in the MyMainClass)
- Interface methods do not have a body - the body is provided by the "implement" class
- On implementation of an interface, you must override all of its methods
- Interface methods (μΆμ λ©μλ) are by default abstract and public
- Interface attributes are by default public, static and final
- An interface cannot contain a constructor (as it cannot be used to create objects)
8.1.1 μΈν°νμ΄μ€ μ μΈ
μΈν°νμ΄μ€ μ μΈμ class ν€μλ λμ μ interface ν€μλλ₯Ό μ¬μ©νλ€.
μλ°μμ μΈν°νμ΄μ€λ₯Ό μ μΈνλ λ°©λ²μ ν΄λμ€λ₯Ό μμ±νλ λ°©λ²κ³Ό κ°μ΅λλ€.
μΈν°νμ΄μ€λ₯Ό μ μΈν λμλ μ κ·Ό μ μ΄μμ ν¨κ» interface ν€μλλ₯Ό μ¬μ©νλ©΄ λ©λλ€.
μλ°μμ μΈν°νμ΄μ€λ λ€μκ³Ό κ°μ΄ μ μΈν©λλ€.
μ κ·Όμ μ΄μ interface μΈν°νμ΄μ€ μ΄λ¦ { public static final νμ μμ μ΄λ¦ = κ°; ... public abstract λ©μλ μ΄λ¦ (맀κ°λ³μ λͺ©λ‘); ... }β
λ¨, ν΄λμ€μλ λ¬λ¦¬ μΈν°νμ΄μ€μ λͺ¨λ νλλ public static finalμ΄μ΄μΌ νλ©°, λͺ¨λ λ©μλλ public abstractμ΄μ΄μΌ ν©λλ€.
μ΄ λΆλΆμ λͺ¨λ μΈν°νμ΄μ€μ 곡ν΅μΌλ‘ μ μ©λλ λΆλΆμ΄λ―λ‘ μ΄ μ μ΄μλ μλ΅ν μ μμ΅λλ€.
μ΄λ κ² μλ΅λ μ μ΄μλ μ»΄νμΌ μ μλ° μ»΄νμΌλ¬κ° μλμΌλ‘ μΆκ°ν΄ μ€λλ€.
class A{
// νλ (λ³μ, μμ)
// μμ±μ
// λ©μλ
}
interface A{
// μμ νλ
// μμ±μ(X)
// μΆμ λ©μλ
}
1) μμ νλ (Constant field) μ μΈ
μΈν°νμ΄μ€μ μμ νλλ κΈ°λ³Έμ μΌλ‘ public static final νΉμ±μ κ°μ§λ€. κ΄λ‘μ μΌλ‘ νλ μ΄λ¦μ λͺ¨λ λλ¬Έμλ‘ μμ±ν΄μΌ νλ©°, μ μΈ μ μ΄κΈ°κ°μ λμ
ν΄μΌ νλ€.
(static final μλ΅ κ°λ₯)
[public static final] νμ
μμμ΄λ¦ = κ°;
μμ μ΄λ¦μ λλ¬Έμλ‘ μμ±νλ, μλ‘ λ€λ₯Έ λ¨μ΄λ‘ ꡬμ±λμ΄ μμ κ²½μ°μλ μΈλλ°(_)λ‘ μ°κ²°νλ κ²μ΄ κ΄λ‘μ΄λ€.
ex) MODEL, MAX_VALUE
μΈν°νμ΄μ€ μμλ λ°λμ μ μΈκ³Ό λμμ μ΄κΈ°κ°μ μ§μ ν΄μΌ νλ€.
μμ) μμ νλ μ μΈ
public interface RemoteControl {
//μμ νλ
//public static final int MAX_VALUE = 10;
//public static final int MIN_VALUE = 0;
public int MAX_VOLUME = 10;
public int MIN_VOLUME = 0;
}
2) μΆμ λ©μλ μ μΈ
μΈν°νμ΄μ€μ μ μΈλ λ©μλλ public abstractκ° μλ΅λκ³ λ©μλ μ μΈλΆλ§ μλ μΆμ λ©μλμ΄λ€. ꡬν ν΄λμ€λ λ°λμ μΆμ λ©μλλ₯Ό μ¬μ μν΄μΌνλ€.
(abstract μλ΅ κ°λ₯)
[public abstract] 리ν΄νμ
λ©μλμ΄λ¦(맀κ°λ³μ, ...);
μμ) μΆμ λ©μλ μ μΈ
public interface RemoteControl {
//μμ νλ
//public static final int MAX_VALUE = 10;
//public static final int MIN_VALUE = 0;
public int MAX_VOLUME = 10;
public int MIN_VOLUME = 0;
//μΆμ λ©μλ
//public abstract void turnOn();
//public abstract void turnOff();
//public abstract void setVolume(int volume);
public void turnOn();
public void turnOff();
public void setVolume(int volume);
}
8.1.2 μΈν°νμ΄μ€ ꡬν
κ°λ° μ½λκ° μΈν°νμ΄μ€ λ©μλλ₯Ό νΈμΆνλ©΄ μΈν°νμ΄μ€λ κ°μ²΄μ λ©μλλ₯Ό νΈμΆνλ€.
κ°μ²΄λ μΈν°νμ΄μ€μμ μ μλ μΆμ λ©μλμ λμΌν λ©μλ μ΄λ¦, λ§€κ° νμ
, λ¦¬ν΄ νμ
μ κ°μ§ μ€μ²΄ λ©μλλ₯Ό κ°μ§κ³ μμ΄μΌ νλ€.
μ΄λ¬ν κ°μ²΄λ₯Ό μΈν°νμ΄μ€μ ꡬν(implement) κ°μ²΄λΌκ³ νκ³ , ꡬν κ°μ²΄λ₯Ό μμ±νλ ν΄λμ€λ₯Ό ꡬν ν΄λμ€λΌκ³ νλ€.
implements: ꡬν ν΄λμ€λ μ΄λ€ μΈν°νμ΄μ€λ‘ μ¬μ© κ°λ₯νμ§(μ΄λ€ μΈν°νμ΄μ€λ₯Ό ꡬννκ³ μλμ§)λ₯Ό κΈ°μ νκΈ° μν΄ ν΄λμ€ μ μΈ μ implements ν€μλλ₯Ό μ¬μ©νλ€.
To access the interface methods, the interface must be "implemented" (kinda like inherited) by another class with the implements keyword (instead of extends). The body of the interface method is provided by the "implement" class:
// Interface
interface Animal {
public void animalSound(); // interface method (does not have a body)
public void sleep(); // interface method (does not have a body)
}
// Pig "implements" the Animal interface
class Pig implements Animal {
public void animalSound() {
// The body of animalSound() is provided here
System.out.println("The pig says: wee wee");
}
public void sleep() {
// The body of sleep() is provided here
System.out.println("Zzz");
}
}
class Main {
public static void main(String[] args) {
Pig myPig = new Pig(); // Create a Pig object
myPig.animalSound();
myPig.sleep();
}
}
1) ꡬν ν΄λμ€
public class ꡬνν΄λμ€ μ΄λ¦ implements μΈν°νμ΄μ€μ΄λ¦{
//μΈν°νμ΄μ€μ μ μΈλ μΆμ λ©μλμ μ€μ²΄ λ©μλ μ μΈ
}
μμ 1) ꡬν ν΄λμ€
public class Television implements RemoteControl {
//νλ
private int volume;
//μΈν°νμ΄μ€μ μ μΈλ μΆμ λ©μλμ ꡬν λ©μλ μ μΈ
//turnOn() μΆμ λ©μλμ μ€μ²΄ λ©μλ
public void turnOn() {
System.out.println("TVλ₯Ό μΌλλ€.");
}
//turnOff() μΆμ λ©μλμ μ€μ²΄ λ©μλ
public void turnOff() {
System.out.println("TVλ₯Ό λλλ€.");
}
//setVolume() μΆμ λ©μλμ μ€μ²΄ λ©μλ
public void setVolume(int volume) {
if(volume>RemoteControl.MAX_VOLUME) {
this.volume = RemoteControl.MAX_VOLUME;
} else if (volume<RemoteControl.MIN_VOLUME) {
this.volume = RemoteControl.MIN_VOLUME;
} else {
this.volume = volume;
}
System.out.println("νμ¬ TV λ³Όλ₯¨: " + this.volume);
}
}
μμ 2) ꡬν ν΄λμ€
public class Audio implements RemoteControl {
//νλ
private int volume;
//μΈν°νμ΄μ€μ μ μΈλ μΆμ λ©μλμ ꡬν λ©μλ μ μΈ
//turnOn() μΆμ λ©μλμ μ€μ²΄ λ©μλ
public void turnOn() {
System.out.println("Audioλ₯Ό μΌλλ€.");
}
//turnOff() μΆμ λ©μλμ μ€μ²΄ λ©μλ
public void turnOff() {
System.out.println("Audioλ₯Ό λλλ€.");
}
//setVolume() μΆμ λ©μλμ μ€μ²΄ λ©μλ
public void setVolume(int volume) {
if(volume>RemoteControl.MAX_VOLUME) {
this.volume = RemoteControl.MAX_VOLUME;
} else if (volume<RemoteControl.MIN_VOLUME) {
this.volume = RemoteControl.MIN_VOLUME;
} else {
this.volume = volume;
}
System.out.println("νμ¬ Audio λ³Όλ₯¨: " + this.volume);
}
}
μΈν°νμ΄μ€λ‘ ꡬν κ°μ²΄λ₯Ό μ¬μ©νλ €λ©΄ μΈν°νμ΄μ€ λ³μλ₯Ό μ μΈνκ³ κ΅¬ν κ°μ²΄λ₯Ό λμ ν΄μΌ νλ€.
μΈν°νμ΄μ€ λ³μ;
λ³μ = ꡬνκ°μ²΄;
μΈν°νμ΄μ€ λ³μ = ꡬνκ°μ²΄;
μμ 3) μΈν°νμ΄μ€ λ³μμ ꡬν κ°μ²΄ λμ
public class RemoteControlExample {
public static void main(String[] args) {
//int a;
RemoteControl rc;
//a = 10;
rc = new Television();
//a = 20;
rc = new Audio();
}
}
2) λ€μ€ μΈν°νμ΄μ€ ꡬν ν΄λμ€
μΈν°νμ΄μ€λ λ€μ€μμμ΄ κ°λ₯νλ€. (μΆμ ν΄λμ€λ λ€μ€μμμ΄ μ λλ€.)
μΈν°νμ΄μ€λ μμ€λ₯Ό κ°λ¦¬λ λͺ©μ μΌλ‘ 보μκ³Ό μ°κ΄μ΄ μλ€.
μ€κ³, ꡬν ꡬλΆμΌλ‘λ μ°μΈλ€.
To implement multiple interfaces, separate them with a comma.
public class ꡬνν΄λμ€μ΄λ¦ implements μΈν°νμ΄μ€A, μΈν°νμ΄μ€B{
//μΈν°νμ΄μ€ Aμ μ μΈλ μΆμ λ©μλμ μ€μ²΄ λ©μλ μ μΈ
//μΈν°νμ΄μ€ Bμ μ μΈλ μΆμ λ©μλμ μ€μ²΄ λ©μλ μ μΈ
}
μμ )
interface FirstInterface {
public void myMethod(); // interface method
}
interface SecondInterface {
public void myOtherMethod(); // interface method
}
class DemoClass implements FirstInterface, SecondInterface {
public void myMethod() {
System.out.println("Some text..");
}
public void myOtherMethod() {
System.out.println("Some other text...");
}
}
class Main {
public static void main(String[] args) {
DemoClass myObj = new DemoClass();
myObj.myMethod();
myObj.myOtherMethod();
}
}
λ€μ€ μΈν°νμ΄μ€λ₯Ό ꡬνν κ²½μ°, ꡬν ν΄λμ€λ λͺ¨λ μΈν°νμ΄μ€μ μΆμ λ©μλμ λν΄ μ€μ²΄ λ©μλλ₯Ό μμ±ν΄μΌ νλ€.
μμ 1) μΈν°λ·μ κ²μν μ μλ Searchable μΈν°νμ΄μ€
search() μΆμ λ©μλ
public interface Searchable {
//μΆμ λ©μλ
//public abstract void search(String url);
void search(String url);
}
μμ 2) λ€μ€ μΈν°νμ΄μ€ ꡬν ν΄λμ€
public class SmartTelevision implements RemoteControl, Searchable{
private int volume;
//RemoteControlμ μΆμ λ©μλμ λν μ€μ²΄ λ©μλ
@Override
public void turnOn() {
System.out.println("TVλ₯Ό μΌλλ€.");
}
@Override
public void turnOff() {
System.out.println("TVλ₯Ό λλλ€.");
}
@Override
public void setVolume(int volume) {
if(volume>RemoteControl.MAX_VOLUME) {
this.volume = RemoteControl.MAX_VOLUME;
} else if (volume<RemoteControl.MAX_VOLUME) {
this.volume = RemoteControl.MIN_VOLUME;
} else {
this.volume = volume;
}
System.out.println("νμ¬ TV λ³Όλ₯¨: " + this.volume);
}
//Searchableμ μΆμ λ©μλμ λν μ€μ²΄ λ©μλ
@Override
public void search(String url) {
System.out.println(url + "μ κ²μν©λλ€.");
}
}
μμ 3) μΈν°νμ΄μ€ λ³μμ ꡬν κ°μ²΄ λμ
public class SmartTelevisionExample {
public static void main(String[] args) {
SmartTelevision tv = new SmartTelevision();
RemoteControl rc = tv;
Searchable searchable = tv;
}
}
8.1.3 μΈν°νμ΄μ€ μ¬μ© p. 379
ꡬν κ°μ²΄κ° μΈν°νμ΄μ€ λ³μμ λμ
λλ€λ κ²μ μμμΌλ, μ§κΈλΆν° μΈν°νμ΄μ€λ‘ ꡬν κ°μ²΄λ₯Ό μ¬μ©νλ λ°©λ²μ μμ보λ.
ν΄λμ€λ₯Ό μ μΈν λ μΈν°νμ΄μ€λ νλ, μμ±μ λλ λ©μλμ λ§€κ° λ³μ, μμ±μ λλ λ©μλμ λ‘컬 λ³μλ‘ μ μΈλ μ μλ€.
ex) λ€μμ RemoteControl μΈν°νμ΄μ€λ₯Ό νλ, μμ±μ λλ λ©μλμ λ§€κ° λ³μ κ·Έλ¦¬κ³ λ©μλμ λ‘컬 λ³μλ‘ μ μΈνλ€.
public class MyClass {
//νλ
//int a = 10;
RemoteControl rc = new Television();
//μμ±μ
MyClass(){}//κΈ°λ³Έ μμ±μ(맀κ°λ³μκ° μλ μμ±μ)
MyClass(RemoteControl rc){//맀κ°λ³μκ° ν κ°μΈ μμ±μ
this.rc = rc;
}
//λ©μλ
void method() {
//λ‘컬 λ³μ
RemoteControl rc = new Audio();
}
void methodB(RemoteControl rc) {...}
}
μμ 1) μΈν°νμ΄μ€ μ¬μ© MyClass.java
package ch08;
public class MyClass {
//νλ
//int a = 10;
RemoteControl rc = new Television();
//μμ±μ
MyClass(){//κΈ°λ³Έ μμ±μ(맀κ°λ³μκ° μλ μμ±μ)
}
MyClass(RemoteControl rc){//맀κ°λ³μκ° ν κ°μΈ μμ±μ
this.rc = rc;
rc.turnOn();
rc.setVolume(5);
}
//λ©μλ
void methodA() {
//λ‘컬 λ³μ
RemoteControl rc = new Audio();
rc.turnOn();
rc.setVolume(5);
}
void methodB(RemoteControl rc) {
rc.turnOn();
rc.setVolume(5);
}
}
μμ 2) μΈν°νμ΄μ€ μ¬μ© MyClassExample.java
public class MyClassExample {
public static void main(String[] args) {
System.out.println("1)------------------");
MyClass myClass1 = new MyClass(); //MyClassμ κΈ°λ³Έμμ±μλ₯Ό νΈμΆ
myClass1.rc.turnOn();
myClass1.rc.setVolume(5);
System.out.println("2)------------------");
MyClass myClass2 = new MyClass(new Audio());//MyClassμ 맀κ°λ³μκ° ν κ°μΈ μμ±μ νΈμΆ
System.out.println("3)------------------");
MyClass myClass3 = new MyClass(); //MyClassμ κΈ°λ³Έμμ±μλ₯Ό νΈμΆ(Television ν΄λμ€)
myClass3.methodA();
System.out.println("4)------------------");
MyClass myClass4 = new MyClass();
myClass4.methodB(new Television());
}
}
κ²°κ³Ό)
1)------------------
TVλ₯Ό μΌλλ€.
νμ¬ TV λ³Όλ₯¨: 5
2)------------------
Audioλ₯Ό μΌλλ€.
νμ¬ Audio λ³Όλ₯¨: 5
3)------------------
Audioλ₯Ό μΌλλ€.
νμ¬ Audio λ³Όλ₯¨: 5
4)------------------
TVλ₯Ό μΌλλ€.
νμ¬ TV λ³Όλ₯¨: 5
λ§λ¬΄λ¦¬ p. 384
5κ°μ§ ν€μλλ‘ λλ΄λ ν΅μ¬ ν¬μΈνΈ
1) μΈν°νμ΄μ€ (interface) [8μ₯ 370μͺ½]: κ°μ²΄μ μ¬μ© λ°©λ²μ μ μν νμ
μ΄λ©° κ°λ° μ½λμ κ°μ²΄κ° μλ‘ ν΅μ νλ μ μ μν μ νλ€. κ°λ° μ½λκ° μΈν°νμ΄μ€μ λ©μλλ₯Ό νΈμΆνλ©΄ μΈν°νμ΄μ€λ κ°μ²΄μ λ©μλλ₯Ό νΈμΆμν¨λ€. κ·Έλ κΈ° λλ¬Έμ κ°λ° μ½λλ κ°μ²΄μ λ΄λΆ ꡬ쑰λ₯Ό μ νμκ° μκ³ μΈν°νμ΄μ€μ λ©μλλ§ μκ³ μμΌλ©΄ λλ€.
κ΅¬μ± λ©€λ²λ μμ νλμ μΆμ λ©μλμ΄λ€.
2) μμ νλ: μΈν°νμ΄μ€μ μμ νλλ κΈ°λ³Έμ μΌλ‘ public static final νΉμ±μ κ°μ§λ€. κ΄λ‘μ μΌλ‘ νλ μ΄λ¦μ λͺ¨λ λλ¬Έμλ‘ μμ±ν΄μΌ νλ©°, μ μΈ μ μ΄κΈ°κ°μ λμ
ν΄μΌ νλ€.
3) μΆμ λ©μλ: μΈν°νμ΄μ€μ μ μΈλ λ©μλλ public abstractκ° μλ΅λκ³ λ©μλ μ μΈλΆλ§ μλ μΆμ λ©μλμ΄λ€. ꡬν ν΄λμ€λ λ°λμ μΆμ λ©μλλ₯Ό μ¬μ μν΄μΌνλ€.
4) implements: ꡬν ν΄λμ€λ μ΄λ€ μΈν°νμ΄μ€λ‘ μ¬μ© κ°λ₯νμ§(μ΄λ€ μΈν°νμ΄μ€λ₯Ό ꡬννκ³ μλμ§)λ₯Ό κΈ°μ νκΈ° μν΄ ν΄λμ€ μ μΈ μ implements ν€μλλ₯Ό μ¬μ©νλ€.
5) μΈν°νμ΄μ€ μ¬μ©: ν΄λμ€λ₯Ό μ μΈν λ μΈν°νμ΄μ€λ νλ, μμ±μ λλ λ©μλμ λ§€κ° λ³μ, μμ±μ λλ λ©μλμ λ‘컬 λ³μλ‘ μ μΈλ μ μλ€.
μΈν°νμ΄μ€κ° νλ νμ μΌλ‘ μ¬μ©λ κ²½μ°: | νλμ ꡬν κ°μ²΄λ₯Ό λμ ν μ μλ€. |
μΈν°νμ΄μ€κ° μμ±μμ λ§€κ° λ³μ νμ μΌλ‘ μ¬μ©λ κ²½μ°: | new μ°μ°μλ‘ κ°μ²΄λ₯Ό μμ±ν λ ꡬν κ°μ²΄λ₯Ό μμ±μμ 맀κ°κ°μΌλ‘ λμ ν μ μλ€. |
μΈν°νμ΄μ€κ° λ‘컬 λ³μ νμ μΌλ‘ μ¬μ©λ κ²½μ°: | λ³μμ ꡬν κ°μ²΄λ₯Ό λμ ν μ μλ€. |
μΈν°νμ΄μ€κ° λ©μλμ λ§€κ° λ³μ νμ μΌλ‘ μ¬μ©λ κ²½μ°: | λ©μλ νΈμΆ μ ꡬν κ°μ²΄λ₯Ό 맀κ°κ°μΌλ‘ λμ ν μ μλ€. |
Q3) main() λ©μλμμ printSound()λ₯Ό νΈμΆν λ Catκ³Ό Dog κ°μ²΄λ₯Ό μ£Όκ³ μ€ννλ©΄ κ°κ° "μΌμΉ"κ³Ό "λ©λ©"μ΄ μΆλ ₯λλλ‘ Catκ³Ό Dog ν΄λμ€λ₯Ό μμ±νλΌ.
μμ 1) Soundable μΈν°νμ΄μ€
sound() μΆμ λ©μλλ κ°μ²΄μ μ리λ₯Ό 리ν΄νλ€.
package ch08;
public interface Soundable {
String sound();
}
μμ 2) μλλ₯Ό μμ±νμμ€.
package ch08;
public class Cat implements Soundable {
//λ©μλ μ¬μ μ(μ€λ²λΌμ΄λ©)
public String sound() {
return "μΌμΉ";
}
}
μμ 3) μλλ₯Ό μμ±νμμ€.
package ch08;
public class Dog implements Soundable {
//λ©μλ μ¬μ μ(μ€λ²λΌμ΄λ©)
public String sound() {
return "λ©λ©";
}
}
μμ 4) SoundableExample ν΄λμ€μμ printSound() λ©μλλ Soundable μΈν°νμ΄μ€ νμ
μ λ§€κ° λ³μλ₯Ό κ°μ§κ³ μλ€.
Soundable soundable = new Cat();
package ch08;
public class SoundableExample {
public static void printSound(Soundable soundable) {//μΈν°νμ΄μ€ νμ
, λ³μ
System.out.println(soundable.sound());
}
public static void main(String[] args) {
printSound(new Cat());
printSound(new Dog());
}
}
κ²°κ³Ό)
μΌμΉ
λ©λ©
8.2 νμ λ³νκ³Ό λ€νμ± p. 386
λ€νμ±μ ꡬννκΈ° μν΄μλ λ©μλ μ¬μ μμ νμ
λ³νμ΄ νμνλ€. μΈν°νμ΄μ€λ μ 곡νλ λ κ°μ§ κΈ°λ₯μΌλ‘ λ€νμ±μ ꡬννλ λ° λ§μ΄ μ¬μ©λλ€.
μμμ κ°μ μ’
λ₯μ νμ ν΄λμ€λ₯Ό λ§λλ κΈ°μ μ΄κ³ , μΈν°νμ΄μ€λ μ¬μ© λ°©λ²μ΄ λμΌν ν΄λμ€λ₯Ό λ§λλ κΈ°μ μ΄λ€.
8.2.1 μλ νμ
λ³ν
μλ νμ λ³ν: ꡬν κ°μ²΄κ° μΈν°νμ΄μ€ λ³μμ λμ λλ κ²
class Tire{}
μμ λΆλͺ¨
class HankookTire extends Tire{}
class KumhoTire extends Tire{}
main(){
Tire t = HankookTire //μ°Έμ‘° μλ νμ λ³ν (λΆλͺ¨(ν°) ← μμ(μμ))
}
Interface Tire{}
ꡬνν΄λμ€ μΈν°νμ΄μ€
class HankookTire implements Tire{}
main(){
μΈν°νμ΄μ€ = ꡬνν΄λμ€
Tire t = HankookTire //μ°Έμ‘° μλ νμ λ³ν(μΈν°νμ΄μ€ ← ꡬν)
ν΄λμ€μ ν΄λμ€ κ°μ κ΄κ³
λΆλͺ¨ ν΄λμ€ νμ λ³μ = μμ ν΄λμ€;
μΈν°νμ΄μ€μ ν΄λμ€ κ°μ κ΄κ³
μΈν°νμ΄μ€ λ³μ = ꡬνκ°μ²΄;
8.2.2 νλμ λ€νμ± p. 387
λ€νμ±: μμμ κ°μ μ’ λ₯μ νμ ν΄λμ€λ₯Ό λ§λλ κΈ°μ μ΄κ³ , μΈν°νμ΄μ€λ μ¬μ© λ°©λ²μ΄ λμΌν ν΄λμ€λ₯Ό λ§λλ κΈ°μ μ΄λΌλ κ°λ μμ μ°¨μ΄λ μμ§λ§ λ λ€ λ€νμ±μ ꡬννλ λ°©λ²μ λΉμ·νλ€. λͺ¨λ μ¬μ μμ νμ λ³ν κΈ°λ₯μ μ 곡νκΈ° λλ¬Έμ΄λ€.
νμ΄μ΄: μΈν°νμ΄μ€ νμ
(ν΄λμ€ νμ
X)
νκ΅ νμ΄μ΄, κΈνΈ νμ΄μ΄: ꡬν ν΄λμ€ (μμ ν΄λμ€ X)
νλμ λ€νμ±: Carμ run() λ©μλλ₯Ό μμ νμ§ μμλ λ€μν roll() λ©μλμ μ€νκ²°κ³Όλ₯Ό μ»μ μ μλ€.
μμ 1) μΈν°νμ΄μ€
package ch8_2;
//[1]
public interface Tire {
// public abstract void roll(); (μΆμ λ©μλ)
public void roll();//rollλ©μλ νΈμΆ μ¬μ© λ°©λ² μ€λͺ
}
μμ 2) ꡬν ν΄λμ€
package ch8_2;
//[2]
public class HankookTire implements Tire{
@Override//λ©μλ μ¬μ μ(μ€λ²λΌμ΄λ©)
public void roll() { //Tire μΈν°νμ΄μ€ ꡬν
System.out.println("νκ΅ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.");
}
}
μμ 3) ꡬν ν΄λμ€
package ch8_2;
//[3]
public class KumhoTire implements Tire{
@Override//λ©μλ μ¬μ μ(μ€λ²λΌμ΄λ©)
public void roll() { //Tire μΈν°νμ΄μ€ ꡬν
System.out.println("κΈνΈ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.");
}
}
μμ 4) νλ λ€νμ±
package ch8_2;
//[4]
public class Car {
//νλ: μΈν°νμ΄μ€ νμ
νλ μ μΈκ³Ό μ΄κΈ° ꡬν κ°μ²΄ λμ
Tire frontLeftTire = new HankookTire();
Tire frontRightTire = new HankookTire();
Tire backLeftTire = new HankookTire();
Tire backRightTire = new HankookTire();
//μμ±μ(λ°λ‘ μ μΈX) - κΈ°λ³Έ μμ±μκ° μλ μΆκ°
//λ©μλ: μΈν°νμ΄μ€μμ μ€λͺ
λ rol() λ©μλ νΈμΆ
void run() {
frontLeftTire.roll();
frontRightTire.roll();
backLeftTire.roll();
backRightTire.roll();
}
}
μμ 5) νλ λ€νμ± ν μ€νΈ
package ch8_2;
//[5]
public class CarExample {
public static void main(String[] args) {
Car myCar = new Car();
//Car ν΄λμ€μ νλ λ€νμ±μ΄ HankookTireλ‘λ§ λμ΄ μμ΄ νκ΅νμ΄μ΄ 4κ°κ° μΆλ ₯
myCar.run();
//Car ν΄λμ€μ frontLeftTire, frontRightTireλ κΈνΈνμ΄μ΄λ‘ κ΅μ²΄
myCar.frontLeftTire = new KumhoTire();
myCar.frontRightTire = new KumhoTire();
myCar.run();
}
}
κ²°κ³Ό)
νκ΅ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
νκ΅ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
νκ΅ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
νκ΅ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
κΈνΈ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
κΈνΈ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
νκ΅ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
νκ΅ νμ΄μ΄κ° κ΅΄λ¬κ°λλ€.
8.2.3 λ§€κ° λ³μμ λ€νμ±
λ€νμ±: μμμ κ°μ μ’ λ₯μ νμ ν΄λμ€λ₯Ό λ§λλ κΈ°μ μ΄κ³ , μΈν°νμ΄μ€λ μ¬μ© λ°©λ²μ΄ λμΌν ν΄λμ€λ₯Ό λ§λλ κΈ°μ μ΄λΌλ κ°λ μμ μ°¨μ΄λ μμ§λ§ λ λ€ λ€νμ±μ ꡬννλ λ°©λ²μ λΉμ·νλ€. λͺ¨λ μ¬μ μμ νμ λ³ν κΈ°λ₯μ μ 곡νκΈ° λλ¬Έμ΄λ€.
μμ 1) λ§€κ° λ³μμ μΈν°νμ΄μ€ν
Vehicle μ°Έμ‘° λ³μλ vehicleμ μλ μΈν°νμ΄μ€μ μλ κ²λ§ μ€ν κ°λ₯νλ€.
package ch8_2;
//[1]
public class Driver {
public void drive(Vehicle vehicle) {
//Vehicle vehicle = new Bus();
// vehicle.run();
//Vehicle vehicle = new Taxi();
vehicle.run();
}
}
μμ 2) μΈν°νμ΄μ€
package ch8_2;
//[2]
public interface Vehicle {
public void run();
}
μμ 3) ꡬν ν΄λμ€
package ch8_2;
//[3]
public class Bus implements Vehicle{
@Override //λ©μλ μ¬μ μ
public void run() {
System.out.println("λ²μ€κ° λ¬λ¦½λλ€.");
}
}
μμ 4) ꡬν ν΄λμ€
package ch8_2;
//[4]
public class Taxi implements Vehicle{
@Override //λ©μλ μ¬μ μ
public void run() {
System.out.println("νμκ° λ¬λ¦½λλ€.");
}
}
μμ 5) λ§€κ° λ³μμ λ€νμ± ν
μ€νΈ
package ch8_2;
//[5]
public class DriverExample {
public static void main(String[] args) {
Driver driver = new Driver();
Bus bus = new Bus();
Taxi taxi = new Taxi();
driver.drive(bus);//μλνμ
λ³ν:Vehicle vehicle=bus;
driver.drive(taxi);//μλνμ
λ³ν:Vehicle vehicle=taxi;
}
}
κ²°κ³Ό)
λ²μ€κ° λ¬λ¦½λλ€.
νμκ° λ¬λ¦½λλ€.
8.2.4 κ°μ νμ λ³ν (Casting) p. 394
ꡬν κ°μ²΄κ° μΈν°νμ΄μ€ νμ
μΌλ‘ μλ νμ
λ³ννλ©΄, μΈν°νμ΄μ€μ μ μΈλ λ©μλλ§ μ¬μ© κ°λ₯νλ€λ μ μ½ μ¬νμ΄ λ°λ₯Έλ€. ex) μΈν°νμ΄μ€μ 3κ°μ λ©μλκ° μ μΈλμ΄ μκ³ ν΄λμ€μλ 5κ°μ λ©μλκ° μ μΈλμ΄ μλ€λ©΄, μΈν°νμ΄μ€λ‘ νΈμΆ κ°λ₯ν λ©μλλ 3κ° λΏμ΄λ€.
ꡬν ν΄λμ€μ μ μΈλ νλμ λ©μλλ₯Ό μ¬μ©ν΄μΌ ν κ²½μ°λ λ°μνλ€. μ΄λ κ°μ νμ
λ³νμ ν΄μ λ€μ ꡬν ν΄λμ€ νμ
μΌλ‘ λ³νν λ€μ, ꡬν ν΄λμ€μ νλμ λ©μλλ₯Ό μ¬μ©ν μ μλ€.
κ°μ νμ
λ³ν: μΈν°νμ΄μ€μ λμ
λ ꡬν κ°μ²΄λ₯Ό λ€μ μλ ꡬν ν΄λμ€ νμ
μΌλ‘ λ³ννλ κ²
ꡬνν΄λμ€ λ³μ = (ꡬνν΄λμ€) μΈν°νμ΄μ€λ³μ;
int a = 65;
//int <- char
//4byte <- 2byte
int b = 'A' (μλ νμ λ³ν)
char c = (char)a;
μμ 1) μΈν°νμ΄μ€
public interface Vehicle {
public void run();
}
μμ 2) ꡬν ν΄λμ€
public class Bus implements Vehicle {
@Override
public void run() {
System.out.println("λ²μ€κ° λ¬λ¦½λλ€.");
}
public void checkFare() {
System.out.println("μΉμ°¨μκΈμ 체ν¬ν©λλ€.");
}
}
μμ 3) κ°μ νμ λ³ν
public class VehicleExample {
public static void main(String[] args) {
//μΈν°νμ΄μ€ νμ
= ꡬν κ°μ²΄ (μ°Έμ‘° μλ νμ
λ³ν)
Vehicle vehicle = new Bus();
vehicle.run();
//vehicle.checkFare(); (X): Vehicle μΈν°νμ΄μ€μλ checkFare()κ° μμ
//Busν΄λμ€μ checkFareλ©μλκ° μκΈ° λλ¬Έμ νΈμΆ κ°λ₯
//ꡬνκ°μ²΄νμ
= μΈν°νμ΄μ€(μ°Έμ‘° κ°μ νμ
λ³ν)
Bus bus = (Bus) vehicle; //κ°μ νμ
λ³ν
bus.run();
bus.checkFare(); //Bus ν΄λμ€μλ CheckFare()κ° μμ
}
}
8.2.5 κ°μ²΄ νμ νμΈ
μ°λ¦¬λ μμμμ κ°μ²΄ νμ μ νμΈνκΈ° μν΄ instanceof μ°μ°μλ₯Ό μ¬μ©νκ³ , μΈν°νμ΄μ€ νμ μμλ μ¬μ©ν μ μλ€.
instanceof: κ°μ νμ
λ³νμ νκΈ° μ μ λ³νμ΄ κ°λ₯νμ§ μ‘°μ¬ν λ μ¬μ©νλ€. μμμμλ μμ ν΄λμ€ νμ
μΈμ§, μΈν°νμ΄μ€μμλ ꡬν ν΄λμ€ νμ
μΈμ§λ₯Ό νμΈν λ μ¬μ©νλ€.
ex) Vehicle μΈν°νμ΄μ€ νμ
μΌλ‘ λ³νλ κ°μ²΄κ° BusμΈμ§ νμΈνλ €λ©΄ μλμ²λΌ μμ±νλ€.
if(vehicle instanceof Bus){
Bus bus = (Bus) vehicle;
}
μμ 1) κ°μ²΄ νμ νμΈ
public class Driver{
public void drive(Vehicle vehicle) {//vehicle: Bus, Taxi κ°μ²΄
if(vehicle instanceof Bus) {//vehicle λ§€κ° λ³μκ° μ°Έμ‘°νλ κ°μ²΄κ° BusμΈμ§ μ‘°μ¬
Bus bus = (Bus) vehicle;//Bus κ°μ²΄μΌ κ²½μ° μμ νκ² κ°μ νμ
λ³ν
bus.checkFare();//Bus νμ
μΌλ‘ κ°μ νμ
λ³νμ νλ μ΄μ
}
vehicle.run();
}
}
μμ 2) κ°μ²΄ νμ
νμΈ
public class DriverExample{
public static void main(String[] args) {
Driver driver = new Driver();
Bus bus = new Bus();
Taxi taxi = new Taxi();
driver.drive(bus);
driver.drive(taxi);
}
}
μ’ λ μμ보기) μΈν°νμ΄μ€ μμ p. 399
μΈν°νμ΄μ€ μμ: ν΄λμ€λ λ€μ€ μμμ νμ©νμ§ μμ§λ§, μΈν°νμ΄μ€λ λ€μ€ μμμ νμ©νλ€. μ¦ extends ν€μλ λ€μ μμ μΈν°νμ΄μ€κ° μ¬ μ μλ€.
μμ ) μμ μΈν°νμ΄μ€
package ch8_2;
//[1]
public interface InterfaceA {
//public void abstract methodA();
public void methodA();
}
μμ ) μμ μΈν°νμ΄μ€
package ch8_2;
//[2]
public interface InterfaceB {
//public void abstract InterfaceB();
public void methodB();
}
μμ ) νμ μΈν°νμ΄μ€
package ch8_2;
//[3]
public interface InterfaceC extends InterfaceA, InterfaceB {
//public void methodA();
//public void methodB();
//public void abstract methodC();
public void methodC();
}
μμ ) νμ μΈν°νμ΄μ€ ꡬν
package ch8_2;
//[4]
public class ImplementationC implements InterfaceC{
public void methodA() {
System.out.println("ImplementationC-methodA() μ€ν");
}
public void methodB() {
System.out.println("ImplementationC-methodB() μ€ν");
}
public void methodC() {
System.out.println("ImplementationC-methodC() μ€ν");
}
}
μμ ) νΈμΆ κΈ°λ₯ λ©μλ
package ch8_2;
//[5]
public class Example {
public static void main(String[] args) {
ImplementationC impl = new ImplementationC();
//μΈν°νμ΄μ€ νμ
= ꡬν κ°μ²΄ (μ°Έμ‘° μλ νμ
λ³ν)
InterfaceA ia = impl;
ia.methodA();
System.out.println();
//μΈν°νμ΄μ€ νμ
= ꡬν κ°μ²΄ (μ°Έμ‘° μλ νμ
λ³ν)
InterfaceB ib = impl;
ib.methodB();
System.out.println();
//μΈν°νμ΄μ€ νμ
= ꡬν κ°μ²΄ (μ°Έμ‘° μλ νμ
λ³ν)
InterfaceC ic = impl;
ic.methodA();
ic.methodB();
ic.methodC();
}
}
κ²°κ³Ό)
ImplementationC-methodA() μ€ν
ImplementationC-methodB() μ€ν
ImplementationC-methodA() μ€ν
ImplementationC-methodB() μ€ν
ImplementationC-methodC() μ€ν
λ§λ¬΄λ¦¬
5κ°μ§ ν€μλλ‘ λλ΄λ ν΅μ¬ ν¬μΈνΈ
1) μλ νμ
λ³ν: ꡬν κ°μ²΄κ° μΈν°νμ΄μ€ λ³μμ λμ
λλ κ²
2) λ€νμ±: μμμ κ°μ μ’
λ₯μ νμ ν΄λμ€λ₯Ό λ§λλ κΈ°μ μ΄κ³ , μΈν°νμ΄μ€λ μ¬μ© λ°©λ²μ΄ λμΌν ν΄λμ€λ₯Ό λ§λλ κΈ°μ μ΄λΌλ κ°λ
μμ μ°¨μ΄λ μμ§λ§ λ λ€ λ€νμ±μ ꡬννλ λ°©λ²μ λΉμ·νλ€. λͺ¨λ μ¬μ μμ νμ
λ³ν κΈ°λ₯μ μ 곡νκΈ° λλ¬Έμ΄λ€.
3) κ°μ νμ
λ³ν: μΈν°νμ΄μ€μ λμ
λ ꡬν κ°μ²΄λ₯Ό λ€μ μλ ꡬν ν΄λμ€ νμ
μΌλ‘ λ³ννλ κ²
4) instanceof: κ°μ νμ
λ³νμ νκΈ° μ μ λ³νμ΄ κ°λ₯νμ§ μ‘°μ¬ν λ μ¬μ©νλ€. μμμμλ μμ ν΄λμ€ νμ
μΈμ§, μΈν°νμ΄μ€μμλ ꡬν ν΄λμ€ νμ
μΈμ§λ₯Ό νμΈν λ μ¬μ©νλ€.
5) μΈν°νμ΄μ€ μμ: ν΄λμ€λ λ€μ€ μμμ νμ©νμ§ μμ§λ§, μΈν°νμ΄μ€λ λ€μ€ μμμ νμ©νλ€. μ¦ extends ν€μλ λ€μ μμ μΈν°νμ΄μ€κ° μ¬ μ μλ€.
class A{}
class B extends A{}
main(){
// μμκ΄κ³μ μλ νμ λ³ν
// λΆλͺ¨ν΄λμ€ νμ (A) ← μμν΄λμ€(B)
A a = new B();
// μμκ΄κ³μ κ°μ νμ λ³ν
// μμν΄λμ€ νμ (B) ← λΆλͺ¨ν΄λμ€(A)
B() = (B) a;
}
======================================
interface A{} // μΈν°νμ΄μ€
class B implements A{} // ꡬνκ°μ²΄
main(){
// μΈν°νμ΄μ€μ ꡬν κ°μ²΄ κ΄κ³μ μλ νμ λ³ν
// μΈν°νμ΄μ€ νμ (A) ← μμ ν΄λμ€ (B)
A a = new B();
// μΈν°νμ΄μ€μ ꡬν κ°μ²΄ κ΄κ³μ κ°μ νμ λ³ν
// ꡬνκ°μ²΄ νμ (B) ← μΈν°νμ΄μ€(A)
B b = (B) a;
}
μ°Έκ³ : http://alecture.blogspot.com/2011/05/abstract-class-interface.html
νμΈ λ¬Έμ
Q1 (4) λ©μλμ 맀κ°λ³μ νμ
μ΄ μΈν°νμ΄μ€μ΄λ©΄ 맀κ°κ°μΌλ‘ λͺ¨λ ꡬν κ°μ²΄λ₯Ό λμ
νλ©΄ μλ νμ
λ³νμ΄ λλ€. (O)
interface A{
// μΆμ λ©μλ
void add(A a); //μΈν°νμ΄μ€
}
class B implements A{
// ꡬν λ©μλ
add(B) //ꡬν κ°μ²΄ λ³μ
}
μΈν°νμ΄μ€ νμ = ꡬν κ°μ²΄ (μλ νμ λ³ν)
A a = new(B);
Q3 DaoExample ν΄λμ€μ main() λ©μλμμ dbWork() λ©μλλ₯Ό νΈμΆν λ OracleDaoμ MysqlDao κ°μ²΄λ₯Ό 맀κ°κ°μΌλ‘ μ£Όκ³ νΈμΆνλ€.
dbWork() λ©μλλ λ κ°μ²΄λ₯Ό λͺ¨λ 맀κ°κ°μΌλ‘ λ°κΈ° μν΄ DataAccessObject νμ
μ λ§€κ° λ³μλ₯Ό κ°μ§κ³ μλ€.
μ€ν κ²°κ³Όλ₯Ό λ³΄κ³ DataAccessObject μΈν°νμ΄μ€μ OracleDao, MysqlDao ꡬν ν΄λμ€λ₯Ό κ°κ° μμ±νλΌ.
μ€ν κ²°κ³Ό)
OracleDBμμ κ²μ
OracleDBμ μ½μ
OracleDBλ₯Ό μμ
OracleDBλ₯Ό μμ
Mysqlμμ κ²μ
Mysqlμ μ½μ
Mysqlλ₯Ό μμ
Mysqlλ₯Ό μμ
μΈν°νμ΄μ€ νμ = ꡬν κ°μ²΄ (μλ νμ λ³ν)
DataAccessObject dao = new OracleDao();
μμ 1) DaoExample.java
dbWork() λ©μλλ₯Ό νΈμΆν λ OracleDaoμ MysqlDao κ°μ²΄λ₯Ό 맀κ°κ°μΌλ‘ μ£Όκ³ νΈμΆνλ€.
package ch08;
//[1]
public class DaoExample {
//μΈν°νμ΄μ€ νμ
public static void dbWork(DataAccessObject dao) {
dao.select();
dao.insert();
dao.update();
dao.delete();
}//dbWork λ
public static void main(String[] args) {
//ꡬνκ°μ²΄
dbWork(new OracleDao());
//ꡬνκ°μ²΄
dbWork(new MysqlDao());
}
}
μμ 2) DataAccessObject.java μΈν°νμ΄μ€
package ch08;
//[2]
public interface DataAccessObject {
//μΆμ λ©μλ
public void select();
public void insert();
public void update();
public void delete();
}
μμ 3) MysqlDao.java ꡬν ν΄λμ€
package ch08;
//[3]
public class MysqlDao implements DataAccessObject{
public void select() {
System.out.println("Mysqlμμ κ²μ");
}
public void insert() {
System.out.println("Mysqlμ μ½μ
");
}
public void update() {
System.out.println("Mysqlλ₯Ό μμ ");
}
public void delete() {
System.out.println("Mysqlλ₯Ό μμ ");
}
}
μμ 4) OracleDao.java ꡬν ν΄λμ€
package ch08;
//[4]
public class OracleDao implements DataAccessObject{
//DataAccessObject interfaceμ μΆμ λ©μλλ₯Ό ꡬννλ ꡬνλ©μλ
public void select() {
System.out.println("OracleDBμμ κ²μ");
}
public void insert() {
System.out.println("OracleDBμ μ½μ
");
}
public void update() {
System.out.println("OracleDBλ₯Ό μμ ");
}
public void delete() {
System.out.println("OracleDBλ₯Ό μμ ");
}
}