2025-08-26 추상클래스, 인터페이스

Ckd gus·2026년 2월 2일

추상 클래스와 인터페이스 정리

오늘은 추상 클래스(Abstract Class)와 인터페이스(Interface)를 중심으로 객체지향 개념을 정리했다.
개념 위주의 수업이었지만, 나중에 정말 많이 쓰일 것 같은 내용들이라 중요하다고 느꼈다.


추상 클래스(Abstract Class)

추상 클래스란 인스턴스를 생성할 수 없는 클래스이다.
추상 클래스를 상속받은 자식 클래스가 인스턴스가 된다.

  • abstract 키워드를 사용
  • 흔히 미완성된 설계도라고 비유
  • 자식 클래스에게 구현의 강제성을 부여할 수 있음
  • 추상 메서드를 하나 이상 가지는 경우가 일반적
  • 추상 메서드가 없어도 오류는 발생하지 않음
public abstract class 클래스명 {
}

추상 메서드

부모 클래스에서 일반 메서드로 구현해두면
자식 클래스에서 사용하지 않는 경우가 발생할 수 있다.

→ 이를 방지하기 위해 추상 메서드를 사용한다.

  • 구현부 {} 가 없음
  • 자식 클래스는 반드시 오버라이딩해야 함
public abstract class Shape {
    protected String color;

    public Shape(String color) {
        this.color = color;
    }

    // 추상 메서드
    public abstract double getArea();
    public abstract double getPerimeter();

    // 일반 메서드
    public void displayColor() {
        System.out.println("색상: " + color);
    }
}

추상 클래스 사용 예제

public class ShapeExam {
    public static void main(String[] args) {
        Shape shape = new Circle("red", 5.21);

        System.out.println(shape.getArea());
        System.out.println(shape.getPerimeter());
    }
}

추상 클래스의 장점

  • 누락된 메서드를 줄일 수 있음
  • 여러 자식 클래스에서 공통 관리 가능 → 유지보수 용이
  • 필드와 일반 메서드 사용 가능
  • 단, 인스턴스 생성은 불가능

인터페이스(Interface)

인터페이스는 상속 관계는 아니지만 기능을 통일화하기 위한 개념이다.

예를 들어:

  • 나비, 비행기, 새 → 모두 “난다”
  • 하지만 상속 관계로 묶기는 애매함

→ 이럴 때 fly 인터페이스로 기능을 통일할 수 있다.


인터페이스 특징

  • 인터페이스 이름은 파스칼 표기법
  • 파일 확장자: .java
  • 모든 필드: public static final
  • 모든 메서드: public abstract
  • abstract, final 키워드는 생략 가능

JDK 8 이후 추가 기능

  • default 메서드
  • static 메서드

default / static 메서드

default

  • 자식 클래스에서 선택적으로 오버라이딩
  • 강제성 ❌

static

  • 인스턴스 없이 사용 가능
  • 독립적인 기능 제공

인터페이스 선언 문법

public interface 인터페이스명 {
}

인터페이스 예제

public interface Smartphone {

    void turnOn();
    void turnOff();

    default void reset() {
        System.out.println("기본설정으로 초기화");
        turnOff();
        turnOn();
    }

    static void showInfo() {
        System.out.println("스마트 기기 인터페이스");
    }
}

인터페이스 구현 클래스

public class SmartPhoneExam implements Smartphone {

    @Override
    public void turnOn() {
        System.out.println("스마트폰 전원 ON");
    }

    @Override
    public void turnOff() {
        System.out.println("스마트폰 전원 OFF");
    }

    @Override
    public void reset() {
        System.out.println("스마트폰 공장 초기화 진행...");
        turnOff();
        turnOn();
    }
}
  • 인터페이스의 추상 메서드는 무조건 구현
  • 구현하지 않으면 컴파일 에러 발생

인터페이스 사용 예제

public class UseSmartPhone {
    public static void main(String[] args) {

        SmartPhoneExam smart = new SmartPhoneExam();

        Smartphone.showInfo();
        smart.turnOn();
        smart.reset();
    }
}

인터페이스 특징 추가 정리

  • 인터페이스는 여러 개 구현 가능
public class MyClass implements A, B {
}
  • 인터페이스끼리도 상속 가능
public interface Advanced extends Drawable, Resizable {
}

기타 개념 정리 (가볍게)

  • 클래스 로더
    → new 없이도 클래스를 로딩

  • @Deprecated
    → 사용 비권장, 향후 제거 예정

  • 람다 인터페이스
    → 메서드 하나만 가진 인터페이스
    → JDK 8 추가, 컴파일 시 객체로 감싸짐

  • Object 클래스
    → 모든 클래스의 최상위 부모

  • 익명 클래스
    → 이름 없는 클래스, 일회용 객체
    → UI 이벤트, 스레드 등 단발성 처리에 사용
    → 오버라이딩한 메서드만 사용 가능

  • 캡슐화
    → 내부 데이터를 숨기고 보호
    → private + getter/setter 사용

  • 템플릿 메서드 패턴
    → 부모 클래스에서 흐름 정의
    → 자식에서 구현
    → final 메서드는 오버라이딩 불가


느낀 점

오늘도 개념 위주의 수업이었는데
추상 클래스와 인터페이스는 나중에 정말 중요해질 개념이라는 생각이 들었다.

이론만으로는 부족할 것 같고,
앞으로 예제 코드와 실습을 통해 여러 번 사용해보면서 익숙해져야겠다.

profile
백엔드 공부중입니다.

0개의 댓글