본문 바로가기
Java

[자바] 인터페이스 (Interface)

by Sky Titan 2020. 9. 15.
728x90

인터페이스 (Interface)

  • 여러 클래스들을 만들 때, 만들어야 될 필요한 기능들에 대해서 합의해놓은 규약, 또는 가이드라인 (즉 객체의 스펙을 지정해준다)
  • 실제 객체로 사용되진 않고 객체의 타입으로만 사용됨.
  • 프로그램을 설계하고 유연한 프로그램을 만들기 위한 기법
  • '다형성'이라는 객체지향 프로그래밍 특징을 구현한 기법

EX)

특정 클래스를 구현하는데 개발자 혼자 클래스를 다 개발할 때까지 기다리기는 너무 시간이 오래 걸림

  1. 해당 클래스에서 어떤 메소드를 구현할지 기능에 대해서 배포
  2. 배포받은 기능 설명을 보고 구현만 하면됨

문법

1. 인터페이스는 실제 객체 X

  • 추상 메소드, 상수만을 가지고 있음

2. 인터페이스의 상수는 private 불가능

  • 인터페이스는 외부로 공개하기 위해서 만들어지는 것이기 때문에 private 변수는 사용 불가
  • 인터페이스는 특정 기능을 구현하기 위한 '약속' 이기 때문에 함부로 정해진 약속(변수)를 수정해서는 안됨
  • 때문에 무조건 인터페이스의 변수는 public static final (상수)로 정의

3. 인터페이스는 추상 메소드만 가짐

  • 인터페이스는 '기능의 묶음'
  • 상속 : is a relation
  • 인터페이스 : has a relation
  • 인터페이스가 구현되었다는 것은 인터페이스가 가지고 있는 기능들이 모두 구현됐다는 것

인터페이스 문법 구성

  • 인터페이스의 선언
  • 상수 선언부
  • 추상 메소드 선언부

인터페이스 이용 순서

1. 기능을 인터페이스로 정의한다.

EX)

식당에서 손님이 주문을 원함

-> 점원이 손님에게 주문 방식을 말해줌 (쪽지, 미리 예약, 직접 불러서 얘기, 호출 벨로 주문 등등)

-> 손님은 그에 맞게 원하는 음식을 적든, 말하든 주문하면 됨

2. 인터페이스를 구현한 실제 클래스 제작

3.객체가 필요한 곳에서는 인터페이스만 보고 코딩

  • 인터페이스를 사용함으로 인해서 시스템 변경 시 유연하게 적용 가능
  • '느슨한 결합'

 

인터페이스의 사용 케이스

1. 인터페이스를 변수로 선언

  • 상속을 이용하는 것보다 더 간단하게 구현만 하면 되기 때문에 인터페이스를 객체 타입으로 변수 선언 시 new 뒤에 오는 클래스에 제약이 줄어듬

2. 메소드의 파라미터, 리턴 타입으로 사용

3. 배열, 자료구조로 사용

인터페이스 vs 추상 클래스

1. 인터페이스

  • 스펙이나 원하는 기능을 정의하고자 사용
  • 오직 추상 메서드들만 물려줌
  • 객체마다의 내부적 동작은 다 다르게 구현하되 어떤 메서드를 사용한다만 미리 알고 싶을 때

2. 추상 클래스

  • 상속, 약간의 강제성을 목적으로함
  • 추상 메서드뿐만이 아니라 일반 메서드들도 물려줌
  • 대부분의 기능을 물려주되 일부 기능만 다를 때
728x90

'Java' 카테고리의 다른 글

[자바] Collections 자료구조  (0) 2020.09.15
[자바] 자바의 실행구조  (0) 2020.09.15
[자바] JRE, JDK  (0) 2020.09.15
[자바 이슈] Comparator 사용 관련 주의  (0) 2020.09.09
[자바] Arrays.sort() 자바 배열 정렬  (0) 2020.09.09

댓글