BE/Java

[Java] abstract와 interface

baek-dev 2024. 11. 30. 23:20

`abstract`와 `interface`는 추상화를 구현하는 두가지 주요 도구이다

1. 추상 클래스 (`abstract`)

개념

  • 추상 클래스는 완전히 구현되지 않은 클래스 이다
  • 일부 메서드는 구현을 가지고, 일부는 구현되지 않을 수 있다
  • 직접 객체 생성이 불가능하며 상속받을 하위 클래스가 구현해야 합니다

특징

  • 클래스와 메서드에 `abstract` 키워드 사용
  • 구현된 메서드 포함 가능함 (일반 메서드와 추상 메서드 모두 가질수 있다)
  • 상속을 통한 확장 (다른 클래스가 이를 상속받아야 하며 추상메서드를 반드시 구현해야함)
  • 인스턴스 생성 불가 (직접 객체를 생성할 수 없음)
  • 변수와 메서드의 다양한 유형 허용 (인스턴스 변수, 정적 변수, 정적 메서드 등을 포함할 수 있다)
  • 클래스 내부의 변수나 메서드중에 하나라도 abstract가 붙으면 클래스에 무조건 abstract를 붙여야함
  • 추상 클래스를 상속받아 추상 메서드를 구현할때에는 @Override (오버라이드) 로 표시

2. 인터페이스 (`interface`)

개념

  • 인터페이스는 모든 메서드가 구현되지 않은 틀 이다
  • 클래스가 인터페이스를 구현 해야한다
  • 다중 상속을 지원한다

특정

  • 모든 메서드는 기본적으로 추상적이나 자바8 이후부터 default 메서드와 정적 메서드 추가 가능
  • 여러 인터페이스를 동시에 구현 가능
  • 변수는 상수만 혀용 (`public static final`)
  • 인스턴스 생성 불가
  • 자격증 이라고 비유해서 생각하면 쉬움

defaul메드

interface Animal {
    void makeSound();

    // default 메서드
    default void sleep() {
        System.out.println("This animal is sleeping.");
    }
}

class Dog implements Animal {
    @Override
    public void makeSound() {
        System.out.println("Woof! Woof!");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.makeSound(); // 구현된 메서드 호출
        dog.sleep();     // default 메서드 호출
    }
}

 

정적메서드

interface Animal {
    static void info() {
        System.out.println("Animals are living beings.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal.info(); // 정적 메서드 호출
    }
}

`abstract`와 `interface`의 차이

특징 abstract interface
상속/구현 extends 키워드 사용 (단일 상속만 가능) implements 키워드 사용 (다중 구현 가능)
메서드 일반 메서드 + 추상 메서드 모든 메서드가 기본적으로 추상적
변수 인스턴스 변수와 상수 가능 `public static final` 변수만 허용
다중 상속 불가능 가능
사용 목적 "is-a"관계 (일반적인 클래스 확장) "can-do"관계 (행동을 정의)
객체 생성 불가능 불가능

 

 

 

 

출처 : ChatGPT

'BE > Java' 카테고리의 다른 글

[Java] 생성자와 오버로딩, getter setter  (0) 2024.12.01
[Java] 캐스팅 (형 변환)  (0) 2024.12.01
[Java] 접근 제어자  (0) 2024.11.30
[Java] static  (0) 2024.11.30
[Java] 메모리 계산  (1) 2024.11.30