28강. 인터페이스 선언과 구현하기(1)

철새·2022년 3월 4일
0
  • Do it! 자바 프로그래밍 입문 온라인 강의를 수강하며 작성하였습니다.
  • Section 1. 자바의 핵심 - 객체지향 프로그래밍
  • 28강 "인터페이스 선언과 구현하기(1)"
  • 인터페이스(interface) > 클래스에서 인터페이스 구현하기 > 인터페이스 구현과 형변환

인터페이스(interface)

  • 모든 메서드가 추상 메서드(abstract method)로 이루어진 클래스
  • 형식적인 선언만 있고 구현은 없음
  • 인터페이스에 선언된 모든 메서드는 public abstract로 추상 메서드임
  • 인터페이스에 선언된 모든 변수는 public static final로 상수임
  • 인터페이스를 상속받는 클래스는 implements 키워드를 사용함
    (추상 클래스를 상속받는 클래스는 extends 키워드 사용)
  • 인터페이스는 추상 클래스와 다르게 여러 클래스를 상속받을 수 있다.
    (선언만 있고 구현은 없기 때문)
public interface Calc {
	
	double PI = 3.14;
	int ERROR = -999999999;
	
	int add(int num1, int num2);
	int substract(int num1, int num2);
	int times(int num1, int num2);
	int divide(int num1, int num2);
}

interface 클래스는 컴파일 과정에서 변수는 상수(public static final)로, 메서드는 추상 메서드(public abstract)로 자동으로 변환된다.

클래스에서 인터페이스 구현하기

  • Calc 인터페이스를 Calculator 클래스에서 구현
    (Calc의 모든 추상 메서드를 구현하지 않으면 Calculator는 추상 클래스가 됨)
  • CompleteCalc 클래스가 Calculator 클래스를 상속받은 후 모든 메서드를 구현
    (CompleteCalc는 생성 가능한 클래스)

public abstract class Calculator implements Calc{
	@Override
	public int add(int num1, int num2) {
		return num1 + num2;
	}
	@Override
	public int substract(int num1, int num2) {
		return num1 - num2;
	}
}
public class CompleteCalc extends Calculator{
	@Override
	public int times(int num1, int num2) {
		return num1 * num2;
	}
	@Override
	public int divide(int num1, int num2) {
		if(num2 != 0) {
			return num1 / num2;
		}
		return ERROR;
	}
	public void showInfo() {
		System.out.println("Calc 인터페이스를 구현하였습니다.");
	}
}

interface implements 는 type 상속, class extends 는 구현 상속이라고 한다.
implements도 상속이기 때문에 아래와 같은 코드가 가능하다.

Calc calc = new CompleteCalc();

가장 하위 클래스인 CompleteCalc의 인스턴스를 생성해서 가장 상위 클래스인 인터페이스 타입으로 선언할 수 있다.
Calc 타입이기 때문에 CompleteCalc 클래스에 선언한 showInfo() 메서드는 사용할 수 없다.
(사용하기 위해서는 다운캐스팅 해야함)

interface와 abstract 클래스는 인스턴스를 생성할 수 없다.

Calc calc1 = new Calc();	//불가
Calc calc2 = new Calculator();	//불가

인터페이스 구현과 형변환

  • 인터페이스를 구현한 클래스는 인터페이스 형으로 선언한 변수로 형변환 할 수 있음
  • 상속에서의 형변환과 동일한 의미
  • 단, 클래스 상속과 달리 구현코드가 없기 때문에 여러 인터페이스를 구현할 수 있음
  • 형변환 시 사용할 수 있는 메서드는 인터페이스에 선언된 메서드만 사용할 수 있음

profile
효율성을 추구하며 세상을 떠도는 철새입니다.

0개의 댓글

관련 채용 정보