컴퓨터공학 💻 도서관📚
Part2. 3-11 인터페이스(interface) 본문
인터페이스
- 모든 메서드가 추상 메서드로 선언된다 (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 : 구현하다
'✅🌲강의 복습 노트 > 패캠 JavaSpring 강의,코드 복습' 카테고리의 다른 글
Part2. 3-13 인터페이스를 활용한 다형성 구현 (dao 구현하기) (0) | 2025.06.12 |
---|---|
Part2. 3-12 인터페이스는 왜 쓰는가? (2) | 2025.06.10 |
Part2. 3-10 추상 클래스의 응용 -- 템플릿 메서드 패턴 (3) | 2025.06.06 |
Part2. 3-9 추상 클래스(abstract class) 구현하기 (1) | 2025.06.06 |
Part2. 3-8 다운 캐스팅과 instanceof (0) | 2025.06.05 |