인터페이스란? (Interface)

Objective_chicorita·2022년 8월 3일
1

1) 인터페이스의 구성

public interface 인터페이스명 {

  //상수(public static final 필수!!)
  public static final 타입 = 값;

  //추상메서드(public abstract 필수!)
  타입 메서드명(매개변수..);

  //디폴트메서드
  default 타입메서드명(매개변수) {
  	~ 구현부 ~	
  }
  
  //정적메서드
  static 타입 메서드명(매개변수) {
  ~ 구현부 ~
  }

상수 : 인터페이스에서 값을 정해주면 함부로 바꾸지말고 제공해주는 값만 참조(절대적)
추상메서드 : 가이드만 줄테니 추상메서드는 오버라이딩해서 재정의해라.(강제적)
디폴트메서드 : 인터페이스에서 기본적으로 제공해주지만, 맘에 안들면 각자 구현가능 (선택적)
정적메서드 : 인터페이스에서 제공해주는 것으로 무조건 사용(절대적)

2) 인터페이스 상속

public interface ProtocalA {
	public abstract rule1();
} //슈퍼인터페이스

public interface ProtocalB extends ProtocalA {
	public abstract rule2();
} //서브인터페이스

public class Myclass implement ProtocalB{
	rule1();
  rule2();
  m1();
 } // 클래스
Myclass obj = new Myclass();
obj.m1();
obj.rule1();
obj.rule2(); //모두 가능

ProtocalB obj2 = new ProtocalB();
obj2.m1(); //컴파일 오류!
obj2.rule1();
obj2.rule2(); 

ProtocalA obj3 = new ProtocalA();
obj3.m1(); //컴파일 오류!
obj3.rule1();
obj3.rule2(); //컴파일 오류!!

-인터페이스 간에 상속이 가능하다.

2-1) 인터페이스 다중 상속

public interface ProtocalA {
	public abstract rule0();
    public abstract rule1();
}

public interface ProtocalB {
	public abstract rule0();
    public abstract rule2();
} 

public interface ProtocalC extends ProtocalA, ProtocalB{
	public abstract rule3();
}

Class Myclass extends ProtocalC{
	rule3(){ ~ };
}
  • 인터페이스 다중 상속은 중복이 되어도 상관이 없다.
    => 추상메서드이기 때문에! 어떤 인터페이스의 메서드를 상속 받더라도 결과는 같다!

  • 다만 리턴 타입이 다르면 오버로딩 문법에 어긋나서 다중 상속이 불가능
    => 이런 경우 어떤 메서드를 상속 받는냐에 따라 동작이 달라짐.
    => 그래서 다중 상속을 허용하지 않음. 메서드 시그니처가 같아야함.
    * 메서드 시그니처 : 메서드명, 메서드타입, 매개변수

    3) 다중 인터페이스 구현

    public interface ProtocalA {
    	public abstract rule0();
        public abstract rule1();
    }
    
    public interface ProtocalBP
    	public abstract rule0();
        public abstract rule2();
    }
    public class Myclass() implement ProtocalA, ProtocalB {
    	rule0 () { ~ };
      	rule1 () { ~ };
        rule2 () { ~ };
    }
    
  • 메서드 중복이 되더라도 상관이 없다.
    => 단, 두 메서드의 메서드 시그니처가 같아야함.

profile
객체지향 치코리타와 함께하는 dev_travel

0개의 댓글