CodeGym/Java Blog/무작위의/Java 추상 메서드 및 클래스
John Squirrels
레벨 41
San Francisco

Java 추상 메서드 및 클래스

무작위의 그룹에 게시되었습니다
회원
추상 메서드는 Java의 강력한 도구이며 이 객체 지향 언어에 다형성과 관련하여 훨씬 더 많은 기능을 제공합니다. Java 추상 메서드를 사용하여 전체 프로그램에 대한 기본 프레임워크를 만들고 필요에 따라 조정할 수 있습니다.자바 추상 ​​메소드와 당신 - 1

추상 메서드란 무엇입니까?

추상 메서드는 구현이 없는 메서드입니다. 즉, 선언만 있으므로 이름, 반환 유형 및 수락할 변수를 알 수 있습니다. 다음은 기본 추상 메서드의 예입니다.
public abstract int example(int a1, int a2);
이 메서드를 보면 정수를 반환하고 두 개의 정수를 인수로 받아들인다는 것을 알 수 있습니다. 말할 수 없는 것은 이 방법이 어떻게 구현되는지입니다. 구현하려면 재정의해야 하기 때문입니다. Java에서 추상 메서드를 만들 때 몇 가지 지침을 준수해야 합니다. 그렇지 않으면 프로그램이 올바르게 컴파일되지 않습니다. 기억하다:
  • Java 추상 메소드에는 구현이 없습니다. 즉, 메서드 사용 방법을 알려주는 본문과 중괄호가 뒤에 오면 안 됩니다. 그냥 세미콜론으로 끝납니다.

  • 추상 메서드를 만들면 추상 클래스에만 넣을 수 있습니다. 즉, 내부에 추상 메서드가 있는 구체적인 클래스를 가질 수 없습니다.
    나. 참고로 추상 클래스가 있는 경우 생성자를 포함할 수 있습니다. 그러나 추상 메서드를 가질 필요는 없습니다.

  • 구상 클래스가 추상 클래스를 확장하는 경우 부모 클래스의 모든 추상 메서드도 구현해야 합니다. 그렇지 않으면 구상 클래스가 될 수 없으며 추상으로 선언해야 합니다.

마지막 두 개는 약간 혼란스러울 수 있으므로 바로 해결하겠습니다.

추상 Java 클래스 확장

둘레와 면적을 반환하는 기본 도형에 대한 프로그램을 작성하고 싶다고 가정해 보겠습니다. 그래서 부모 추상 클래스를 만듭니다. 그러나 모든 도형에는 고유한 규칙이 있으므로 각 도형을 다르게 계산해야 하므로 추상 Shape 클래스를 다음과 같이 작성합니다.
abstract class Shape {
  		String shapeName = " ";
  		Shape(String name) {
    			this.shapeName = name;
  		}

abstract double area();
  		abstract double perimeter();
}
이제 이러한 추상 메서드를 실제로 사용하려면 추상 Java 상위 클래스인 Shape를 확장 한 다음 메서드를 인스턴스화해야 합니다. 따라서 각 구체적인 클래스는 영역 및 주변 추상 메서드를 구현해야 합니다.
class Quadrilateral extends Shape
{
    double length, width;

    Quadrilateral(double l, double w, String name)
    {
        super(name);
        this.length = l;
        this.width = w;
    }

    @Override
    public double perimeter()
    {
        return ((2*length)+(2*width));
    }

    @Override
    public double area()
    {
        return (length*width);
    }
}

Implementing the Quadrilateral class would then look like this
class Main
{
    public static void main (String[] args)
    {

        // creating a Quadrilateral object using Shape as reference
        Shape rectangle = new Quadrilateral(3,4, "Rectangle");
        System.out.println("Area of rectangle is " + rectangle.area());
        System.out.println("Perimeter of rectangle is " + rectangle.perimeter());

    }
}
콘솔의 출력은 다음과 같습니다.
Area of rectangle is 12.0
Perimeter of rectangle is 14.0
Quadrilateral 클래스는 부모 클래스 Shape 에서 Shape(String name) 생성자를 인스턴스화할 필요가 없습니다 . 추상 메소드가 아니기 때문입니다. 그러나 클래스에서 영역이나 경계만 구현한 경우 새 클래스는 둘 다 포함하지 않았기 때문에 추상 클래스여야 합니다. 인터페이스에서 추상 메서드를 사용할 수도 있습니다.

인터페이스가 있는 추상 Java 메소드

인터페이스가 무엇이고 추상 클래스와 어떻게 다른지 빠르게 검토해 봅시다. 인터페이스에서 인터페이스에 선언된 모든 변수는 public, static 및 final입니다. 반면에 추상 클래스에는 최종 변수가 아닌 변수만 있습니다. 인터페이스의 모든 항목은 기본적으로 공개됩니다. 추상 클래스는 개인, 보호, 공개 등을 가질 수 있습니다. 마지막으로 클래스는 인터페이스를 확장하지 않고 구현합니다. JDK 8 이전에는 인터페이스에 추상 메서드 외에는 아무 것도 포함할 수 없었습니다. 이제 인터페이스는 기본 및 정적 메서드를 가질 수 있습니다. 이로 인해 모범 사례는 추상 메서드를 확장 가능한 템플릿으로 사용하는 것에서 벗어나 인터페이스 및 구현에 중점을 두었습니다. 따라서 인터페이스로 Shape를 생성한 다음 Quadrilateral 로 구현한다면, 어떻게 생겼을까요? 먼저 Shape(String name) 생성자를 없애야 합니다 . 두 개의 추상 메서드만 있으면 다음과 같습니다.
interface Shape {

  abstract double area();
  abstract double perimeter();
}


So the Quadrilateral class would then look like this:
class Quadrilateral implements Shape {

  double length, width;

    	  Quadrilateral(double l, double w) {

    	    this.length = l;
    	    this.width = w;
    	  }

    	  @Override
    	  public double perimeter() {

    	    return ((2*length)+(2*width));
    	  }

    	  @Override
    	  public double area() {

   	    return (length*width);
    	  }
}
마지막으로, Shape 인터페이스를 구현할 때 새로운 Quadrilateral을 사용하는 것은 거의 동일합니다.
class Main
{
    public static void main (String[] args)
    {

        // creating a Quadrilateral object using Shape as reference
        Shape rectangle = new Quadrilateral(3,4);
        System.out.println("Area of rectangle is " + rectangle.area());
        System.out.println("Perimeter of rectangle is " + rectangle.perimeter());

    }
}
콘솔 출력은 다음과 같습니다.
Area of rectangle is 12.0
Perimeter of rectangle is 14.0
인터페이스와 추상 클래스 간의 차이점에 대해 자세히 알아보려면 여기에서 자세한 정보를 찾을 수 있습니다.

그러나 왜 추상 Java 메소드를 사용합니까?

Java에서 추상 메서드를 사용하는 이유와 사용에 익숙해져야 하는 이유는 많습니다. 적절할 때 사용해야 하는 세 가지 간단한 이유가 있습니다.
  1. 노력의 중복 방지 – 예제 코딩을 다시 살펴보십시오. 귀하와 귀하의 팀이 직사각형 이외의 모양에 대한 클래스를 만들어야 한다고 상상해 보십시오. 해당 클래스를 설계하기 위해 생각해 낼 수 있는 방법은 몇 가지입니까? 십? 열 다섯? 그리고 그것은 간단한 문제입니다. 훨씬 더 복잡한 것을 상상해보십시오. 당신과 당신의 팀은 100가지 방법을 제시할 수 있습니다. 그런 다음 그것들을 일관된 프로그램으로 엮는 벅찬 작업에 직면하게 될 것입니다. 이것은 우리의 다음 요점인 구현 정의로 이어집니다.

  2. Java의 추상 메서드는 사용 및 구현의 정의를 허용합니다. 추상 클래스 또는 인터페이스를 사용하고 설계상 추상 메서드를 사용하면 다른 사람들이 인터페이스와 상호 작용하는 방식을 정의하게 됩니다. 이를 통해 어떤 변수를 사용해야 하는지, 어떤 반환 유형을 예상할 수 있는지 알 수 있습니다.
    그것들을 재정의하고 고유한 방식으로 인터페이스를 구현하는 구체적인 클래스를 만들 수 있지만 여전히 코드의 핵심 사용을 결정합니다. 누군가 Shape를 구현하려면 둘레와 영역을 모두 재정의하거나 구현해야 합니다.

  3. 가독성 및 디버깅 - 추상 메서드를 사용하면 코드의 가독성이 향상됩니다. 인터페이스를 구현하는 클래스를 작성할 때 무엇을 찾아야 하는지 알 수 있습니다. 인터페이스의 모든 추상 메서드가 구현에 있다는 것을 알고 있으므로 버그를 쉽게 읽고 추적할 수 있습니다. 추상 메서드는 Java 및 기타 객체 지향 언어에서 다형성을 올바르게 사용하는 방법을 배우는 시작에 불과합니다. 이를 이해하고 사용하기 시작하면 코딩 여정의 완전히 새로운 장이 시작됩니다.

코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다