문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
프로그램:java:ㄴhomework:book_source:ch09 [2022/01/04 10:42] clayeryan@gmail.com |
프로그램:java:ㄴhomework:book_source:ch09 [2023/07/13 17:29] (현재) clayeryan@gmail.com ↷ 문서가 programmer:java:ㄴhomework:book_source:ch09에서 프로그램:java:ㄴhomework:book_source:ch09(으)로 이동되었습니다 |
||
---|---|---|---|
줄 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[] = UserClass.class.getDeclaredMethods(); | ||
+ | |||
+ | for (int i=0; i< | ||
+ | String methodName = method[i].getName(); | ||
+ | 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(), | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||