JAVA_인터페이스(Interface)

뚱이아저씨·2023년 1월 8일
0

자바

목록 보기
2/15
post-thumbnail

인터페이스(Interface)

자바에서 인터페이스란?

인터페이스는 일종의 추상 클래스이며 인터페이스는
추상메소드 처럼 추상 메소드를 가지지만
일반메소드 또는 멤버변수(필드)를 가질 수 없다.
오직 추상 메소드와 상수만 가질 수 있다.

인터페이스 사용 이유

  1. 극단적으로 동일한 목적 하에 동일한 기능을
    보장하게 하기 위함으로 사용한다.
  2. 자바의 다형성을 이용해 개발코드 수정을
    줄이고 유지 보수성을 높이기 위해 사용한다.

인터페이스 특징

  1. 다중 구현(상속) 가능
  • 자식 클래스가 여러 부모 인터페이스들을
    상속 받을 수 있다.
  1. 추상 메소드만 보유
  • 인터페이스는 추상 메소드와 상수만 가질 수
    있다.
  1. 생성자 생성 불가
  • 생성자 모두 생성이 불가 하다.
  1. 메소드 오버라이딩 필수
  • 자식 클래스는 부모 인터페이스의 함수를
    모두 오버라이딩 해야한다.
  1. 구현부( {} )가 없다.
  • 인터페이스에는 객체 생성이 불가하여
    추상메소드만 쓰는데 이때 메소드에 구현부가 없다.

인터페이스 예제

interface Animal{
	//추상 메소드만 작성 가능
    //메소드의 구현부가 없다.
	public void cry();
}

class Cat implements Animal{
	public void cry(){
    	System.out.println("냐옹 냐옹")
    }
}

class Dog implements Animal{
	public void cry(){
    	System.out.println("멍멍")
    }
}

public class Main{
	public static void main(String[] args){
    	Cat c = new cat();
        Dog d = new Dog();
        
        c.cry();
        d.cry();
    }
}

위 코드 예제를 보면 Animal 인터페이스가 생성 되어 있고
class Cat과 class Dog에서 implements로 Animal을
구현(상속)하고 있다. 하지만 Main 클래스에서는 Animal이
인터페이스 이기 때문에 객체 구현이 불가능 하다.
그래서 Animla 인터페이스를 구현(상속)받은
class Cat/Dog을 사용해 Main클래스에 객체를
생성하고 생성 받은 객체를 출력해 준것이다.

Cat/Dog은 인터페이스를 implements 구현(상속)
했을 뿐 인터페이스가 아니기 때문에 객체 생성이 가능 하다.

인터페이스 메소드 구현 강제

인터페이스는 자식 클래스에서 구현하지 않은
메소드를 재정의(Override)하여 구현 하도록 강제
하고 있다.

무슨 말인지 밑에 예시를 보며 알아보자

public interface Appliance{
	void PowerOn();
    void PowerOff();
}

public class Fridge implements Appliance{

	/*Appliance에 있는 추상 메소드를
    *Fridge 클래스에 구현(상속)을 하고
    *Appliance에 있는 추상 메소드를 
    *Fridge에 Override를 함으로써
    */구현 하도록 강제 하고 있다.
    
	@Override
    public void PowerOn(){
    	System.out.println("냉장고를 켜다.")
    }
    
    @Override
    public void PowerOff(){
    	System.out.println("냉장고를 끄다.")
    }
}

public class Main{
	public static void main(String[] args)
	new Fridge().PowerOn();
    new Fridge().PowerOff();
}

인터페이스 Appliance에 있는 PowerOn()과
PowerOff()를 재정의 해서 사용 할 수 있게 한다.

인터페이스의 주의점

인터페이스는 new로 객체 생성이 불가 하다.
하지만 위 예시에서 말했듯이 인터페이스를 구현(상속)
받은 클래스는 객체 생성이 가능 하여 메인메소드에는
인터페이스를 구현(상속)한 클래스로 객체를 생성한다.

인터페이스 객체 생성 예시

public interface Calculator{
	int multiply(int num1, int num2);
    int divide(int num1, int num2);
}

public class CalculatorImpl implements Calculator{
	@Override
    public int multiply(int num1, int num2){
    	return num1 * num2;
    }
    @Override
    public int divide(int num1, int num2){
    	if(num2 == 0){
        	return -9999999999;
        }else{
        	return num1 / num2;
        }
    }
}

public class Main{
	public static void main(String[] args){
    	Calcilator calc = new CalculatorImpl();
		int num1 = 10;
		int num2 = 0;

		System.out.println(num1 + " * " + num2 + " = " + calc.multiply(num1, num2));
		System.out.println(num1 + " / " + num2 + " = " + calc.divide(num1, num2));
    }
}

위 코드 예제를 보자
원래대로 라면 인터페이스는 객체 생성을 할 수 없다.
하지만 CalculatorImpl은 class타입이기 때문에 객체 생성이 가능하다.
정확히는 Calculator타입으로업캐스팅 하여 객체를 생성하고
CalculatorImpl을 담을 수 있다.
profile
뚱이아빠의 개발자도전기

0개의 댓글