728x90
인터페이스 (Interface)
- 여러 클래스들을 만들 때, 만들어야 될 필요한 기능들에 대해서 합의해놓은 규약, 또는 가이드라인 (즉 객체의 스펙을 지정해준다)
- 실제 객체로 사용되진 않고 객체의 타입으로만 사용됨.
- 프로그램을 설계하고 유연한 프로그램을 만들기 위한 기법
- '다형성'이라는 객체지향 프로그래밍 특징을 구현한 기법
EX)
특정 클래스를 구현하는데 개발자 혼자 클래스를 다 개발할 때까지 기다리기는 너무 시간이 오래 걸림
- 해당 클래스에서 어떤 메소드를 구현할지 기능에 대해서 배포
- 배포받은 기능 설명을 보고 구현만 하면됨
문법
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 |
댓글