>Java >java지도 시간 >추상화: 추상 클래스와 인터페이스

추상화: 추상 클래스와 인터페이스

Patricia Arquette
Patricia Arquette원래의
2024-11-03 16:43:02330검색

Abstraction: Abstract Class vs Interface

Java로 소프트웨어를 설계할 때 추상 클래스인터페이스 중에서 선택하면 유연성, 유지 관리성 및 가독성에 큰 영향을 미칠 수 있습니다. 이 게시물에서는 두 가지의 주요 차이점, 언제 다른 것을 사용해야 하는지 살펴보고 이 개념을 익히는 데 도움이 되는 실제 사례를 살펴볼 것입니다.


추상 클래스와 인터페이스의 주요 차이점

기능 추상 클래스 인터페이스
Feature Abstract Class Interface
Purpose Achieves partial implementation Achieves complete abstraction
Method Implementations Can have both abstract and concrete methods All methods are abstract (except default/static methods in Java 8 )
Multiple Inheritance A class can extend only one abstract class A class can implement multiple interfaces
Fields/Variables Can have instance variables of any type All variables are implicitly public, static, and final
Constructors Can have constructors Cannot have constructors
Inheritance Support Can implement multiple interfaces Cannot extend an abstract class
Use Case Useful for sharing common code and state Useful for defining a contract across unrelated classes
목적 부분 구현 달성 완전한 추상화 달성 메서드 구현 추상적 방법과 구체적인 방법을 모두 가질 수 있습니다. 모든 메소드는 추상입니다(Java 8의 기본/정적 메소드 제외) 다중 상속 클래스는 하나의 추상 클래스만 확장할 수 있습니다. 클래스는 여러 인터페이스를 구현할 수 있습니다. 필드/변수 모든 유형의 인스턴스 변수를 가질 수 있습니다 모든 변수는 암시적으로 공개, 정적, 최종입니다. 생성자 생성자를 가질 수 있습니다. 생성자를 가질 수 없습니다 상속 지원 다중 인터페이스 구현 가능 추상 클래스를 확장할 수 없습니다. 사용 사례 공통 코드 및 상태를 공유하는 데 유용합니다. 관련되지 않은 클래스 전반에 걸쳐 계약을 정의하는 데 유용합니다.

추상 클래스와 인터페이스를 언제 사용해야 합니까?

추상 클래스를 사용하는 경우:

  • 관련 클래스 간에 상태나 동작을 공유해야 합니다.

    : 직원은 하위 클래스인 Manager 및 Lead 간에 공유되는 공통 getDetails() 메소드를 사용하여 이름 및 ID와 같은 필드를 가질 수 있습니다.

    abstract class Employee {
        String name;
        int id;
    
        Employee(String name, int id) {
            this.name = name;
            this.id = id;
        }
    
        // Concrete method shared among subclasses
        public void getDetails() {
            System.out.println(name + " (ID: " + id + ")");
        }
    
        // Abstract method to be implemented by subclasses
        abstract double getSalary();
    }
    
    class Manager extends Employee {
        Manager(String name, int id) {
            super(name, id);
        }
    
        @Override
        double getSalary() {
            return 75000;
        }
    }
    
  • 하위 클래스가 사용할 수 있는 필드와 생성자를 정의하려고 합니다.

  • 하위 클래스에 대해 부분 구현 또는 유틸리티 메서드를 제공해야 합니다.

인터페이스를 사용하는 경우:

  • 관련되지 않은 클래스 전체에서 공통 동작을 정의하려고 합니다.

    : Car와 Drone은 둘 다 start() 메소드를 공유하지만 관련이 없는 클래스이므로 Operable 인터페이스를 구현할 수 있습니다.

    interface Operable {
        void start();
        void stop();
    }
    
    class Car implements Operable {
        @Override
        public void start() {
            System.out.println("Car started.");
        }
    
        @Override
        public void stop() {
            System.out.println("Car stopped.");
        }
    }
    
    class Drone implements Operable {
        @Override
        public void start() {
            System.out.println("Drone started.");
        }
    
        @Override
        public void stop() {
            System.out.println("Drone stopped.");
        }
    }
    
  • 다양한 동작을 결합하려면 다중 상속이 필요합니다. 예를 들어 클래스는 Runnable과 Serialized를 모두 구현할 수 있습니다.

  • 기본 메소드를 정의하여 이전 버전과의 호환성을 유지하면서 새로운 기능을 추가하고 싶습니다.


인터뷰 인사이트

일반적인 인터뷰 질문:

  1. 인터페이스에 생성자를 가질 수 없는 이유는 무엇입니까?

    인터페이스는 순수한 추상화를 정의하므로 생성자가 필요하지 않습니다. 일부 구현이 포함된 추상 클래스만 상태를 초기화하기 위해 생성자가 필요합니다.

  2. 인터페이스 대신 추상 클래스를 사용하는 이유는 무엇입니까?

    다음과 같은 경우 추상 클래스를 사용하세요.

    • 관련 수업간 코드 공유가 필요합니다.
    • 상태(필드)와 생성자를 정의하려고 합니다.
  3. 추상 클래스로 인터페이스를 구현할 수 있나요?

    예! 추상 클래스는 하나 이상의 인터페이스를 구현할 수 있습니다. 인터페이스 메소드에 대한 기본 구현을 제공할 수도 있습니다.

  4. 동일 클래스에서 추상 클래스와 인터페이스를 모두 사용할 수 있나요?

    예, 클래스는 추상 클래스를 확장하고 여러 인터페이스를 구현할 수 있습니다. 이를 통해 유연한 디자인 패턴과 다중 상속이 가능합니다.


요약

  • 추상 클래스부분 구현과 관련 클래스 간의 공유 상태가 필요한 경우에 이상적입니다. 공통 필드, 생성자 및 유틸리티 메서드를 허용합니다.
  • 인터페이스완전한 추상화, 다중 상속 및 관련 없는 클래스에 대한 공통 동작 정의에 가장 적합합니다. 이전 버전과의 호환성을 유지하면서 기본 메서드로 코드베이스를 발전시킬 수 있습니다.

차이점을 숙지하고 각각의 사용 시기를 알면 확장 가능하고 유지 관리가 가능한 소프트웨어 시스템을 설계하는 데 더 나은 준비를 갖추게 될 것입니다.


관련 게시물

  • Java 기초

  • 어레이 인터뷰 필수

  • Java 메모리 필수

  • Java 키워드 필수

  • 컬렉션 프레임워크 필수

즐거운 코딩하세요!

위 내용은 추상화: 추상 클래스와 인터페이스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.