[JAVA] 인터페이스와 추상클래스

신범철·2022년 7월 8일
0

자바

목록 보기
14/17

Interface

인터페이스(Interface)란, 추상 메소드(Abstarct Method), 상수(final)만으로 이루어진 클래스이다. 기본 설계도라고 할 수 있다.

  • 장점
    - 다중 상속이 가능하다.
    - 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화 가능
    • 클래스 작성과 인터페이스 구현을 동시에 하므로 개발시간 단축

++ 자바 8 이후로는 default 메소드static 메소드를 추가 할 수 있게 되었다.
인터페이스 내에서 default키워드로 선언되면 메소드가 구현될 수 있다. 또한 이를 구현하는 클래스는 default메소드를 오버라이딩 할 수 있다.

//default 예제
 public interface Calculator {
        public int plus(int i, int j);
        public int multiple(int i, int j);
        default int exec(int i, int j){      //default로 선언함으로 메소드를 구현할 수 있다.
            return i + j;
        }
    }

    //Calculator인터페이스를 구현한 MyCalculator클래스
    public class MyCalculator implements Calculator {

        @Override
        public int plus(int i, int j) {
            return i + j;
        }

        @Override
        public int multiple(int i, int j) {
            return i * j;
        }
    }

    public class MyCalculatorExam {
        public static void main(String[] args){
            Calculator cal = new MyCalculator();
            int value = cal.exec(5, 10);
            System.out.println(value);
        }
    }
  • 인터페이스가 변경이 되면, 인터페이스를 구현하는 모든 클래스들이 해당 메소드를 구현해야하는 문제가 있다. 이런 문제를 해결하기 위하여 인터페이스에 메소드를 구현해 놓을 수 있도록 하였다.

인터페이스에 Static메소드를 선언함으로써, 인터페이스를 이용하여 간단한 기능을 가지는 유틸리티성 인터페이스를 만들 수 있게 되었다.

	//static 예제
    public interface Calculator {
        public int plus(int i, int j);
        public int multiple(int i, int j);
        default int exec(int i, int j){
            return i + j;
        }
        public static int exec2(int i, int j){   //static 메소드 
            return i * j;
        }
    }
//인터페이스에서 정의한 static메소드는 반드시 인터페이스명.메소드 형식으로 호출해야한다.  

public class MyCalculatorExam {
    public static void main(String[] args){
        Calculator cal = new MyCalculator();
        int value = cal.exec(5, 10);
        System.out.println(value);

        int value2 = Calculator.exec2(5, 10);  //static메소드 호출 
        System.out.println(value2);
    }
}


# Abstract class
추상 클래스는 추상 메소드를 선언하여 **상속을 통하여 자식 클래스에서 완성하도록 유도**하는 클래스이다. 그래서 **미완성 설계도**라도고 한다.
상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없다.


## 인터페이스와 추상클래스의 차이점

### [ 추상클래스 ]
- 추상 메소드가 반드시 한개 이상 존재
- 일반 메소드, 일반 변수, 생성자를 포함할 수 있다.
- 추상 클래스 간 상속 가능
	=> 오버라이딩 하지 않고 그래도 둘 수 있다.
- 인스턴스를 만들 수 없고 상속받은 클래스를 통해 인스턴스화 가능
- 접근지정자는 어떤 것이든 가능
- 클래스이므로 상속시 extends 사용
- 궁극적인 목적은 **상속**을 위함


### [ 인터페이스 ]
- 클래스가 아님
- 메소드에 final을 붙일 수 없고, 변수는 모두 Static이어야한다.
- 일반 변수, 일반 메소드, 생성자 포함x
- 인스턴스를 만들 수 없고 상속받은 클래스를 통해 인스턴스화 가능
- 인스페이스간 상속 가능
	=> extends 사용
- 클래스가 아니므로 상속시 implements를 사용
- 인터페이스는 메소드들의 집합이다.

### 속도
추상 클래스 > 인터페이스


## 참고문헌
[java 8 인터페이스 변화](https://school.programmers.co.kr/learn/courses/5/lessons/241)

[인터페이스 vs 추상클래스](https://jroomstudio.tistory.com/7)

profile
https://github.com/beombu

0개의 댓글