객체 지향 프로그래밍의 추상화 - Java를 사용하여 설명

추상화는 객체 지향 프로그래밍의 4가지 기둥 중 하나입니다. 추상화의 주요 목적은 구현 세부 정보를 숨기고 필요한/필수 정보만 표시하는 것입니다. 간단히 말해서 일반 사용자의 복잡성을 줄여줍니다. 주로 디자인 수준, 주로 개념적 부분에서 문제를 해결하는 데 사용됩니다.

추상화는 추상 클래스 및 인터페이스를 통해 달성할 수 있습니다. 추상 클래스를 통해 자바는 진정한 추상화를 달성할 수 없지만 인터페이스를 사용하면 100% 추상화를 달성할 수 있습니다. 방법을 알아보겠습니다.

이 기사에서는 인터페이스에 대해 설명합니다.

Java에서는 다중 상속이 허용되지 않습니다. 즉, 하나의 클래스가 여러 클래스를 확장할 수 없습니다. 이러한 경우가 발생하면 자식 클래스는 어떤 메서드가 어떤 부모 클래스에서 왔는지 구별할 수 없기 때문입니다. 이러한 시나리오에서 인터페이스를 사용하여 다중 상속의 이점을 누릴 수 있으며 여기에 방법이 있습니다.

인터페이스: 인터페이스는 클래스가 구현해야 하는 사양 집합입니다. 기본적으로 인터페이스는 공개적이고 추상적이므로 명시적으로 정의할 필요가 없습니다. 예를 들어 보겠습니다.

아래 코드에서 Engineer라는 인터페이스가 생성됩니다. 즉, Engineer를 구현하는 모든 클래스는 정의된 메서드를 사용해야 합니다. PracticeEngineering 인터페이스 내부를 보면 인터페이스 내부의 기본 메소드가 공개 및 추상임을 의미하는 정의된 공개도 추상도 아니며 정의해도 아무런 해가 없습니다.

package Interfaces;

public interface Engineer {

void PracticeEngineering();//by default abstract and public

}


Doctor라는 인터페이스가 하나 더 있습니다.

package Interfaces;

public interface Doctor{

void performSurgery();
void beomceDoctor(); //by default abstract and public

}


"Student"라는 개인 클래스가 의사이자 엔지니어가 되기를 원한다고 가정합니다. 이제 엔지니어와 의사 사이에는 계층 구조가 없으며 두 직업은 서로 다릅니다. 즉, 엔지니어는 의사의 하위 클래스가 될 수 없고 의사는 엔지니어의 하위 클래스가 될 수 없습니다. 둘 다 같은 수준입니다. 이러한 경우는 인터페이스를 사용하여 해결되는 다중 상속에 속합니다.

클래스는 두 가지 이점을 모두 얻기 위해 여러 인터페이스를 구현할 수 있습니다.

package Interfaces;
public class Student implements Engineer, Doctor{

  public static void main(String[] args) {
       Person obj = new Person();
       obj.PracticeEngineering();
       obj.performSurgery();
       obj.beomceDoctor();
  }

@Override
public void performSurgery() {
System.out.println("Person is performing surgery");
}

@Override
public void PracticeEngineering() {
System.out.println("Person is pursuing Engineering");
}

@Override
public void beomceDoctor() {
System.out.println("Person is pursuing MBBS");
}

}


NOTE

  1. A child class can extend only one parent class in java ( multiple inheritance is not allowed in java)
  2. One interface can extend multiple interfaces Ex: Interface “VideoEditing” can extends two Interfaces EditVideo and UploadVideo.


interface EditVideo {
   void videoEditor();
}

interface UploadVideo {
   void videoUploader()
}

public interface VideoEditing extends  EditVideo, UploadVideo {
   void StudyConcept();
}


  • 클래스가 인터페이스를 구현할 때 모든 메서드에 대한 구현을 포함해야 합니다.

  • 예: "Blogger"클래스가 VideoEditing 인터페이스를 구현하는 경우 videoEditor() 및 videoUploader() 메서드를 포함해야 합니다.

    public class Blogger implements VideoEditing {
    
      @Override
      void StudyConcept() {
      System.out.println("Blogger is Studing concept");
      }
    
      @Override
      void videoEditor() {
      System.out.println("Blogger is editing video");
      }
    
      @Override
      void videoUploader() {
      System.out.println("Blogger is uploading video");
      }
    }
    
    


    귀중한 시간을 내어 이 기사를 읽어 주셔서 감사합니다. 오늘 뭔가를 배우셨으리라 확신합니다.😄

    좋은 웹페이지 즐겨찾기