본문 바로가기
JAVA

인터페이스

by 융디's 2024. 4. 25.
728x90
인터페이스

인터페이스

@24.04.09

터페이스

💡
추상된 틀을 만들어 개발에 혼선이 없게끔 도와주는 역할을 하는 객체로, 추상화를 통해
관련 있는 메서드들의 집합
을 말한다.



@기본 구조

접근 제한자 interface 인터페이스명 {
// 추상 메서드
// default 메서드
// 정적 메서드
}
  • implements 키워드 사용
  • 인터페이스 메서드는 기본적으로 public 과 abstract이며, 이는 생략 가능하다
    • 구현하는 클래스 인터페이스에 선언된 모든 메서드를 구현해야 하므로,

      모든 멤버가 외부에서 접근 가능해야 한다.
  • 특징
    • 다중 상속 지원
    • 한 클래스가 여러 개의 인터페이스를 구현 가능
    • JAVA8부터 디폴트 메서드, 정적 메서드 사용 가능
    • 객체화 불가능
  • 추상 클래스 vs 인터페이스
    • 공통된 기능을 추상화하고 공유하기 위해서는 추상 클래스 사용
    • 다양한 타입의 객체를 통일적으로 처리하고자 할 때는 인터페이스 사용
    일반 클래스 추상 클래스 인터페이스

    메서드
    완결한 메서드

    (=구현된 메서드)
    완결 메서드
    추상 메서드
    추상 메서드
    정적 메서드
    default 메서드
    멤버 변수000
    객체화0XX
  • 사용 용도
    • 구현 클래스 간의 공통된 동작을 정의
    • 표준화
      • 표준화된 메서드를 정의하여, 서로 다른 클래스들이 동일한 방식으로 동작강제성
    • 다형성
      • 동일한 인터페이스를 구현한 여러 클래스들을 동일한 방식으로 다룰 수 있다.

        ⇒ 우리가 가전제품을 제품 설명서 없이 잘 사용하는 이유

  • 예시
    • 다양한 도형 클래스의 넓이 구하기
    // Shape 인터페이스
    public interface Shape {
        double getArea(); // 도형의 넓이를 계산하는 메서드
    }
    
    // Circle 클래스 - Shape 인터페이스를 구현
    public class Circle implements Shape {
        private double radius;
    
        public Circle(double radius) {
            this.radius = radius;
        }
    		// 반드시 구현 
        @Override
        public double getArea() {
            return Math.PI * radius * radius;
        }
    }
    
    // Rectangle 클래스 - Shape 인터페이스를 구현
    public class Rectangle implements Shape {
        private double width;
        private double height;
    
        public Rectangle(double width, double height) {
            this.width = width;
            this.height = height;
        }
    
        @Override
        public double getArea() {
            return width * height;
        }
    }

default 메서드

💡
인터페이스가 변경되면, 인터페이스를 구현하는 모든 클래스들이 변경된 메서드를 구현해야 하므로, 이런 문제를 해결하기 위해 인터페이스에 메서드를 구현해 놓을 수 있도록 한다.
  • 인터페이스에 이 기능은 꼭 넣고 싶다! 해서 추상 메서드 추가
    • 이 인터페이스를 구현한 모든 클래스에서 에러가 남
    • 이를 방지하기 위해 default 메서드가 생겨나게 된다.
    • 오버라이드는 가능하나, 강제화 불가능
      public interface Calculator{
      		// 추상메서드
      		public in plus(int i, int j);
      		// default 메서드
      		default int multiple(int i, int j) {
      			return i-j;
      }

static 메서드

💡
인스턴스화되지 않은 인터페이스에 직접 속해 있는 메서드이며, 이런 메서드는 인터페이스의 일부로써 호출될 수 있으며, 인터페이스의 구현 클래스에 상속되지 않는다.
  • 디폴트 메서드와 차이점
    • 정적 메서드는 구현 클래스에 상속되지 않으므로, 더 강력한 유틸리티 함수를 제공한다.
    • 디폴트 메서드는 구현 클래스에서 재정의 되므로, 인터페이스의 기본 동작을 변경하거나 확장하는 데 사용된다.
  • 유의할 점
    • 메서드는 인터페이스 명으로 직접 호출해야 한다.
    • 기본 구현을 제공할 때 유용하며, 이는 인터페이스를 구현하는 클래스에서 오버라이드 할 필요 없이 바로 사용할 수 있다.
    • 상속되지 않는다 ⇒ static 메서드를 오버라이드 할 수 없다.
    interface MyInterface {
        static void staticMethod() {
            System.out.println("나는! 정적 메소드야!");
        }
    }
    
    public class Main implements MyInterface {
        public static void main(String[] args) {
            // static 메소드 직접 호출
            MyInterface.staticMethod();
        }
    }

+

728x90

'JAVA' 카테고리의 다른 글

예외 처리  (1) 2024.04.25
Final  (0) 2024.04.25
추상 클래스  (0) 2024.04.25
불변 클래스  (0) 2024.04.22
메서드 오버라이딩  (0) 2024.03.31