본문 바로가기
내가 보는 개발 공부/JAVA

중첩 클래스 및 인터페이스 (안드로이드에서의 활용)

by JeeGAe 2024. 1. 17.

중첩 ?

중첩 크래스와 인터페이스는 클래스 내부에 클래스나 인터페이스가 또 다시 정의되는 형태를 말합니다. 중첩의 방식을 이용하는 이유는 그 중첩의 상위의 클래스와 밀접한 관계가 있다는 의미입니다. 이러한 방식은 안드로이드 개발에 많이 사용된다고 합니다. 

 

안드로이드에서의 중첩 활용

안드로이드에서의 중첩의 활용의 예를 한번 보겠습니다. 하단과 같이 Button이라는 클래스를 생성하였습니다. 이 클래스에는 ClickListener라는 중첩 인터페이스가 있습니다. 그리고 중첩 인터페이스를 타입으로 하는 private 권한 필드를 생성하고 이 필드에 참조를 할 수 있도록 setClickListner 메서드를 선언합니다. 마지막으로 click메서드로 clickListener 필드에 있는 onClick 메서드를 실행하도록 합니다.

public class Button {
	// Button 클래스를 인스턴스화 하지 않아도 사용 할 수 있도록 static으로 합니다. 
	public static interface ClickListener {
    	void onClick();
    }
    
    // 필드 
    private ClickListener clickListener;
    
    public void setClickListener(ClickListener clickListener) {
    	this clickListener = clickListener;
    }
    
    public void click() {
    	this.clickListener.onClick();
    }
}

 

이 Button 클래스를 사용해보도록 하겠습니다. Button 클래스를 btn1으로 인스턴스화 했습니다. 그리고 Button 클래스의 중첩 인터페이스인 ClickListener를 구현하는 클래스를 선언한 후 btn1의 setClickListener 메서드로 멤버 필드에 주입합니다. 그리고 btn1 객체의 click 메서드로 실행합니다. 이러한 방식이 안드로이드에 많이 이용된다고 합니다.

public class app {
	public static void main(String[] arg) {
    	Button btn1 = new Button();
        
        // 클릭 이벤트를 작동하는 구현 클래스입니다.
        // 이와 같이 바로 인터페이스를 구현하는 클래스를 만들 수 있도록 static을 사용했습니다.
        // 이는 이렇게 따로 생성하지 않고 익명 클래스를 이용할 수 있습니다.
        class btn1Handler implements Button.ClickListener {
        	@Override
            Public void onClick() {
            	// 클릭시 작동할 코드
            }
        }
        
        // btn1 객체에 구현 클래스를 주입합니다.
        btn1.setClickListener(new btn1Handler);
        
        // 버튼을 클릭했다고 할 수 있습니다.
        btn1.click();
    }
}

 

ClickListener라는 인터페이스는 Button이 없다면 의미가 없는 인터페이스가 될 것입니다. 굉장히 밀접하게 관련이 있다고 볼 수 있습니다. 그렇기에 이러한 방식을 이용하여 사용할 수 있습니다.

 

 

 


이 글은 개발 공부하면서 작성하고 있는 글입니다. 잘못된 내용이 있을 수 있으니 댓글로 남겨주시면 감사하겠습니다.

'내가 보는 개발 공부 > JAVA' 카테고리의 다른 글

Lombok is 버그  (0) 2025.05.28
다형성  (0) 2024.01.16
싱글톤 패턴  (0) 2024.01.15
JAVA 데이터 타입  (0) 2024.01.08