컴퓨터공학 💻 도서관📚

Part2. 3-11 인터페이스(interface) 본문

✅🌲강의 복습 노트/패캠 JavaSpring 강의,코드 복습

Part2. 3-11 인터페이스(interface)

들판속초록풀 2025. 6. 9. 22:32

인터페이스

  • 모든 메서드추상 메서드로 선언된다  (public abstract)
  • 모든 변수상수로 선언된다  (public static final)
public interface 인터페이스 이름{     // interface 라고 쓴다.

    public static final float pi = 3.14F;   // 상수
    public void makeSomething();    // 인터페이스의 모든 메서드는 추상 메서드
}

public class 클래스 이름 implements 인터페이스 이름{   // 위 인터페이스를 구현하는 클래스

}

 

내가 public abstract 키워드를 넣지 않아도 모든 메서드는 public abstract로 컴파일 된다.

 

자바 8 부터는 디폴트 메서드(default method)와 정적 메서드(static method) 기능의 제공으로 일부 구현 코드가 있음
전부 다 추상 메서드는 아니다


상속은 이미 구현된 내용을 상속받는 것이고

인터페이스는 구현 코드가 없기에   (Calculator) 다른 클래스가  (Calc) 인터페이스를 구현한다

 

인터페이스를 클래스들이 구현을 하는데  다 구현을 하면  인스턴스화 될 수 있는 클래스가 되고
만약에 일부만 구현하고 일부는 구현하지 않으면 추상 클래스로 선언해야 한다.

그리고 추상 클래스를 상속받은 클래스가 모두 구현을 하면 그 클래스는 인스턴스화 될 수 있는 클래스가 된다.

 

인터페이스는 상속이 아니다.  구현한다고 말한다.


인터페이스를 구현한 클래스 인터페이스 형으로 선언한 변수 형 변환 할 수 있다

Calc  calc =  new CompleteCalc();

 

CompleteCalc 는  Calc 에서 상속을 받은 건 아니지만 Calc 타입을 구현했다.

이거를 타입 상속을 했다라고 말한다.

구현 코드를 받는 구현 상속과는 다른다.

타입 상속은 이 CompleteCalc 클래스가  Calc 인터페이스 타입이다 라는 뜻이다.

 

그래서 CompleteCalc 인스턴스를 생성할 때    변수 타입을 Calc 라고 선언해도 된다.

CompleteCalc는  Calc인터페이스를 구현한 친구고   Calc 인터페이스 타입이기 때문이다.


CompleteCalc calc = new CompleteCalc();  -->  showInfo() 메서드 사용 가능

 

Calc  calc =  new CompleteCalc();   -->  showInfo() 메서드 사용 불가능
          상속에서의 형 변환과 동일한 의미이다.
          Calc 로 형변환되는 경우 인터페이스에 선언된 메서드만 사용가능하다

 


클래스 상속과 달리 구현 코드가 없으므로 여러 인터페이스를 구현할 수 있다

자바에서는 여러 개의 클래스를 다중 상속할 수 없다.  그 이유는 모호성이 생겨서 그렇다

인터페이스 같은 경우는 구현 코드가 없기 때문에  다중 상속을 해도 모호성이 발생할 일이 없다.

그 이유는 구현 코드가 없기 때문에 뭐가 불려야 될지가 모호하지 않기 때문이다.

 

public interface Calc {     // 인터페이스

	double PI = 3.14;
	int ERROR = -99999999;
	
	int add(int num1, int num2);      // 모든 메서드가 추상 메서드
	int substract(int num1, int num2);
	int times(int num1, int num2);
	int divide(int num1, int num2);
	
}
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 )        // 분모가 0인 경우
			return ERROR;
		else 
			return num1 / num2;
	}
	
	public void showInfo() {
		System.out.println("모두 구현하였습니다.");
	}
}
public class CalculatorTest {

	public static void main(String[] args) {
    
		Calc calc = new CompleteCalc();   // 변수 타입을 Calc 라고 선언해도 된다.
		int num1 = 10;
		int num2 = 2;
		
		System.out.println(num1 + "+" + num2 + "=" + calc.add(num1, num2));
		System.out.println(num1 + "-" + num2 + "=" +calc.substract(num1, num2));
		System.out.println(num1 + "*" + num2 + "=" +calc.times(num1, num2));
		System.out.println(num1 + "/" + num2 + "=" +calc.divide(num1, num2));
	}
}

점선의 뜻은 구현한다 라는 뜻

implement :  구현하다

 

 

 

 

Comments