문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 다음 판 | 이전 판 | ||
|
프로그램:java:ㄴhomework:book_source:ch09 [2022/01/04 10:41] clayeryan@gmail.com 만듦 |
프로그램:java:ㄴhomework:book_source:ch09 [2025/06/27 16:07] (현재) |
||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| - | ====== | + | ====== |
| + | |||
| + | ===== 인터페이스 선언 ===== | ||
| + | |||
| + | **인터페이스의 구조** | ||
| + | |||
| + | [public] interface 인터페이스명 { | ||
| + | | ||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | |||
| + | : | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public interface InterfaceEx { | ||
| + | |||
| + | // 상수 | ||
| + | public int MIN_PRICE = 0; | ||
| + | public int MAX_PRICE = 100000; | ||
| + | |||
| + | // 추상 메서드 | ||
| + | public double meanPrice(); | ||
| + | public double totalPrice(); | ||
| + | |||
| + | // default 메서드 | ||
| + | default double getSalePrice(double price) { | ||
| + | return price - (price * 0.05); | ||
| + | } | ||
| + | |||
| + | // static 메서드 | ||
| + | static void printPrice(double price) { | ||
| + | System.out.println(price); | ||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== 인터페이스 구현 ===== | ||
| + | |||
| + | **Printer.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public interface Printer { | ||
| + | |||
| + | int INK = 100; | ||
| + | void print(); | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | **Scanner.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public interface Scanner { | ||
| + | |||
| + | void scan(); | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **Fax.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public interface Fax { | ||
| + | |||
| + | String FAX_NUMBER = " | ||
| + | void send(String tel); | ||
| + | void receive(String tel); | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **Complexer.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class Complexer implements Printer, Scanner, Fax { | ||
| + | |||
| + | @Override | ||
| + | public void send(String tel) { | ||
| + | System.out.println(FAX_NUMBER + " | ||
| + | |||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public void receive(String tel) { | ||
| + | System.out.println(tel + " | ||
| + | |||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public void scan() { | ||
| + | System.out.println(" | ||
| + | |||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public void print() { | ||
| + | System.out.println(" | ||
| + | |||
| + | } | ||
| + | |||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **ComplexerMain.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class ComplexerMain { | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | |||
| + | Complexer com = new Complexer(); | ||
| + | System.out.println(Complexer.INK); | ||
| + | System.out.println(Complexer.FAX_NUMBER); | ||
| + | com.print(); | ||
| + | com.scan(); | ||
| + | com.send(" | ||
| + | com.receive(" | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | : | ||
| + | |||
| + | 인터페이스 객체명 = new 인터페이스(){ | ||
| + | // 인터페이스의 모든 추상 메서드 구현 | ||
| + | }; | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class ComplexerMain2 { | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | |||
| + | Fax fax = new Fax() { | ||
| + | |||
| + | @Override | ||
| + | public void send(String tel) { | ||
| + | System.out.println(" | ||
| + | |||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public void receive(String tel) { | ||
| + | System.out.println(" | ||
| + | |||
| + | } | ||
| + | |||
| + | }; | ||
| + | |||
| + | fax.send(" | ||
| + | fax.receive(" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **ComplexcerInterFace.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public interface ComplexcerInterface extends Printer, Scanner, Fax { | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **ComplexerMain3.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class ComplexerMain3 { | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | |||
| + | ComplexcerInterface ci = new ComplexcerInterface() { | ||
| + | |||
| + | @Override | ||
| + | public void send(String tel) { | ||
| + | System.out.println(" | ||
| + | |||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public void receive(String tel) { | ||
| + | System.out.println(" | ||
| + | |||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public void print() { | ||
| + | System.out.println(" | ||
| + | |||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public void scan() { | ||
| + | System.out.println(" | ||
| + | |||
| + | } | ||
| + | |||
| + | }; | ||
| + | |||
| + | ci.send(" | ||
| + | ci.receive(" | ||
| + | ci.print(); | ||
| + | ci.scan(); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== 인터페이스의 다형성 ===== | ||
| + | |||
| + | |||
| + | **GraphiicCard.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public interface GraphicCard { | ||
| + | |||
| + | String MEMORY = " | ||
| + | |||
| + | public void process(); | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | **Amd.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class Amd implements GraphicCard { | ||
| + | |||
| + | public void process() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | **Nvidia.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class Nvidia implements GraphicCard { | ||
| + | |||
| + | public void process() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | **Computer.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class Computer { | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | |||
| + | GraphicCard gc = new Amd(); | ||
| + | |||
| + | System.out.println(" | ||
| + | |||
| + | // Amd로 생성 | ||
| + | gc = new Amd(); // 자동 형변환 | ||
| + | gc.process(); | ||
| + | |||
| + | // Nvidia로 교체 | ||
| + | gc = new Nvidia(); // 자동 형변환 | ||
| + | gc.process(); | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | : | ||
| + | |||
| + | <code java> | ||
| + | package chapter08.poly; | ||
| + | |||
| + | public class Game { | ||
| + | |||
| + | void display(GraphicCard gc) { | ||
| + | gc.process(); | ||
| + | } | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | Game g = new Game(); | ||
| + | Amd gc = new Amd(); | ||
| + | g.display(gc); | ||
| + | |||
| + | Nvidia gc2 = new Nvidia(); | ||
| + | g.display(gc2); | ||
| + | |||
| + | : | ||
| + | |||
| + | **Animal.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public interface Animal { | ||
| + | |||
| + | void sleep(); | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **Eagle.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class Eagle implements Animal { | ||
| + | |||
| + | public void sleep() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | public void eat() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **AnimalMain.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class AnimalMain { | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | |||
| + | Animal eagle = new Eagle(); | ||
| + | |||
| + | eagle.sleep(); | ||
| + | // eagle.eat(); | ||
| + | |||
| + | Eagle eagleObj = (Eagle)eagle; | ||
| + | eagleObj.eat(); | ||
| + | |||
| + | System.out.println(eagle instanceof Animal); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | : | ||
| + | |||
| + | 객체 isntanceof 클래스(인터페이스) | ||
| + | |||
| + | **A.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public interface A { | ||
| + | |||
| + | void a(); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | **AA.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public interface AA extends A { | ||
| + | |||
| + | void aa(); | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **AAA.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class AAA implements AA { | ||
| + | |||
| + | @Override | ||
| + | public void a() { | ||
| + | |||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public void aa() { | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **AB.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public interface AB extends A { | ||
| + | |||
| + | void ab(); | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **ABB.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class ABB implements AB { | ||
| + | |||
| + | @Override | ||
| + | public void a() { | ||
| + | |||
| + | } | ||
| + | |||
| + | @Override | ||
| + | public void ab() { | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **InstanceofEx.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class InstanceofEx { | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | A a = new AAA(); | ||
| + | |||
| + | AA aa = new AAA(); | ||
| + | AAA aaa = new AAA(); | ||
| + | |||
| + | A b = new ABB(); | ||
| + | AB ab = new ABB(); | ||
| + | ABB abb = new ABB(); | ||
| + | |||
| + | System.out.println(" | ||
| + | System.out.println(" | ||
| + | System.out.println(" | ||
| + | |||
| + | System.out.println(" | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== default 메서드와 static 메서드 ===== | ||
| + | |||
| + | |||
| + | **MyInterface1.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public interface MyInterface1 { | ||
| + | |||
| + | default void defaultMethod() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | static void staticMethod() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **MyInterface2.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public interface MyInterface2 { | ||
| + | |||
| + | default void defaultMethod() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | static void staticMethod() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **Parent.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class Parent { | ||
| + | |||
| + | public void method2() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **Child.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class Child extends Parent implements MyInterface1, | ||
| + | |||
| + | @Override | ||
| + | public void defaultMethod() { | ||
| + | System.out.println(" | ||
| + | MyInterface1.super.defaultMethod(); | ||
| + | MyInterface2.super.defaultMethod(); | ||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **DefaultStaticEx.java** | ||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class DefaultStaticEx { | ||
| + | |||
| + | public static void main(String[] args) { | ||
| + | |||
| + | Child c = new Child(); | ||
| + | c.defaultMethod(); | ||
| + | c.method2(); | ||
| + | |||
| + | MyInterface1.staticMethod(); | ||
| + | MyInterface2.staticMethod(); | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | ===== 어노테이션 ===== | ||
| + | |||
| + | |||
| + | **UserAnnot.java** | ||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | import java.lang.annotation.Retention; | ||
| + | import java.lang.annotation.RetentionPolicy; | ||
| + | |||
| + | @Retention(RetentionPolicy.RUNTIME) | ||
| + | public @interface UserAnnot { | ||
| + | |||
| + | String value(); | ||
| + | int number() default 5; | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | **UserClass.java** | ||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | public class UserClass { | ||
| + | |||
| + | @UserAnnot(value=" | ||
| + | public void methodA() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | |||
| + | @UserAnnot(value=" | ||
| + | public void methodB() { | ||
| + | System.out.println(" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | **AnnotationEx.java** | ||
| + | |||
| + | <code java> | ||
| + | package chapter09; | ||
| + | |||
| + | import java.lang.reflect.Method; | ||
| + | |||
| + | public class AnnotationEx { | ||
| + | |||
| + | public static void main(String[] args) throws Exception { | ||
| + | |||
| + | Method method[] | ||
| + | |||
| + | for (int i=0; i< | ||
| + | String methodName | ||
| + | UserAnnot annot = method[i].getAnnotation(UserAnnot.class); | ||
| + | |||
| + | System.out.print(methodName + "의 어노테이션 "); | ||
| + | System.out.print(" | ||
| + | System.out.print(" | ||
| + | System.out.println(); | ||
| + | |||
| + | method[i].invoke(new UserClass(), | ||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </ | ||
별도로 명시하지 않을 경우, 이 위키의 내용은 다음 라이선스에 따라 사용할 수 있습니다: CC Attribution-Share Alike 4.0 International