-
인터페이스?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)
이 블로그 기록은 개인 공부용 기록입니다.
'Back end > Java 객체지향' 카테고리의 다른 글
객체 속에 객체 선언 ★ (0) 2024.04.10 super 예시 (0) 2023.11.22 업 캐스팅? (0) 2023.11.22 ArrayList (0) 2023.11.22 주사위 A와 B를 동시에 100회 던진 결과의 합을 토대로, 출력 예와 같은 결과를 만드시오 (0) 2023.11.22