ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인터페이스
    언어/자바 2022. 5. 4. 22:51

    인터페이스란?

    인터페이스는 클래스의 청사진으로 볼 수 있는 기능이며 클래스에게 인터페이스 내에 있는 메서드들을 구현하도록 강제합니다.

    언제 인터페이스를 사용해야 할까?

    1. 추상화 사용하려고 할 때 사용됩니다.
    2. 다형성을 위해 사용됩니다.
      public interface Shape {
          String name();
      }
      ​
      public class Circle implements Shape {
      ​
          @Override
          public String name() {
              return "Circle";
          }
      }
      ​
      public class Square implements Shape {
      ​
          @Override
          public String name() {
              return "Square";
          }
      }
      ​
      List<Shape> shapes = new ArrayList<>();
      Shape circleShape = new Circle();
      Shape squareShape = new Square();
      ​
      shapes.add(circleShape);
      shapes.add(squareShape);
      ​
      for (Shape shape : shapes) {
          System.out.println(shape.name());
      }
    3. 참고로 다형성이란, 런타임 중에 객체가 다른 형식을 취할 수 있는 기능입니다. 더 구체적으로 말하면 런타임에 특정 객체 유형과 관련된 override 메서드를 실행하는 것입니다.
    4. Java 에서 Class 는 다중상속을 허용하지 않기 때문에 다중 상속을 하려면 Interface를 사용해야 합니다.
    5. public interface Transform {
         void transform();
      }

      public interface Fly {
         void fly();
      }

      public class Car implements Fly, Transform {

         @Override
         public void fly() {
             System.out.println("I can Fly!!");
        }

         @Override
         public void transform() {
             System.out.println("I can Transform!!");
        }
      }
    6. 느슨한 결합을 위해 사용됩니다.
    7. 구현 클래스들에게 특정 동작기능을 의무적으로 구현하도록 할 때 사용합니다.

    추상 클래스는 non-final 상수가 있을 수 있지만, 인터페이스의 상수는 public static final 입니다.

    ClassInterface

    클래스에서 변수를 인스턴스화하고 개체를 만들 수 있습니다. 인터페이스에선 변수를 인스턴스화 할 수 없고 객체로 만들 수 없습니다.
    Concrete method(메서드에 몸통이 있는) 를 가질 수 있습니다. Concrete method(메서드에 몸통이 있는) 를 가질 수 없습니다.
    모든 접근 제한자를 사용할 수 있습니다. public 접근 제한자만 사용할 수 있습니다.(자바 9 부터는 private 메서드도 사용할 수 있습니다.링크)

    주의점

    • 만약 클래스가 interface를 구현하고 인터페이스에서 지정된 함수중 구현하지 않은 함수가 있다면 해당 클래스는 추상 클래스로 선언되어야 합니다.
    • 참고로, 자바 8 이전에는 인터페이스는 메서드 본문이 있을 수 없었습니다. 메서드 본문이 없는 추상 메서드만 가질 수 있었습니다. 하지만 자바 8이상 부터는 인터페이스 메서드에 default 키워드를 사용하여 메서드를 구현 할 수 있습니다. 이 경우 기존에 해당 인터페이스를 구현한 다른 클래스들에겐 다른 제약사항(해당 메서드를 구현해야하는 등)을 주지 않고 사용할 수 있습니다.
    • 또한 자바 8이상 부터는 인터페이스 안에 static 메서드를 선언할 수 있습니다. 인터페이스 안에 static 메서드는 object(new 키워드를 사용하면 만든 객체) 없이 호출 될 수 있습니다.(단, 이 메서드는 상속되지 않습니다.)인터페이스에서 선언된 상수는 public static final 이며 추상 메서드는 public 입니다.

    요약

    • 클래스는 한개 이상의 인터페이스를 구현할 수 있습니다.
    • 인터페이스는 한개 이상의 인터페이스를 상속 할 수 있습니다.
    • 인터페이스를 상속한 클래스는 인터페이스 안에 정의된 모든 메서드를 구현해야 합니다.
    • 인터페이스는 비어있을 수 있습니다.(즉, 어떤 상수나 메서드들도 없어도 됩니다.)
    • 인터페이스를 선언할 때 final 키워드를 사용하여 선언할 수 없습니다.
    • 인터페이스는 메서드는 protected 거나 final 일 수 없습니다.
    • 특정 선언을 하지 않는 한 모든 메서드는 public , abstract 입니다.
    • 모든 필드는 public, static, final 입니다. 또한 접근제한자를 변경할 수 없습니다.
    • 인터페이스에서 사용할 수 있는 상수 및 메서드는 아래와 같습니다.
      • 상수(public static final)
      • 추상 메서드
      • static 메서드
      • default 메서드
    • 다중 상속을 허용합니다.
    • 느슨한 결합을 만들기 위해 사용됩니다.

    참고

    '언어 > 자바' 카테고리의 다른 글

    Java 의 Final 키워드  (0) 2022.05.10

    댓글