Java

중요한! 인터페이스(interface)

H_u 2024. 4. 25. 16:33
728x90
반응형
SMALL

💡 학습 목표

  1. 인터페이스에 개념을 이해하자.
  2. 인터페이스와 추상클래스를 사용해서 코드 작성해보기

 

1. 인터페이스에 개념을 이해하자.

● 모든 메서드가 추상 메서드로 선언됨 public abstract

● 모든 변수는 상수로 선언됨 public static final

 

 

시나리오 코드

package basic.ch22;

 

interface Animal {

//추상 메서드만 선언 가능

//public abstract void eat();

//public abstract void move();

 

//축약 가능

void eat();

void move();

}

// implements = 구현하다

class Dog implements Animal {

 

@Override

public void eat() {

System.out.println("먹이를 먹다");

// TODO Auto-generated method stub

 

}

 

@Override

public void move() {

// TODO Auto-generated method stub

System.out.println("촐랑촐랑 다닌다");

}

 

 

}

 

class Bird implements Animal {

 

@Override

public void eat() {

// TODO Auto-generated method stub

System.out.println("모이를 먹다");

}

 

@Override

public void move() {

// TODO Auto-generated method stub

System.out.println("날아 다닌다");

}

 

}

 

 

인터페이스의 특징

  • 추상 메서드: 인터페이스는 추상 메서드(구현부가 없는 메서드)만을 가질 수 있습니다. 자바 8부터는 default 메서드와 staitc 메서드를 가질 수 있게 되었습니다.
  • 다중 상속: 클래스는 여러 인터페이스를 구현할 수 있으므로, 다중 상속의 효과를 낼 수 있습니다.
  • 구현: 클래스가 인터페이스를 구현할 때는 implements 키워드를 사용합니다.

 

package basic.ch22;

 

public abstract class HomeAppliances {

 

int width;

int height;

String color;

 

}

 

package basic.ch22;

 

public interface RemoteController {

 

// 모든 변수는 --> public static final

// 모든 메서드 --> 추상 메서드 public abstract

 

public abstract void turnOn();

void turnOff(); // 축약 가능

 

}

 

package basic.ch22;

 

public interface SoundEffect {

 

// public abstract void soundOn();

void soundOn();

}

 

package basic.ch22;

 

public class Refrigerator extends HomeAppliances

implements RemoteController, SoundEffect {

 

 

@Override

public void turnOn() {

System.out.println("냉장고를 켭니다.");

}

 

@Override

public void turnOff() {

System.out.println("냉장고를 끕니다.");

}

 

@Override

public void soundOn() {

System.out.println("띠리링 ~~~ ");

}

 

 

}

package basic.ch22;

 

public class Televsion extends HomeAppliances implements RemoteController {

 

@Override

public void turnOn() {

System.out.println("TV를 켭니다");

}

 

@Override

public void turnOff() {

System.out.println("TV를 끕니다");

}

 

}

package basic.ch22;

 

public class ToyRobot implements RemoteController, SoundEffect {

 

int width;

int height;

String color;

 

@Override

public void turnOn() {

System.out.println("장남감 로봇을 켭니다.");

}

 

@Override

public void turnOff() {

System.out.println("장남감 로봇을 끕니다.");

}

 

@Override

public void soundOn() {

System.out.println("듀두두두ㅜㄷ ~~~ 크악~");

}

 

 

}

 

 

2. 인터페이스와 추상클래스를 사용해서 코드 작성해보기

 

 

package basic.ch22;

 

public interface Calc {

 

public abstract int add(int n1, int n2);

public abstract int substract(int n1, int n2);

public abstract int times(int n1, int n2);

public abstract double divide(int n1, int n2);

 

}

 

package basic.ch22;

 

public abstract class Calculator implements Calc {

 

// 예상 테스트 값 n1 - 10 , n2 - 0

@Override

public double divide(int n1, int n2) {

if(n1 == 0 || n2 == 0) {

System.out.println("어떤 수를 0으로 나눌 수 없습니다");

return 0.0;

}

return n1 / n2;

}

 

}

package basic.ch22;

 

public class CompleteCalc extends Calculator {

 

 

@Override

public int add(int n1, int n2) {

return n1 + n2;

}

 

@Override

public int substract(int n1, int n2) {

return n1 - n2;

}

 

@Override

public int times(int n1, int n2) {

return n1 * n2;

}

 

public void showInfo() {

System.out.println("계산 완료");

}

 

// 코드 테스트 메인 함수

public static void main(String[] args) {

Calc calc = new CompleteCalc(); // 업캐스팅된 상태

 

System.out.println(calc.add(10, 10));

System.out.println(calc.divide(10, 0));

System.out.println("--------------------");

 

((CompleteCalc)calc).showInfo();

// 반복문, 제어문 활용한다면 instanceof 연산자를 기억하자

if( calc instanceof CompleteCalc ) {

((CompleteCalc) calc).showInfo();

}

 

}

 

 

}

728x90
반응형
SMALL