μμ λ μ§/μ 리λ μ§
2022.04.19/2022.04.25
νμ΅μ£Όμ
- 09 μΈν°νμ΄μ€, λλ€μ, ν¨ν€μ§
νμ΅λ΄μ©
09 μΈν°νμ΄μ€, λλ€μ, ν¨ν€μ§
Interface
- μλ‘ λ€λ₯Έ μ μΉλ€μ΄ μ°κ²°λμ΄ μνΈ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ κ·κ²©
- μΈν°νμ΄μ€κ° λ§μ§ μμΌλ©΄ μ°κ²° λΆκ°
β» μΆμ ν΄λμ€λ³΄λ€ λ μΆμμ μΈ ν΄λμ€ (μΆμ ν΄λμ€λ κ°μ²΄ μμ± λΆκ° → μμμ©)
μλ° μΈν°νμ΄μ€
- ν΄λμ€ μ¬μ΄μ μνΈ μμ©μ κ·κ²©
(μ½λ©μ λ¨μκ° ν΄λμ€μ΄λ―λ‘ ν΄λμ€μ ν΄λμ€ μ¬μ΄μ μνΈ μμ©μ κ·κ²©μ λνλΈ κ²)
μΈν°νμ΄μ€μ μ: μ€λ§νΈ ν μμ€ν
μΈν°νμ΄μ€μ μ μ
public interface μΈν°νμ΄μ€_μ΄λ¦ {
λ°νν μΆμλ©μλ1(...); // μΈν°νμ΄μ€μλ λͺΈμ²΄κ° μλ μΆμ λ©μλλ§ μ μ
λ°νν μΆμλ©μλ2(...);
...
}
// μ
public interface RemoteControl{
public void turnOn();
public void turnOff();
}
- λ©μλλ€μ λͺ¨λ μ΄λ¦κ³Ό 맀κ°λ³μλ§ μ‘΄μ¬νκ³ , λͺΈμ²΄κ° μμΌλ©° μΈλ―Έμ½λ‘ μΌλ‘ μ’ λ£λλ μ μ μ μν΄μΌ ν¨
- μΈν°νμ΄μ€ μμ λͺ¨λ λ©μλλ publicμ λΆμ΄μ§ μμλ public μ·¨κΈλ¨
- C++ → μμκ°μν¨μ
- APIμμ ν΄λμ€λ μ μ, μΈν°νμ΄μ€λ μ΄ν€λ¦μ²΄λ‘ ꡬλΆ
- μλ°μμλ β μμ΄μ½μΌλ‘ ꡬλΆ
μΈν°νμ΄μ€ ꡬν
- μΈν°νμ΄μ€λ§μΌλ‘ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
- μΈν°νμ΄μ€λ λ€λ₯Έ ν΄λμ€μ μνμ¬ κ΅¬ν(implement)λ μ μλ€.
public class ν΄λμ€_μ΄λ¦ implements μΈν°νμ΄μ€_μ΄λ¦ {
λ°νν μΆμλ©μλ1(...) { // μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€λ μΆμ λ©μλμ λͺΈμ²΄λ₯Ό ꡬνν΄μΌ ν¨
...
}
λ°νν μΆμλ©μλ2(...) {
...
}
}
- extends → νμ₯ μμ (λΆλͺ¨μ κ²μ λ¬Όλ €λ°κ³ κ±°κΈ°μ μΆκ°ν¨)
- implements → μΈν°νμ΄μ€λ‘λΆν° μμ, μΈν°νμ΄μ€κ° ν΄λμ€ κ΅¬ν (ꡬν, μ€ν)
μΈν°νμ΄μ€ VS μΆμ ν΄λμ€
- λ κ°μ§ λͺ¨λ κ°μ²΄νν μ μκ³ , μ£Όλ‘ κ΅¬νμ΄ μλ λ©μλλ€λ‘ μ΄λ£¨μ΄μ§λ€.
- μΆμ ν΄λμ€μμλ μΌλ°μ μΈ νλλ μ μΈν μ μκ³ , μΌλ°μ μΈ λ©μλλ μ μν μ μλ€.
- μΈν°νμ΄μ€μμλ λͺ¨λ λ©μλλ public, abstractκ° λλ€.
- μλ°μμλ νλμ ν΄λμ€λ§ μμλ°μ μ μμ§λ§, μ¬λ¬κ° μΈν°νμ΄μ€λ₯Ό λμμ ꡬνν μ μλ€.
Q. μΈμ μ¬μ©ν΄μΌνμ§?
μΆμ ν΄λμ€
- λ§μ½ κ΄λ ¨λ ν΄λμ€λ€ μ¬μ΄μμ μ½λλ₯Ό 곡μ νκ³ μΆμ λ
- 곡ν΅μ μΈ νλλ λ©μλμ μκ° λ§μ κ²½μ°, public μ΄μΈμ μ κ·Ό μ§μ μλ₯Ό μ¬μ©ν΄μΌνλ κ²½μ°
- μ μ μ΄ μλ νλλ μμκ° μλ νλλ₯Ό μ μΈνκΈ°λ₯Ό μν λ
μΈν°νμ΄μ€
- κ΄λ ¨μλ ν΄λμ€λ€μ΄ μΈν°νμ΄μ€λ₯Ό ꡬννκΈΈ μν λ (ex. Comparableκ³Ό Cloneableκ³Ό κ°μ μΈν°νμ΄μ€λ κ΄λ ¨μλ ν΄λμ€λ€μ΄ ꡬννλ€.)
- νΉμ ν μλ£νμ λμμ μ§μ νκ³ μΆμ§λ§ λκ° κ΅¬ννλ μ§ μ κ²½μΈ νμκ° μμ λ
- λ€μ€ μμμ΄ νμν λ
β» μΈν°νμ΄μ€λ ν΄λμ€κ° μλλ―λ‘ new μ°μ°μλ μ¬μ©ν μ μλ€.
RemoteControl obj = new RemoteControl(); // μ€λ₯
μΈν°νμ΄μ€μ νμ
- μΈν°νμ΄μ€λ νλμ μλ£νμ΄λ€.
RemoteControl obj = new Television(); // μΈν°νμ΄μ€ μ°Έμ‘° λ³μ μ μΈ
obj.turnOn();
obj.turnOff();
- Television κ°μ²΄λ₯Ό μμ±νμ§λ§, RemoteControl μ°Έμ‘° λ³μλ‘ κ°λ¦¬ν€κ³ μλ€. μΈν°νμ΄μ€ μ°Έμ‘° λ³μλ₯Ό ν΅ν΄μ κ·Έ μΈν°νμ΄μ€ μμ μ μλ λ©μλλ§ νΈμΆν μ μλ€. λ€λ₯Έ λ©μλλ νλμλ μ κ·Όν μ μλ€.
LAB: νμ΄λ¨Έ μ΄λ²€νΈ μ²λ¦¬
- μ΄λ€ μ΄λ²€νΈ μ²λ¦¬λ₯Ό μν κ³΅ν΅ κ·κ²©μ΄ νμνλ€.
- ActionListener μΈν°νμ΄μ€λ μ‘μ μ΄λ²€νΈ μ²λ¦¬λ₯Ό μν κ·κ²©μ΄λ€.
public interface ActionListener{
void actionPerformed(ActionEvent event);
}
- ActionListener → κ·κΈ°μΈμ¬ λ£κ³ μμ΄!(κ°μμ λλ → μ΄λ²€νΈ μ‘μ)
- Timer μ΄λ²€νΈ μ²λ¦¬ν λ μ¬μ©
- Timeν΄λμ€ → μ£Όμ΄μ§ μκ°μ΄ λλ©΄ μ΄λ²€νΈ λ°μ, actionPerformed() λ©μλ νΈμΆ
μΈν°νμ΄μ€ μμ
- μΈν°νμ΄μ€κ° μΈν°νμ΄μ€λ₯Ό μμλ°λ κ²λ κ°λ₯νλ€.
public interface AdvancedRemoteControl extends RemoteControl{
public void volumeUp();
public void volumeDown();
}
λΆλͺ¨ class | λΆλͺ¨ interface | λΆλͺ¨ interface |
↑extends | ↑implements | ↑extends (ꡬν λΆκ°, νμ₯) |
μμ class | μμ class | μμ interface (bodyμμ) |
λ€μ€ μμ
- νλμ ν΄λμ€κ° μ¬λ¬ κ°μ λΆλͺ¨ ν΄λμ€λ₯Ό κ°μ§λ κ²
- μλ°μμλ λ€μ€ μμμ μ§μνμ§ μλλ€. (→ extendsμ implements κ°μ΄ μ¬μ© κ°λ₯)
class Shpae{protected int x, y;}
interface Drawable{void draw();}
public class Rectangle extends Shape implements Drawable{
int width, height;
public void draw(){
System.out.println("Rectangle Draw");
}
}
μμ μ μ
- μΈν°νμ΄μ€λ μμλ₯Ό μ μν μ μλ€.
- μΈν°νμ΄μ€μ λ³μλ μλμΌλ‘ public static final(μ μ μμ)λ‘ μ²λ¦¬λλ€.
public interface MyConstants{
int NORTH = 1;
int EAST = 2;
int SOUTH = 3;
int WEST = 4;
}
// MyContants.EASTμ κ°μ΄ μμ μ°Έμ‘°ν μ μλ€.
// λ§μ½ ν΄λμ€κ° MYContantsμΈν°νμ΄μ€λ₯Ό ꡬννλ€λ©΄ λ¨μν EASTλ§ μ¨λ λλ€.
μμ 곡μ
interface Date{
public static final int SUNDAY=1, MONDAY=2, TUESDAY=3, WEDNESDAY=4, THURSDAY=5, FRIDAY=6, SATURDAY=7;
}
public class DayTest implements Days{ // μμλ₯Ό 곡μ νλ €λ©΄ μΈν°νμ΄μ€λ₯Ό ꡬννλ€.
public static void main(String[] args){
System.out.println("μΌμμΌ: " + SUNDAY);
}
}
λν΄νΈ λ©μλ
- μΈν°νμ΄μ€ λ©μλμ λν΄λ ꡬν μ 곡ν μ μλ κΈ°λ₯ (JDK8λΆν° μ¬μ© κ°λ₯)
- μμ½μ΄ defaultλ₯Ό μ¬μ©νλ€.
- λν΄νΈ λ©μλκ° μ μλμ΄ μμΌλ©΄ μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€κ° λ©μλμ λͺΈμ²΄λ₯Ό ꡬννμ§ μμλ λ©μλλ₯Ό νΈμΆν μ μλ€.
interface MyInterface{
public void myMethod1(); // 보ν΅μ μΆμλ©μλ
default void myMethod2(){System.out.println("myMethod2()");} // λν΄νΈ λ©μλ. λ©μλμ λͺΈμ²΄λ₯Ό μ 곡ν μ μλ€.
}
public class DefaultMethodTest implements MyInterface{
public void myMethod1(){System.out.println("myMethod()");}
public static void main(String[] args){
DefaultMethodTest obj = new DefaultMethodTest();
obj.Method1();
obj.Method2(); // λν΄νΈ λ©μλλ ꡬννμ§ μμλ λ°λ‘ μ¬μ©ν μ μλ€.
}
}
μ μ λ©μλ
- μΈν°νμ΄μ€μλ μ μ λ©μλ μ μκ° κ°λ₯νλ€. (JDK 8λΆν° μ¬μ© κ°λ₯)
- λ©μλ μ΄λ¦ μμ static ν€μλλ₯Ό λΆμ΄λ©΄ λλ€.
interface MyInterface{
static void print(String msg){ // μΈν°νμ΄μ€μ μ μ λ©μλ
System.out.println(msg + ": μΈν°νμ΄μ€μ μ μ λ©μλ νΈμΆ");
}
}
public class StaticMethodTest{
public static void main(String[] args){
MyInterface.print("Java 8"); // μ§μ νΈμΆ
}
}
무λͺ ν΄λμ€
- ν΄λμ€ λͺΈμ²΄λ μ μλμ§λ§ μ΄λ¦μ΄ μλ ν΄λμ€ (μμ λλ ꡬνμΌλ‘)
- ν΄λμ€ μ μμ λμμ κ°μ²΄ μμ±
- μ΄λ¦μ΄ μκΈ° λλ¬Έμ νλ²λ§ μ¬μ© κ°λ₯
// μ΄λ¦μ΄ μλ κ²½μ°
class TV implements RemotControl{
...
}
TV obj = new TV();
// 무λͺ
ν΄λμ€μ κ²½μ°
RemoteControl obj = new RemoteControl(){ ... };
// 무λͺ
ν΄λμ€ νμ
new λΆλͺ¨ν΄λμ€μ΄λ¦() // μμλ°κ³ μ νλ λΆλͺ¨ ν΄λμ€μ μ΄λ¦ or ꡬννκ³ μ νλ μΈν°νμ΄μ€μ μ΄λ¦
{
... // ν΄λμ€ λͺΈμ²΄
}
λλ€μ(lambda expression)
- λ€λ₯Έ κ³³μ μ λ¬λ μ μλ μ½λ λΈλ‘ (λμ€μ μ€νλ λͺ©μ μΌλ‘ λ€λ₯Έ κ³³μ μ λ¬λ μ μλ ν¨μ)
- μ΄λ¦μ΄ μλ λ©μλλΌκ³ ν μ μμ
- λλ€μμ μ¬μ©νλ μ΄μ : κ°κ²°ν¨ → λλ€μ μ΄μ©νλ©΄ λ©μλκ° νμν κ³³μ κ°λ¨ν λ©μλ λ³΄λΌ μ μμ
- μ¦, λ©μλκ° λ 립λ λ¨μλ‘ μ·¨κΈλ μ μμ
- class μμ΄ λ©μλ λ§λ€ μ μμ
- λλ€μμ ( ) -> { } ꡬ문μ μ¬μ©νμ¬ μμ± ( ):argument, λ©μλμ 맀κ°λ³μ 리μ€νΈ / { }:body
- -> : λλ€ μ°μ°μ
() -> System.out.println("Hello World");
(String s) -> {System.out.println(s);}
() -> 69
() -> {return 3.141592;}
λλ€μμ νμμ±
- μ΄λ²€νΈ μ²λ¦¬ μ½λ μμ± λ°©λ²
1. μ΄λ²€νΈ μ²λ¦¬ κ·μΉ μΈν°νμ΄μ€λ₯Ό,
1) ν΄λμ€λ‘ μ μ(implements) νκ³ ,
2) ꡬνλ ν΄λμ€μμ κ°μ²΄λ₯Ό μμ±ν ν,
3) μ΄λ²€νΈ μ²λ¦¬ μ½λλ‘ λ±λ‘
2. μ΄λ²€νΈ μ²λ¦¬ κ·μΉ μΈν°νμ΄μ€λ₯Ό,
1) 무λͺ ν΄λμ€λ‘ μ μνκ³ ,
2) μ΄λ²€νΈ μ²λ¦¬ μ½λ λ±λ‘
3. μ΄λ²€νΈ μ²λ¦¬ κ·μΉ μΈν°νμ΄μ€λ₯Ό,
1) λλ€μμΌλ‘ μ΄λ²€νΈ μ²λ¦¬ μ½λ λ±λ‘
ν¨μ μΈν°νμ΄μ€μ λλ€μ
- ν¨μ μΈν°νμ΄μ€: νλμ μΆμ λ©μλλ§ μ μΈλ μΈν°νμ΄μ€ → μ) java.lang.Runnable
- λλ€μμ ν¨μ μΈν°νμ΄μ€μ λμ κ°λ₯, 맀κ°λ³μλ‘ μ λ¬κ°λ₯ → μ) Runnable r = () -> System.out.println(" ");
ν¨ν€μ§
- μλ‘ κ΄λ ¨ μλ ν΄λμ€λ μΈν°νμ΄μ€λ€μ λ¬Άμ
ν¨ν€μ§ μ μ
package ν¨ν€μ§μ΄λ¦;
// μ
package library;
ν¨ν€μ§ μ¬μ©
1. κ²½λ‘κΉμ§ ν¬ν¨νλ μμ ν μ΄λ¦μΌλ‘ μ°Έμ‘°
μ) library.Rectangle myRect = new library.Rectangle();
2. μνλ ν¨ν€μ§ λ©€λ²λ§ import (→μ΄ν΄λ¦½μ€κ° μλμΌλ‘ ν΄μ€...)
μ) import library.Rectangle;
3. ν¨ν€μ§ μ 체λ₯Ό import (λ¨μ : μ°μ§ μλ ν¨ν€μ§κΉμ§ λΆλ¬μ νμΌμ΄ 컀μ§)
μ) import library.*;
νμ΅λ΄μ© μ΄ν΄λ
85% μ λ. μ΄λ²μ μ’ μ΄λ ΅λ€.
νμ΅νλ λμ보기
μ΄λ²μ λ°°μ΄ λ΄μ©μ κ·Έ μ λ΄μ©λ€λ³΄λ€ λ μ΄λ ΅λ€κ³ λκ»΄μ‘λ€. μλ‘μ΄ κ°λ μΈ μΈν°νμ΄μ€μ λλ€μμ λ°°μμ κ·Έλ°λ―νλ€. λ§μ΄ λ³΄κ³ μμ λ λ³΄κ³ ν΄μΌκ² λ€.
λ€μ νμ΅κ³ν
μ΄λ²€νΈ μ²λ¦¬1
'Study > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μλ°νλ‘κ·Έλλ° 10μ£Όμ°¨ μ 리 (0) | 2022.05.15 |
---|---|
μλ°νλ‘κ·Έλλ° 9μ£Όμ°¨ μ 리 (0) | 2022.05.08 |
μλ°νλ‘κ·Έλλ° 6μ£Όμ°¨ μ 리 (0) | 2022.04.16 |
μλ°νλ‘κ·Έλλ° 5μ£Όμ°¨ μ 리 (0) | 2022.04.09 |
μλ°νλ‘κ·Έλλ° 4μ£Όμ°¨ μ 리 (0) | 2022.04.03 |