클래스, 인터페이스, 추상 클래스

parkrootseok·2025년 2월 4일

자바

목록 보기
9/19
post-thumbnail

클래스란?

클래스는 객체를 생성하기 위한 설계도입니다. 이는 속성(필드)과 동작(메서드)를 포함하고 있으며 객체 지향 프로그래밍의 기본 단위입니다. 다음 예시와 같이 사용할 수 있습니다.

abstract class Animal {
    
    String name;

    Animal(String name) {
        this.name = name;
    }
	
    // 공통 기능 제공
    void sleep() {
        System.out.println(name + " is sleeping...");
    }
    
	// 하위 클래스 구현 강제
    abstract void makeSound();
    
}

class Dog extends Animal {

    Dog(String name) {
        super(name);
    }

    @Override
    void makeSound() {
        System.out.println(name + " says: 멍");
    }
    
}

추상 클래스란?

추상 클래스는 공통 기능을 포함하면서도 일부 메서드를 구현하지 않은 클래스입니다. 직접 인스턴스를 생성할 수 없으며, 하위 클래스에서 구현을 강제할 수 있습니다. 다음 예시와 같이 사용할 수 있습니다.

abstract class Animal {

    String name;
    
    // 추상 메서드
    abstract void makeSound();
    
    // 일반 메서드 (공통 기능 정의)
    void sleep() {
        System.out.println("Zzzzzzz...");
    }
    
}

class Dog extends Animal {
    
    @Override
    void makeSound() {
        System.out.println("멍멍");
    }
    
}

인터페이스란?

인터페이스는 클래스가 구현해야 하는 메서드의 집합을 정의한 것 입니다. 다중 구현이 가능하며, 코드이 결합도를 낮출 수 있습니다. 다음 예시와 같이 사용할 수 있습니다.

interface Flyable {
    void fly();
}

interface Swimable {
    void swim();
}

class Bird implements Flyable {

    @Override
    public void fly() {
        System.out.println("Bird is flying!");
    }
    
}

class Duck implements Flyable, Swimable {

    @Override
    public void fly() {
        System.out.println("Duck is flying!");
    }

    @Override
    public void swim() {
        System.out.println("Duck");
        
}

클래스 vs 추상 클래스 vs 인터페이스

공통점과 차이점

클래스, 추상 클래스, 인터페이스의 공통점과 차이점은 다음과 같습니다.


구분 클래스 추상 클래스 인터페이스
인스턴스 생성 O X X
생성자 포함 O O X
필드 선언 O O X (public static final만 가능)
메서드 구현 O O X (default, static 제외)
다중 상속 X X O

언제, 무엇을 사용할까요?

클래스, 추상 클래스, 인터페이스가 필요한 상황은 다음과 같습니다.

  • 클래스
    • 일반적인 객체를 정의
  • 추상 클래스
    • 공통된 속성과 메서드를 제공하면서 일부 기능만 강제
  • 인터페이스
    • 다중 구현과 특정 기능 강제
    • 다양한 클래스에서 같은 기능을 구현하도록 강제

예상 질문

클래스는 무엇인가요?

클래스는 객체에 대한 필드와 메서드를 정의한 설계도로, 객체지향 프로그래밍의 기본 단위입니다.

추상 클래스는 무엇인가요?

추상 클래스는 abstract키워드를 사용하는 클래스로서 일부 메서드는 구현하고 일부는 추상 메서드로 선언할 수 있는 클래스입니다. 또한, 직접 인스턴스를 생성할 수 없으며 반드시 자식 클래스에 의해 상속받아 사용합니다.

인터페이스는 무엇인가요?

인터페이스는 클래스와 달리 다중 구현이 가능하며, 클래스가 구현해야 하는 메서드의 집합을 정의한 것 입니다.

클래스, 추상 클래스, 인터페이스는 언제 사용하나요?

일반적인 객체를 정의할 땐 클래스, 공통 속성 및 메서드 제공 및 일부 기능만 구현을 강제할 땐 추상 클래스, 다중 구현과 특정 기능에 대한 구현 강제가 필요할 땐 인터페이스를 사용합니다.

추상 클래스와 인터페이스의 차이는?

다중 상속 가능 여부

  • 추상 클래스는 다중 상속 불가
  • 인터페이스는 다중 상속 가능

상태 유지

  • 추상 클래스는 제한 없이 필드 선언 가능
  • 인터페이스는 상수 필드만 선언 가능

인스턴스화 가능 여부

  • 추상 클래스는 생성자를 통해 인스턴스화 가능
  • 인터페이스는 생성자를 가질 수 없음

사용 목적

  • 추상 클래스는 is-a 관계 정의
  • 인터페이스는 can-do 관계 정의
profile
동료들의 시간과 노력을 더욱 빛내줄 수 있는 개발자가 되고자 노력합니다.

0개의 댓글