Post

[Java] 추상클래스 인터페이스 JAVA GUI

📌 들어가며

이번 글에서는 추상 클래스·인터페이스를 다시 정리하고(다중 상속 관점), AWT를 이용한 GUI를 만들며 JavaDoc을 100% 활용하는 법까지 익힌다.

개념핵심
추상 클래스추상 메소드를 포함, 상속 시 구현 강제 (extends)
인터페이스추상 메소드만 있는 순수 틀 (implements, 다중 가능)

1. 추상 클래스 — 강제되는 틀

1
2
3
4
5
6
// 이 클래스는 의도적으로 불완전하게 정의 (추상)
public abstract class MusicPlayer {
    public abstract void supportMp3();   // 바디 없음 → 상속받는 쪽이 구현
    public abstract void volumeUP();
    public abstract void volumeDown();
}

💡 미래에 어떤 기기가 만들어질지 예측할 수 없으므로, 구체 내용은 비워두고 각 기기(자식 클래스)가 알아서 구현하도록 강제한다.


2. 인터페이스 — 다중 상속의 타협점

블루투스 스피커를 만들되, 날기도(Drone) 하고 타기도(Roller) 하는 요상한 물건으로 만들고 싶다. 이때 인터페이스가 필요하다.

1
2
3
4
5
6
public interface Drone {
    public void fly();        // 인터페이스는 abstract 생략 가능
}
public interface Roller {
    public abstract void run();
}
1
2
3
4
5
6
7
8
9
public class BSpeaker extends MusicPlayer implements Roller, Drone {
    //                 └── 상속(1개) ──┘  └── 구현(여러 개) ──┘
    public void connect()     { System.out.println("근거리 블루투스 연결"); }
    public void supportMp3()  { System.out.println("블루투스 MP3 로드"); }
    public void volumeUP()    { System.out.println("볼륨 올리기"); }
    public void volumeDown()  { System.out.println("볼륨 내리기"); }
    public void run()         { System.out.println("달린다."); }
    public void fly()         { System.out.println("난다."); }
}

💡 왜 Drone·Roller를 인터페이스로 만들었나? 자바는 클래스 다중 상속을 금지한다. 하지만 현실을 반영하려면 다중 상속이 필요하다. 그래서 타협으로, 상속은 하나(extends)만 하되 인터페이스는 여러 개(implements) 구현할 수 있게 했다.

업 캐스팅

1
2
3
4
5
6
7
BSpeaker bs = new BSpeaker();
bs.supportMp3(); bs.fly(); bs.run();

Drone d = bs;   // 스피커는 Drone 형이다 (업 캐스팅)
d.fly();
Roller r = bs;  // 스피커는 Roller 형이다
r.run();

Desktop View

BSpeakerMusicPlayer이자 Drone이자 Roller이므로, 세 타입 모두로 업 캐스팅할 수 있다.


3. AWT로 GUI 만들기

자바의 GUI 객체들은 java.awt 패키지에 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.koreait.gui;
import java.awt.*;   // awt 하위 전체 import

class GuiTest1 {
    public static void main(String[] args) {
        Frame frame = new Frame();     // 윈도우 역할
        frame.setVisible(true);        // 기본은 안 보임 → 보이게
        frame.setSize(300, 400);

        FlowLayout flow = new FlowLayout();
        frame.setLayout(flow);         // 내부 배치 방법

        Button bt = new Button("나 버튼");
        TextField t_id = new TextField(20);
        Checkbox ch1 = new Checkbox("딸기", true);
        Choice ch = new Choice();      // select 박스
        TextArea area = new TextArea(7, 20);

        ch.add("이메일 선택"); ch.add("google.com");
        ch.add("naver.com");  ch.add("daum.net");

        frame.add(bt);   frame.add(t_id); frame.add(ch1);
        frame.add(ch);   frame.add(area);
    }
}

주요 컴포넌트를 정리하면 이렇다.

컴포넌트역할
Frame윈도우 창 (기본은 안 보임 → setVisible(true))
Button버튼
TextField한 줄 입력
TextArea여러 줄 입력
Checkbox체크박스
Choice드롭다운(select)

Desktop View


4. JavaDoc 활용법

Frame이 정확히 뭔지 모를 때, JavaDoc을 찾아본다.

Desktop View

JavaDoc에서 확인하는 것내용
상속 계층어떤 부모를 상속받았는지 (최상위는 Object)
Summary생성자·필드·메소드 목록
상속 메소드부모·조부모로부터 물려받은 메소드

Desktop View

💡 setVisible()Frame이 아니라 조상인 Window 클래스에 있다. JavaDoc의 “상속 메소드” 섹션에서 이를 찾아, boolean 매개변수를 true로 주면 창이 보인다는 것을 알 수 있다. Object는 모든 클래스의 최상위 부모로, 마치 헌법 같은 존재다.

Desktop View


📝 정리

1
2
3
4
5
6
추상 클래스·인터페이스·GUI
├─ 추상 클래스  추상 메소드 포함, extends로 상속(1개)
├─ 인터페이스   추상 메소드만, implements로 다중 구현
├─ 다중상속     클래스는 1개 상속 + 인터페이스 여러 개로 타협
├─ AWT GUI      Frame + Button/TextField/Checkbox... + add()
└─ JavaDoc      상속 계층·메소드 조회로 모르는 클래스 활용
개념한 줄 정의
추상 클래스 vs 인터페이스상속(1개) vs 다중 구현
업 캐스팅구현한 인터페이스 타입으로도 담기
AWT자바의 GUI 패키지 (java.awt)
JavaDoc클래스의 API를 조회하는 문서

인터페이스는 자바가 다중 상속을 우회하는 방법이다. 그리고 모르는 클래스를 만나도 JavaDoc으로 상속 계층과 메소드를 조회하면 얼마든지 활용할 수 있다는 점이 이번 실습의 핵심이다.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.