Language/Java

'Do it 자바프로그래밍 입문' 10장 정리

ABCD 2022. 9. 23.

인터페이스

 

  • 클래스 or 프로그램이 제공하는 기능을 명시적으로 선언하는 역할
  • 추상 메서드와 상수로만 이루어져 있다.
  • 인스턴스를 생성할 수 없다.
  • Class 대신 inferance 사용
  • 인터페이스에서 선언하는 변수는 상수로 변환됨 ( public static final 사용하지 않아도 됨. )
  • 인터페이스에서 선언하는 메서드는 추상메서드로 변환됨 ( public abstarct 사용하지 않아도 됨. )
  • 선언한 기능을 클래스가 구현한다는 의미로 implements 예약어를 사용
ex) public class Calculator implements Calc {
	}
  • 상속과 마찬가지로 상위 클래스 자료형으로 묵시적 형변환이 가능
  • 형변환시 사용 할 수 있는 메서드는 인터페이스에서 선언한 메서드뿐! ( 상속과 같음 )

 

인터페이스 역할

  • 어떤 메서드를 제공하는지 미리 알려주는 명세 or 약속
  • 인터페이스를 구현한 클래스가 어떤 기능의 메서드를 제공하는지 명시하는 것
  • 클라이언트 프로그램은 인터페이스에서 약속한 명세대로 구현한 클래스를 생성하여 사용

 

서버

  • 기능을 제공하는 쪽

 

클라이언트

  • 기능을 사용하는 쪽

 

인터페이스와 다형성

  • 인터페이스를 사용하면 다형성을 구현하여 확정성 있는 프로그램 제작 가능
  • 클라이언트 프로그램을 많이 수정하지 않고 기능을 추가하거나 다른 기능을 사용 가능

 

디폴트 메서드

  • 인터페이스에서 구현코드까지 작성한 메서드
  • 인터페이스를 구현한 클래스에 기본적으로 제공하는 메서드
  • default 예약어 사용
  • ex)
default void description(){
	System.out.println("정수 계싼기를 구현합니다."
}
  • 하위 클래스에서 디폴트 메서드 재정의가 가능

 

정적 메서드

  • 인스턴스 생성과 상관없이 사용 할 수 있는 메서드
  • 정적 메서드 사용시 인터페이스 이름으로 직접 참조하여 사용( Calc.X( ); )
  • static 예약어 사용
public inferance Calc {

	public static void X(){
		System.out.println("계산을 시작합니다.")
	}
}

 

private 메서드

  • 인터페이스를 구현한 클래스에서 사용하거나 재정의 하지 못함
  • 구현한 클래스에서 공통으로 사용하는 경우 용이
  • 추상메서드에 private 예약어 사용 불가!!
  • 하지만 private에 static 예약어는 가능!!

 

private static 메서드

  • 정적 메서드에서 호출하여 사용

 

디폴트 메서드와 정적 메서드가 정의되어 있어도 인스턴스는 생성 할 수 없다!!!!

 

 

한 클래스가 여러 인터페이스를 구현하는 경우

public class Customer implements Buy, Sell{
	...
}
  • 두 인터페이스에 이름이 같은 메서드가 선언되어도 구현에는 문제가 없다. Why?? 어차피 하위 클래스에서 재정의하기 때문!!

 

두 인터페이스에 디폴트 메서드가 중복되는 경우

public interface Buy{
	default void order(){
	    System.out.println("구매 주문");
    }
}

//order() 오류발생
public interface Sell{
	default void order(){
    	System.out.println("판매 주문");
    }
}

// order() 오류발생

  • 두 메서드가 중복되었으니 재정의 하라는 오류가 발생한다.

 

정적 메서드의 경우 인터페이스 이름으로 특정하여 호출하기 때문에 상관 없다!!!!

 

 

인터페이스 상속하기 ( 형 상속 : type inheritance )

  • 인터페이스 간 상속은 구현 코드를 통해 기능을 상속하는 것이 아님!
  • 인터페이스는 여러개를 동시에 상속 가능

 

인터페이스 구현과 클래스 상속 함께 쓰기

public class A extends B implements C{
	...
}

 

  • 처음 들어간 자료부터 꺼내어 사용 하는 것
  • 꺼내어 사용하면 total 갯수는 소모된다.

 

 

728x90
반응형

댓글

💲 추천 글