# 리뷰: 인터페이스 이번 실습을 통해 배운 내용을 정리해봅시다. 1) 인터페이스란, 하나의 역할을 부여하는 것으로, 프로토타입 메소드를 가진다. ``` // AAA, BBB, CCC 기능을 갖는 인터페이스 Son interface Son { public int AAA(); public void BBB(); public String CCC(); } ``` 2) implements 키워드를 사용하면, 인터페이스(역할)를 클래스에 부여할 수 있다. ``` // 힐러 역할 interface Healer { public void healing(); // 체력 회복 public void shield(); // 보호막 생성 } // 마법사 클래스 class Wizard implements Healer { ... } ``` 3) 특정 인터페이스를 구현하는 클래스는 반드시 프로토타입 메소드를 오버라이딩(재정의) 해야 한다. ``` class Wizard implements Healer { // 메소드 오버라이딩(재정의) public void healing() { System.out.println("체력을 회복시킵니다!"); } // 메소드 오버라이딩(재정의) public void shield() { System.out.println("보호막을 생성합니다!"); } } ``` 4) 하나의 클래스가 여러 개의 인터페이스를 구현할 수 있다. ``` class SmartPhone implements Alarm, Phone, Messanger { // 내부 생략.. } ``` 5) 여러 인터페이스를 구현하는 클래스의 객체는, 해당 인터페이스 타입으로 업캐스팅 될 수 있다. ``` // 스마트폰 객체 생성 SmartPhone sp = new SmartPhone(); // 스마트폰을 다양하게 해석(업캐스팅 - 상위 타입으로 해석) Alarm a = sp; // 알람 역할 Phone p = sp; // 전화기 역할 Messanger m = sp; // 메신저 역할 ``` 6) 같은 인터페이스를 구현한 경우, 서로 다른 클래스의 객체일지라도 배열 또는 ArrayList 등으로 그룹화 할 수 있다. ``` // 다양한 객체 생성 Bird bird = new Bird(); Helicopter copter = new Helicopter(); Rocket rocket = new Rocket(); // 인터페이스 타입으로 그룹화 Flyable[] flyableThings = { bird, copter, rocket }; // Flyable 타입을 저장할 ArrayList 생성 ArrayList<Flyable> list = new ArrayList<Flyable>(); // 인터페이스를 통한 다양한 하위 객체들을 저장 list.add(bird); list.add(copter); list.add(rocket); ``` ## 문제 내 주변엔 다양한 직업군의 사람들이 있다. 뮤지션, 건축가, 개발자, 변호사, etc.. 하지만 우리는 모두 친구다. 이러한 내용을 인터페이스와 메소드 오버라이딩을 사용하여 표현하려 한다. ![클라우드스터딩-자바-인터페이스-그룹화-업캐스팅-메소드-오버라이딩](https://i.imgur.com/I6nBd3A.png) 출력 예와 같은 결과를 만들도록, 주어진 코드를 완성하시오. ## 출력 예 ``` [예술가]김씨 -> 칭구 아이가! [건축가]이씨 -> 칭구 아이가! [개발자]박씨 -> 칭구 아이가! [변호사]최씨 -> 칭구 아이가! ```
관련 강의로 이동

코드: java 1.8

public class VariousFriends { public static void main(String[] args) { // 객체 생성 Artist kim = new Artist("김씨"); Architect lee = new Architect("이씨"); Developer park = new Developer("박씨"); Lawyer choi = new Lawyer("최씨"); // 그룹화: 인터페이스 기준 Friend[] friends = { kim, lee, park, choi }; for (Friend f : friends) { f.dearFriend(); } } } interface Friend { public void dearFriend(); } /* 1. 해당 클래스에 Friend 인터페이스를 구현하세요. */ class Artist { private String name; public Artist(String name) { this.name = name; } /* 1.1 dearFriend() 메소드를 오버라이딩 하세요. */ } /* 2. 해당 클래스에 Friend 인터페이스를 구현하세요. */ class Architect implements Friend { private String name; public Architect(String name) { this.name = name; } /* 2.1 dearFriend() 메소드를 오버라이딩 하세요. */ } /* 3. 해당 클래스에 Friend 인터페이스를 구현하세요. */ class Developer implements Friend { private String name; public Developer(String name) { this.name = name; } /* 3.1 dearFriend() 메소드를 오버라이딩 하세요. */ } /* 4. 해당 클래스에 Friend 인터페이스를 구현하세요. */ class Lawyer implements Friend { private String name; public Lawyer(String name) { this.name = name; } /* 4.1 dearFriend() 메소드를 오버라이딩 하세요. */ }

입력

정답이 궁금하다면? 코드를 제출해보세요!