public interface ItemTouchHelperExListener {
void onItemMoveCompleted(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder);
}
인터페이스는 자바에서 매우 중요한 개념 중 하나로서,
자바 프로그래밍에서 객체 간의 상호작용을 위한 중요한 수단으로 사용된다.
객체가 어떤 메소드를 가지고 있어야 할 지를 정의 하지만, 이 메소드들이 어떻게 구현되어야 하는 지는 정의하지 않는다.
인터페이스는 오로지 추상 메소드(구현부가 없는 메소드)와 상수만을 멤버로 가질 수 있다.
인터페이스의 주요 특징
1. 추상 메소드
: 인터페이스 내의 모든 메소드는 기본적으로 추상 메소드이다.
즉, 메소드의 선언만 있고 구현부는 없다.
2. 상수만 포함 가능
: 인터페이스에서 "상수만 포함 가능하다"는 말은,
인터페이스 내에서 선언할 수 있는 필드가 오직 public, static, final 특성을 가진 상수만 가능하다는 의미이다.
즉, 인터페이스 내의 모든 필드는 자동으로 public, static, final로 선언되며 이는 변경할 수 없는 상수를 의미한다.
3. 다중 상속 가능
: 하나의 클래스가 여러 인터페이스를 구현 할 수 있다.
이는 자바 클래스가 다중 상속을 지원하지 않기 때문에 인터페이스를 통해 다중 상속과 유사한 효과를 낼 수 있게 한다.
인터페이스의 사용 이유
1. 계약 제공
: 인터페이스는 클래스가 구현해야 하는 메소드의 시그니처를 정의함으로써, 해당 클래스가 어떤 기능을 수행할 것인지에 대한 계약을 제공한다.
이를 통해 개발자는 구현의 세부 사항에 신경 쓰지 않고도 사용할 수 있다.
2. 다형성
: 인터페이스를 통해 다양한 구현을 가진 객체를 동일한 타입으로 처리할 수 있다.
이는 코드의 유연성과 재사용성을 높여준다.
다음은 다형성을 개념을 이해하기 쉽게 구현 한 예시이다.
interface 동작 {
void 실행();
}
class 걷기 implements 동작 {
public void 실행() {
System.out.println("걷고 있습니다.");
}
}
class 달리기 implements 동작 {
public void 실행() {
System.out.println("달리고 있습니다.");
}
}
class 점프하기 implements 동작 {
public void 실행() {
System.out.println("점프하고 있습니다.");
}
}
public class Main {
public static void main(String[] args) {
동작 myAction = new 걷기();
myAction.실행(); // "걷고 있습니다." 출력
myAction = new 달리기();
myAction.실행(); // "달리고 있습니다." 출력
myAction = new 점프하기();
myAction.실행(); // "점프하고 있습니다." 출력
}
}
3. 결합도 감소
: 인터페이스를 사용하면 구현 클래스들과의 결합도를 낮출 수 있다. 이는 시스템의 유지보수성과 확장성을 향상시킨다.
인터페이스 구현 예시
1. 인터페이스 선언
먼저, ItemTouchHelperExListener라는 이름의 인터페이스를 선언한다.
이 인터페이스는 아이템 이동이 완료 되었을 때 호출될 메소드 onItemMoveCompleted를 포함한다.
public interface ItemTouchHelperExListener {
void onItemMoveCompleted(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder);
}
2. 인터페이스 참조 변수 선언
ItemTouchHelperExListener 타입의 참조 변수 completionListener를 선언한다.
이 변수는 나중에 구현 객체를 담는 데 사용 된다.
private ItemTouchHelperExListener completionListener;
3. 메소드에서 인터페이스 호출
clearView 메소드 내에서 completionListener가 null이 아니라면,
즉, 어떤 구현 객체가 할당되었다면 그 객체의 onItemMoveCompleted 메소드를 호출한다.
@Override
public void clearView(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
recyclerView.getAdapter().notifyDataSetChanged();
if (this.completionListener != null) {
this.completionListener.onItemMoveCompleted(recyclerView, viewHolder);
}
}
4. 인터페이스 구현
ItemTouchHelperCallback 클래스의 인스턴스를 생성할 때,
ItemTouchHelperExListener 인터페이스를 익명 클래스로 구현하여 전달한다.
이 구현에서는 onItemMoveCompleted 메소드를 오버라이드하여 필요한 로직을 수행한다.
touchHelper = new ItemTouchHelper(new ItemTouchHelperCallback(addedAdapter, new ItemTouchHelperCallback.ItemTouchHelperExListener() {
@Override
public void onItemMoveCompleted(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
saveButtonCheck(true);
}
}));
'Android > Java' 카테고리의 다른 글
[Java] 자바 빌더 패턴: 복잡한 객체 생성의 단순화와 한계점 탐구 (0) | 2024.04.09 |
---|---|
[Java] 오버로딩과 오버라이딩: 객체 지향 프로그래밍에서의 메소드 다형성 이해하기 (0) | 2024.04.02 |
[ Java ] Java에서 문자열 처리의 효율성을 높이는 방법: StringBuilder 활용하기 (0) | 2024.03.22 |
[ Java ] Integer.parseInt(String s, int radix)를 활용한 자바에서의 진법 변환 기술 (0) | 2024.03.20 |
[ Java ] 자바에서 "1"과 '1'의 차이점: 문자열과 문자 할당 이해하기 (0) | 2024.03.19 |