ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인터페이스?
    Back end/Java 객체지향 2023. 11. 23. 12:26

    - 인터페이스란? 

    인터페이스란, 역할을 부여하는 것이다.

     

    - 특징 

    인터페이스는 추상 메소드로 구성된다. 추상 메소드란, 중괄호 내부가 없는 껍데기 메소드이다.

     

    public class SmartPhoneTest {
      public static void main(String[] args) {
        // 객체 생성
         SmartPhone sp = new SmartPhone("아이폰", "010-0000-0000");

        // 전화 걸기
         sp.call("010-1234-5678");
        
        // 전화벨이 울림
         sp.ring();
      }
    }

    interface Phone {
      // targetNumber로 전화를 걸거야! 어떻게? 그건 아직 몰라!
      public void call(String targetNumber);
      
      // 전화벨이 울릴거야! 어떻게? 그건 아직 몰라!
      public void ring();
    }

    // 구현체 클래스 
    class SmartPhone implements Phone {
      protected String name;
      protected String phoneNumber;
      
      public SmartPhone(String name, String phoneNumber) {
        this.name = name;
        this.phoneNumber = phoneNumber;
      }
      
      /* Phone 인터페이스의 모든 프로토타입 메소드를 구현하시오. */ 
        public void call(String targetNumber){
          System.out.printf("%s로 전화를 겁니다!", targetNumber);
        }
        
        public void ring(){
          System.out.println("전화벨이 울립니다.");
        }
          
        }


     

    public class SmartPhoneTest2 {
      public static void main(String[] args) {
        // 객체 생성
        SmartPhone sp = new SmartPhone("아이폰");
       
        // 비프음 내기
        sp.beep();
      
        // 음악 재생하기
        sp.playMusic("상어송");
      }
    }

    interface Alarm {
      public void beep();                  // 비프음
      public void playMusic(String title); // 음악 재생
    }

    class SmartPhone implements Alarm {
      private String name; // 모델명

      public SmartPhone(String name) {
        this.name = name;
      }
      /* Alarm 인터페이스의 추상 메소드를 재정의하시오. */
        public void beep(){
          System.out.println("삐빕 ! 삐비비빕~!");
        } 
        public void playMusic(String title){
         System.out.printf ("[%s]을 재생합니다..!", title);
        }
        
    }

     

    삐빕 ! 삐비비빕~!
    [상어송]을 재생합니다..!

     

     

    -  인터페이스 다형성 

    public class Polymorphism {
      public static void main(String[] args) {
        // 성기사 객체 생성
        HolyKnight uther = new HolyKnight("우서", 180);
        
        // 탱커로서의 역할 수행 (업케스팅)
        Tanker t = uther;
        t.increaseHp();
        
        // 힐러로서의 역할 수행 (업케스팅)
        Healer h = uther;
        h.heal();
      }
    }

    interface Tanker {
      public void increaseHp();
    }

    interface Healer {
      public void heal();
    }

    /* 1. 탱커와 힐러 역할을 부여하세요. */
    class HolyKnight implements Tanker,Healer {
      private String name;
      private int hp;

      public HolyKnight(String name, int hp) {
        this.name = name;
        this.hp = hp;
      }

      /* 2. Tanker의 메소드를 오버라이딩하세요. */
        public void increaseHp(){
          System.out.println("전체 체력 +50 증가시킵니다.");
        }

      
      /* 3. Healer의 메소드를 오버라이딩하세요. */
        public void heal(){
          System.out.println("체력을 +30 회복합니다.");
        }

    }

     

    전체 체력 +50 증가시킵니다.
    체력을 +30 회복합니다.

     

     

    public class VariousRoles {
      public static void main(String[] args) {
        // HongPark 객체 생성
        HongPark park = new HongPark("홍팍");

        // 각 직업으로 변신
        Developer devPark = park;
        Instructor instPark = park;
        Masseur masPark = park;
        
        /* 3. 직업별 메소드를 호출하여 코드를 완성하세요. */
        devPark.programming("JAVA");
        instPark.teach("자료구조");
        masPark.massage();
      }
    }

    interface Developer {
      public void programming(String lang);
    }

    interface Instructor {
      public void teach(String subject);
    }

    interface Masseur {
      public void massage();
    }

    /* 1. 홍팍 클래스에 개발자, 강사, 마사지사 역할을 부여하세요. */
    class HongPark implements Developer,Instructor,Masseur {
      private String name; // 이름
     
      public HongPark(String name){
        this.name = name;
        
      }

      /* 2. 구현하기로 한 인터페이스의 메소드를 오버라이딩 하세요.*/
        public void programming(String lang){
          System.out.printf ("%s -> %s  프로그래밍 중! \n", name,lang);
        };
        public void teach(String subject){
           System.out.printf ("%s -> %s 수업 중!\n", name,subject);
        };
        public void massage(){
           System.out.printf ("%s -> 마사지 중!\n",name);

        };


        

    }

     

    홍팍 -> JAVA  프로그래밍 중! 
    홍팍 -> 자료구조 수업 중!
    홍팍 -> 마사지 중!

     

    - 인터페이스 업케스팅

    public class ObjectGrouping {
      public static void main(String[] args) {
        // 다양한 객체 생성
        Bird bird = new Bird();
        Helicopter copter = new Helicopter();
        Rocket rocket = new Rocket();
        
        // 인터페이스 타입으로 그룹화
        Flyable[] flyableThings = { bird, copter, rocket };
        
        // 모든 날것들을 날림
        for (int i = 0; i < flyableThings.length; i++) {
          Flyable temp = flyableThings[i];
          temp.fly();
        }
      }
    }

    interface Flyable {
      public void fly();
    }

    class Bird implements Flyable {
      /* 1. fly() 메소드를 오버라이딩 하세요. */
        public void fly(){
           System.out.printf ("<새>가 날개를 퍼덕이며 날아갑니다!\n");
        };
      
    }

    class Helicopter implements Flyable {
      /* 2. fly() 메소드를 오버라이딩 하세요. */
        public void fly(){
           System.out.printf ("<헬기>가 프로펠러를 힘차게 돌리며 날아갑니다!\n");
        };
    }

    class Rocket implements Flyable {
      /* 3. fly() 메소드를 오버라이딩 하세요. */
     public void fly(){
          System.out.printf ("<로켓>이 제트 엔진을 분출하며 날아갑니다!\n");
        };
    }

     

    <새>가 날개를 퍼덕이며 날아갑니다!
    <헬기>가 프로펠러를 힘차게 돌리며 날아갑니다!
    <로켓>이 제트 엔진을 분출하며 날아갑니다!

     

     

     

     

    출저: 홍팍 (https://www.youtube.com/@hongpark)

    이 블로그 기록은 개인 공부용 기록입니다.

Designed by Tistory.