인터페이스 (Interface)
- 구현된 것이 아무 것도 없는, 밑그림만 있는 기본 설계도
- 기능 중심 설계
: 클래스/프로그램이 제공하는 기능을 명시적으로 선언함
- 표준
: 기능을 정의해두면, 어떤 클래스든 가져와서 사용할 수 있음
- 클라이언트 코드와의 약속 (강제성이 있는 약속)
- 클래스/프로그램이 제공하는 명세
- 구현하는 클래스가 어떤 메서드를 반드시 구현해야 하는지를 지시함
→ 모든 클래스는 인터페이스의 모든 메서드를 구현해야 함
- 추상 클래스보다 추상화 정도가 더 높음 → 더 유연하게 코드 설계 가능
# 인터페이스 정의
- 인터페이스는 멤버 변수를 가질 수 없고, 상수만을 가질 수 있음
- 인터페이스는 일반 메서드를 가질 수 없고, 추상 메서드만을 가질 수 있음
→ 'abstract' 키워드를 생략해도 컴파일러가 추상 메서드라고 인지함
# 인터페이스 장점
1) 다형성
: 하나의 객체를 그 객체의 클래스 타입으로 볼 수도 있고, 구현된 인터페이스 타입으로 볼 수도 있음
- 다른 클래스들과의 결합도를 낮추고, 유연성을 높일 수 있음
2) 다중 상속
: 기본적으로 Java는 클래스의 다중 상속을 지원하지 않으나, 인터페이스는 여러 개 구현할 수 있음
→ 다중 상속과 유사한 효과를 얻음
3) 추상화
: 인터페이스는 구현과는 독립적인 동작 명세를 제공함
→ 시스템의 특정 부분을 구현 세부사항으로부터 분리함
높은 수준에서 시스템을 이해하고 설계할 수 있음
// 인터페이스의 정의
public interface 인터페이스명 {
public static final 자료형 상수명 = 값;
public abstract void 메서드명();
// == public void 메서드명();
}
---------------------------------------------------
// 인터페이스의 구현
public class 클래스명 [extends 부모클래스] implements 인터페이스명1, ... {
// 인터페이스의 추상 메서드 오버라이드
@Override
public void 메서드명(){
...
}
}
# 인터페이스 구현
- 인터페이스를 구현한 클래스는 업 캐스팅과 다운 캐스팅이 가능함
· 업 캐스팅 : 인터페이스명 참조변수 = new 클래스명();
· 다운 캐스팅 : (클래스명) 참조변수
- 하나의 클래스에 여러 인터페이스를 구현할 수 있음 (콤마로 연결)
# 단일 책임의 원칙
- 하나의 클래스는 하나의 목적을 위해 설계됨
- 하나의 인터페이스는 하나의 목적을 위해 설계됨
⇒ 내부의 메서드 수가 적을수록 좋음
default 메서드
- 기존에는 인터페이스에 추상 메서드만 정의할 수 있었음
→ 사용하지 않을 메서드도 재정의해야만 함
→ default 키워드를 추가해서 정의한 메서드는 필요할 때만 가져와서 재정의해도 됨 (구버전에는 X)
- 후크 메서드와 유사함
: 구현부는 있지만, 그 안에 실행 코드가 없는 메서드
public interface 인터페이스명 {
// default 메서드
default public void down() {};
}
기타 메모
- DAO (Data Access Object, 데이터 접근 객체)
- DTO (Data Transfer Object, 데이터 전송 객체)
'Java > Base' 카테고리의 다른 글
[Java] Object 클래스 (0) | 2023.02.14 |
---|---|
[Java] 인터페이스 - DAO 구현 (0) | 2023.02.13 |
[Java] String 클래스의 메서드 (0) | 2023.02.13 |
[Java] 배열 - 오름차순 정렬 (0) | 2023.02.11 |
[Java] 추상 클래스 (0) | 2023.02.11 |