1. 인터페이스 (interface)
- 일종의 추상화 클래스
- 추상메서드와 상수만을 멤버로 가질 수 있음
- 추상클래스를 부분적으로 완성된 ‘미완성 설계도’라면 인터페이스는 밑그림만 그려져 있는 ‘기본 설계도’
- 다른 클래스를 작성하는데 도움을 줄 목적으로 작성된다고 생각
<code />
interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수목록);
}
- public static final, public abstarct 만 사용할 수 있으며 생략 가능
2. 인터페이스 상속
- 인터페이스는 인터페이스로부터만 상속받을 수 있음
- 다중 상속이 가능
- 클래스와 달리 Object클래스와 같은 최고 조상이 없음
<code />
interface PostRepository extends JpaRepository<Post, Long>, PostRepositoryQuery
- JpaRepository와 PostRepositoryQuery는 interface
3. 인터페이스 구현체
- 인터페이스를 구현한 클래스는 해당 인터페이스에 정의된 모든 메서드를 반드시 구현해야 함
- 인터페이스의 메서드 중 일부만 구현한 경우 abstract를 붙여 추상클래스로 선언해야함
- 인터페이스를 구현한 클래스는 키워드 implements를 사용
<bash />public class PostServiceImpl implements PostService {}
- 인터페이스를 구현한 클래스에 메서드를 오버라이드할 때 @Override를 붙이자. -> 선택사항이지만 사용하는 것이 더 코드를 안전하고 이해하기 쉽게 만들어줌
- 오타나 메서드 시그니처 오류 방지
- 자바 컴파일러가 해당 메서드가 실제로 상위 클래스나 인터페이스의 메서드를 오버라이드하고 있는지 확인할 수 있음
- 만약 메서드 이름이나 시그니처가 잘못된 경우 컴파일 오류가 발생하여 오류를 빨리 발견할 수 있음
- 코드 가독성 향상
- 상속 구조가 복잡하거나 여러 인터페이스를 구현한 경우 유용함
- 버전 호환성
- 이전 버전과의 호환성 보장
- 새로운 버전에서 추가된 메서드를 오버라이드할 때 이름이나 시그니처가 변경된 경우, 컴파일러가 오류를 감지할 수 있음
- IDE 지원
- IDE(통합 개발 환경)은 **@**Override 어노테이션을 활용하여 개발자가 오버라이드하고자 하는 메서드를 쉽게 찾을 수 있도록 도와줌
- 오타나 메서드 시그니처 오류 방지
4. 인터페이스 구현체 사용이유(인터페이스 사용 목적)
- 같은 특성의 뼈대를 동일하게 유지해서 코드의 일관성을 유지하기 위함
- 만약 car라는 인터페이스에 자동차의 기능인 stop() , go(), openTheDoor(), closeTheDoor() 이 있음 (필수 뼈대를 만들어 놓음)
- class 아반떼 impliments car , class 소나타 impliments car로 구현→ 소스가 car라는 동일한 특성들은 일관성있게 유지하게 됨
- : 기본기능은 오버라이드를 통해서 뼈대를 재구현하고 각 차들의 특별한 기능도 추가로 구현할수 있게 됨
- 느슨한 결합을 만들기 위함
- 구현체와 호출자(사용자)간의 관계가 인터페이스로 추상화되어, 호출자는 인터페이스의 메서드를 호춤함으로써 구현체의 내부 동작 방식에 대해서 알 필요가 없음
- 구현체의 내부가 변경되더라도 호출자는 영향을 받지 않음. 호출자는 인터페이스의 메서드만 신경쓰면 되기 때문에, 새로운 구현체를 손쉽게 교체하거나 추가할 수 있음
5. Spring - Controller 와 Service
<bash />@RestController @RequiredArgsConstructor public class PostController { private final PostService PostService; }
<code />
public class PostServiceImpl implements PostService {}
- Service 인터페이스에 정의된 모든 메서드를 ServiceImpl에서 구현
- → PostController 클래스에서는 Service 인터페이스 타입의 객체를 파라미터로 받음: 자바에서의 다형성의 개념
- → Service의 메서드를 호출할 수 있게 됨
- → ServiceImpl 객체는 Service 인터페이스의 타입을 가지고 있기에 Service 인터페이스에 정의된 메서드들을 사용 가능
반응형
'study > study_Java' 카테고리의 다른 글
TIL - 메모장_입력받은 내용 저장하는 메서드 만들기 (0) | 2023.06.05 |
---|---|
TIL - 개인과제_ 주문 개수 추가 (0) | 2023.06.02 |
TIL - [Iterator]_자바문법2 (0) | 2023.05.23 |
TIL - [래퍼클래스(Wrapper Class)]_자바문법1 (0) | 2023.05.22 |