인터페이스

2021. 12. 8. 20:11·자바/기본적인 개념

1. 인터페이스란?

- 추상 클래스처럼 추상 메서드를 갖지만, 추상 클래스보다 추상화 정도가 높아서

추상 클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.

 

- 오직 추상 메서드와 상수만을 맴버로 가지고, 어떤 다른 요소도 가지지 않는다.

 

- 추상 클래스를 부분적으로만 완성된 '미완성 설계도' 라고 한다면, 인터페이스는 구현된 것은

아무것도 없고 밑 그림만 그려져 있는 '기본 설계도'라 할 수 있다.

 

- 인터페이스는 인터페이스로부터만 상속 받으며, 하나의 클래스가 다중 인터페이스로부터 상속

받는 것이 가능하다.

 

- 인터페이스 또한 추상 클래스처럼 인스턴스를 생성할 수 없다.

 

 

- 문법

interface 인터페이스이름{

                 public static final 상수이름 = 값;

                 public abstract 메서드이름 (매개변수목록);

                 static int 상수이름 = 값;     //== public static final 상수이름 = 값;

}

 

( 모든 멤버 변수는 public static final 이어야 하며, 생략 가능하다. )

( 모든 메서드는 public abstract 이어야 하며, 생략 가능하다. )

--> 단, static 메서드와 default 메서드는 예외 ( JDK 1.8 이상 )

 

( 인터페이스에 public과 default를 사용할 수 있다. )

 

 

 

2. 인터페이스의 장점

(1) 개발 시간을 단축시킨다.

( 인터페이스가 작성이 되고 인터페이스를 구현해야 하는 클래스가 2개 이상이라면, 기다리지 않고

동시에 개발할 수 있기 때문이다. )

 

(2) 표준화가 가능하다.

 

(3) 서로 관계 없는 클래스들에게 관계를 맺어줄 수 있다.

 

(4) 독립적인 프로그래밍이 가능하다.

( 클래스와 클래스 간의 직접적인 관계를 인터페이스를 이용해서 간접적인 관계로 변경하면, 한 클래스의

변경이 관련된 다른 클래스에 영향을 미치지 않기 때문이다. )

 

 

 

3. 이해를 돕기 위한 예제(1)

( 인터페이스는 "기본 설계도" 이므로 다른 클래스에게 데이터 형식과 같은 것을 제공해야 한다. )

( 하지만 private를 멤버 변수 앞에 붙인다면, 인터페이스의 컨셉에 어긋나기 때문에 오류가 발생하게 된다. )

 

 

 

3. 이해를 돕기 위한 예제(2)

 

 

 

3. 이해를 돕기 위한 예제(3)

 

( 12번째 줄에 오류가 발생하는 이유는 Marine 클래스에 Repairable를 구현하지 않았기 때문이다. )

( 당연히 마린은 인간이기 때문에.. )

 

 

 

4. 이해를 돕기 위한 예제(4)

: Academy, Bunker, Barrack, Factory들은 공통적으로 건물이지만, Barrack과 Factory는 

움직일 수 있는 건물이다. 그래서 공통적으로 클래스를 상속 받은 후, Barrack과 Factory는

따로 인터페이스를 구현해준다.

 

( LiftableIMPl 클래스를 통해 Liftable 인터페이스를 구현한다. )

 

 

 

5. 인터페이스를 사용하는 이유

( 위 예제는 A와 B 클래스의 직접 관계를 보여주고 있다. )

( 이렇게 하면 A 클래스의 인스턴스를 직접 불러서 함수를 호출할 수 있지만, A클래스의 함수가 바뀐다면

B 클래스의 함수 부분에서도 변경이 직접적으로 받을 것이다.  )

( 예를 들어, 매개변수가 필요하게 되어 methodA()에 만들게 되면 영향을 직접적으로 받을 것이다. )

 

( 이때, 필요한 것이 인터페이스다. )

( 아래의 예제를 통해 직접관계를 간접적으로 바꿀 수 있다. )

( 이렇게 되면 c -> b의 관계가 c -> i -> b의 관계로 바뀐다. )

( 이렇게 함으로써 효과로는 c는 i만 보면서 변경하고 b를 신경쓰지 않아도 된다는 점이다. )

( 즉, 인터페이스 i에게만 영향을 받는다. )

 

 

( 또한 아래의 예제처럼 제 3의 클래스로 관계를 만들 수 있다. )

( 이렇게 되면 우리는 인스턴스를 직접 생성하지 않아도 된다. )

( 또한 다른 인스턴스로 변경되더라도 클래스 d가 변경 없이 c 클래스의 getInstance()만

변경해주면 된다. )

'자바 > 기본적인 개념' 카테고리의 다른 글

인터페이스의 default & static 메서드  (0) 2021.12.09
인터페이스 다형성  (0) 2021.12.08
추상 클래스(abstract class)  (0) 2021.12.07
다형성(3)  (0) 2021.03.29
다형성(2)  (0) 2021.03.29
'자바/기본적인 개념' 카테고리의 다른 글
  • 인터페이스의 default & static 메서드
  • 인터페이스 다형성
  • 추상 클래스(abstract class)
  • 다형성(3)
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      자바 개념
      outputstream
      안드로이드 스튜디오
      안정 정렬
      Arrays
      map()
      코드트리
      java.lang패키지
      file
      역직렬화
      유용한 클래스
      serializable
      소켓 프로그래밍
      코딩트리조별과제
      Collections Framework
      다형성
      InputStream
      TCP 소켓 프로그래밍
      알고스팟
      snail
      문자 기반 스트림
      중간연산
      스트림
      제자리 정렬
      ServerSocket
      java.time 패키지
      람다식
      선택 정렬
      코딩테스트
      불안정 정렬
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    인터페이스
    상단으로

    티스토리툴바