[Java] Interface

JOY·2023년 3월 27일
0

[Java]

목록 보기
10/15
post-thumbnail

Interface

일종의 규격, 소통을 위해 필요로 하는 것, 사용하는 기능을 통일
다중상속과 같은 효과를 제공하는 interface

  • class와 유사하지만 class가 아니다.(body없음); 👉 상속X, 생성X ex) interface A{ }
  • interface를 구현(implements 키워드 사용)
  • interface 끼리 여러개의 객체를 상속받을 수 있음

  • 모든 변수는 public static final (상수)
  • 모든 method는 public abstract 👉 추상메소드(기능X)
    - 모든 제어자는 생략 가능
  • interface는 생성 할 수 없지만 Type(자료형)으로 사용가능
  • class가 interface를 implements하게 되면 interface에 있는 모든 method 재정의
    해야 한다. 안 하면 abstract class로 선언되어야 한다.

    👉 단점 : 필요하지 않아도 모든 메소드를 오버라이딩 해야하기 때문에 소스가 길어진다
  • 키워드 사용
    클래스 extends 클래스
    인터페이스 extends 인터페이스
    클래스 implements 인터페이스
    인터페이스 extends 클래스 (X)

간단한 코드로 이해하기

public interface A{
	메소드 2(abstract)
}
public interface B extends A{
	메소드 3(abstract)
}
public interface C{
	메소드 1(abstract)
}
public class Parent{
	public void aa(){}
    public void bb(){}
}
public class Test implements A{
	interface A2개 메소드를 재정의 - abstract 버리고 기능 추가
}
public class Test2 extends Parent implements B, C{
	메소드 5(B extends A) + 메소드 1(C) 재정의 해야함
}

public class Main {
	public static void main(String[] args) {
    	A a = new Test();
        
        Parent p = new Test2();
        B b = new Test2();
        A a = new Test2();
        C c = new Test2();
    }
}

📢 3가지 유형의 게시판을 만든다고 가정해보자
1) QA - 기능 : 등록, 수정, 삭제, 검색 - 답변여부
2) Upload - 기능 : 등록, 수정, 삭제, 검색 - 파일첨부
3) Free - 기능 : 등록, 수정, 삭제, 검색

👉 모든 게시판에 중복되는 공통 기능을 분리해서 유연성을 향상 시키자

  • 공통 속성 ( 글번호, 제목, 작성, 내용) - Board

인터페이스 간의 관계

'is a'와 'has a' 관계 존재

  • Java는 단일 상속(is a A)만 가능 하지만 interface 사용시 다중 상속(is A)이 가능
    ❓인터페이스는 메서드 선언이 중복되더라도 구현부(body)가 없기 때문에 복잡도가 낮다.

    is a : 상속(extends), 구현(implements)
    has a : 멤버필드, 지역변수

  • classDiagram
    : 객체가 가지고 있는 속성+생성자+메소드를 표현해주시고
    객체와 객체간의 관계를 나타내는 그림

class A extends B {} : 속이 빈 화살표 실선
class A implements B {} : 속이 빈 화살표 점선
class A{ B b } (멤버필드) : 실선 화살표
class A{ B b } (지역변수) : 점선 화살표

JDK 1.8버전에서 추가된 문법

인터페이스에서 선언되는 모든 메서드는 abstract메서드 이지만
해당 버전에서 default메서드와 static 메서드가 추가 되었다.
❓default 메서드를 사용하면 이미 완전한 메서드 이기 때문에 재정의가 필요 없어진다.
❗이미 구현된 모든 객체들을 해당 기능이 필요하지 않은 클래스에서도
재정의 해야하는 번거로움은 줄일 수 있다.
default or static 메서드는 구현부가 존재하는 메소드


Quiz

Q1. 인터페이스에 대한 설명으로 올바르지 않은 것을 고르시오. (정답 : 4번)

1) 하나의 클래스는 인터페이스를 여러개 상속받아 구현할 수 있다.
2) 인터페이스는 메서드의 접근제한자는 public 으로 선언된다.
3) 인터페이스는 다른 인터페이스를 상속받을 때 extends 를 사용한다.
4) 인터페이스는 default method를 한개만 가질 수 있다.


참고 코드 : Interface

profile
Just Do IT ------- 🏃‍♀️

0개의 댓글