>  기사  >  Java  >  추상화: Java에서 추상 클래스 디코딩

추상화: Java에서 추상 클래스 디코딩

Barbara Streisand
Barbara Streisand원래의
2024-10-30 08:09:03920검색

Abstraction: Decoding Abstract Classes in Java

이번 포스팅에서는 Java 추상화의 필수 요소인 추상 클래스에 대해 알아봅니다. 앞서 논의한 개념을 바탕으로 추상화가 복잡한 시스템을 어떻게 단순화하는지 살펴보겠습니다. 추상 클래스는 다른 클래스의 청사진 역할을 하므로 불필요한 복잡성을 숨기고 관련된 세부 사항에만 집중할 수 있습니다.

추상 클래스가 무엇인지, 왜 존재하는지, 어떻게 사용되는지 자세히 알아보세요.


추상 클래스란 무엇입니까?

추상 클래스는 자체적으로 인스턴스화할 수 없는 클래스입니다. 추상 메서드에 대한 구체적인 구현을 제공하는 하위 클래스에 의해 확장되도록 설계되었습니다. 즉, 추상 클래스는 하위 클래스의 기초를 마련하여 코드 재사용을 활성화하고 구조를 적용합니다.

추상 클래스의 주요 특징:

  • 추상 키워드를 사용하여 정의합니다.

  • 하위 클래스에서 구현해야 하는 추상 메서드(본문이 없는 메서드)를 포함할 수 있습니다.

  • 완전히 구현된 구체적인 메소드도 가질 수 있습니다.

  • 생성자, 필드 및 비추상 메서드를 선언할 수 있습니다.

  • 직접 인스턴스화할 수 없습니다.


왜 추상 클래스인가?

추상 클래스를 사용하면 개발자는 모든 하위 클래스에서 특정 메서드가 구현되도록 하면서 사용자에게 불필요한 구현 세부 정보를 숨길 수 있습니다. 반쯤 정의된 템플릿 역할을 하며 기본 클래스에서 공유 기능을 제공하여 코드 재사용을 장려합니다.


예: 직원 및 관리자

추상 클래스의 작동 방식을 보여주기 위해 추상 EmployeeParent 클래스와 해당 ManagerChild 하위 클래스가 포함된 다음 예제를 살펴보겠습니다. 상위 클래스는 공유 기능을 보유하고 하위 클래스는 성능 보너스와 같은 특정 세부사항으로 구현을 완료합니다.

EmployeeParent.java

package oops.abstract_class;

public abstract class EmployeeParent {
    private int id, depId;
    private String name;
    private double basicSal;

    public EmployeeParent(int id, String name, int deptId, double basicSal) {
        this.id = id;
        this.depId = deptId;
        this.name = name;
        this.basicSal = basicSal;
    }

    // Abstract method to be implemented by subclasses.
    protected abstract double computeNetSalary();

    protected double getBasicSal() {
        return basicSal;
    }

    @Override
    public String toString() {
        return "EmployeeParent [id=" + id + ", depId=" + depId +
               ", name=" + name + ", basicSal=" + basicSal + "]";
    }
}

ManagerChild.java

package oops.abstract_class;

public class ManagerChild extends EmployeeParent {
    private double perfBonus;

    public ManagerChild(int id, String name, int deptId, double basicSal, double perfBonus) {
        // Calling the constructor of the abstract class.
        super(id, name, deptId, basicSal);
        this.perfBonus = perfBonus;
    }

    // Implementing the abstract method from EmployeeParent.
    @Override
    public double computeNetSalary() {
        return getBasicSal() + perfBonus;
    }

    @Override
    public String toString() {
        return "ManagerChild [perfBonus=" + perfBonus + "\n" + super.toString() + "]";
    }

    public static void main(String[] args) {
        ManagerChild manager = new ManagerChild(1, "Arshi", 2, 10000, 1890);
        System.out.println(manager);
        System.out.println("Net Salary: " + manager.computeNetSalary());

        // Abstract class cannot be instantiated 
        EmployeeParent employee = new EmployeeParent(); // Compile Error
    }
}

예제 분석

위 코드에서:

  1. EmployeeParent는 하위 클래스의 구조를 정의하는 추상 클래스입니다.

  2. 여기에는 구체적인 메소드(예: toString 및 getBasicSal)와 추상 메소드(computeNetSalary)가 모두 포함되어 있으며 이는 모든 하위 클래스에서 구현되어야 합니다.

  3. ManagerChildEmployeeParent를 확장하고 성과 보너스를 포함한 순 급여를 계산하기 위한 특정 논리를 제공합니다.

  4. 추상 클래스는 직접 인스턴스화할 수 없으므로 하위 클래스 생성자의 super() 호출을 통해 추상 클래스 생성자를 호출합니다.


언제 추상 클래스를 사용해야 합니까?

  • 코드 재사용성: 여러 클래스가 공통 필드와 동작을 공유하는 경우.

  • 구조 적용: 서브클래스에서 특정 메소드의 구현을 의무화하려는 경우.

  • 부분 구현: 클래스 간에 일부 로직을 공유할 수 있지만 특정 로직은 다를 수 있습니다.

  • 사용 사례 예: 공통 속성(예: 색상)과 추상 메소드(예: getArea)가 있는 추상 Shape 클래스를 가질 수 있으며, 다양한 모양(원, 직사각형)은 다르게 구현됩니다.


결론

추상 클래스는 완전 추상화와 구체적인 구현 간의 균형을 제공하여 Java에서 중요한 역할을 합니다. 이를 통해 개발자는 복잡한 세부정보를 사용자에게 숨기면서 필요한 것에 집중할 수 있습니다. 추상 클래스를 이해하고 효과적으로 사용하는 것은 객체 지향 프로그래밍을 익히는 데 중요한 단계입니다.

인터페이스와 추상 클래스와의 차이점을 살펴보는 시리즈의 다음 게시물을 기대해 주세요!


관련 게시물

  • Java 기초

  • 어레이 인터뷰 필수

  • Java 메모리 필수

  • Java 키워드 필수

  • 컬렉션 프레임워크 필수

즐거운 코딩하세요!

위 내용은 추상화: Java에서 추상 클래스 디코딩의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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