Interface와 Abstract 을 비교해 보자.

SINHOLEE·2020년 6월 26일
0

1. interface란 무엇인가? 그리고 왜 사용하는가?

  • 한마디 정리

    • 무엇인가? 어떤 기능을 강제하는 설계도면

    • 왜 사용하는가?

      1) 개발자들에게 구현 가이드라인을 주기 위해

      2) 사용자에게 사용 가이드라인을 주기 위해

      3) 다양한 타입의 기능들을 재사용 하기 위해

  • tv를 볼때 우리는 기계적으로 어떻게 동작하는지 전혀 모르지만, 리모컨이라는 인터페이스를 이용해 tv를 자유자제로 사용할 수 있는것 처럼, 인터페이스는 해당 객체를 추상적인 설계도면을 제시하여 사용자로 하여금 사용할 수 있게 하는 역할을 가지고 있다.

  • 인터페이스의 문법

    • 총 4가지의 필드를 사용하여 인터페이스를 구현할 수 있다.(java 8버전이후부터 디폴트 메서드, 정적 메서드 추가)

      1. 상수 : Type CONSTANT = [vlaue]; ex) String HOMETOWN = "수원";
      2. 추상메소드: 타입 메소드명(매개변수, ... );
      // ex)
      public boolean isExpired();
      1. 디폴트 메소드: default 타입 메소드명(매개변수, ... ){

        //구현부

        }

      // ex) 금융결제원에서 제공하는 디폴트 메서드
      default String findDormancyAccount(String custId){
              System.out.println("**금융개정법안 00이후 고객의 휴면계좌 찾아주기 운동**");
              System.out.println("**금융결제원에서 제공하는 로직**");
              return "00은행 000-000-0000-00";
          }   
      • 설명: 이미 운영되고 있는 시스템에서 추가 요건으로 인해 불가피하게 반영을 해야할 때 디폴트메소드를 쓰면 효과적이란 소리다.
      1. static 타입 메소드 : 타입 메소드 명(매개변수) {

        //구현부

        }

    상수 : 인터페이스에서 값을 정해줄테니 함부로 바꾸지 말고 제공해주는 값만 참조해라 (절대적)

    추상메소드 : 가이드만 줄테니 추상메소드를 오버라이팅해서 재구현해라. (강제적)

    디폴트메소드 : 인터페이스에서 기본적으로 제공해주지만, 맘에 안들면 각자 구현해서 써라. (선택적)

    정적메소드 : 인터페이스에서 제공해주는 것으로 무조건 사용 (절대적)

2. abstract란 무엇인가? 그리고 왜 사용하는가?

  • 한마디 정리

    • 추상이란 무엇인가? : 객체들의 공통점 집합
    • 왜사용하는가? : 상속의 특성을 이용하여, 기능의 확장을 위해(추상클래스)
  • 추상이란 무엇인가? : 추상 클래스와 추상 메서드가 있다.

    1. 추상 메서드: 아직 구현되지 않은 설계도면으로서의 메서드
    2. 추상 클래스: 추상 메서드가 하나라도 속해있는 클래스
  • 추상클래스는 여러 객체들의 공통점을 한데 모아 따로 추출해서, 그 공통점을 하나의 클래스로 선언하고, 다른 객체들에 이 추상클래스를 상속시켜 구현하게 시킨다.

  • 추상클래스를 왜 사용하는가?

    1. 공통된 필드와 메서드를 통일한다 : 즉 유지보수성을 높이기 위해
    2. 실체클래스 구현시 시간절약이 가능: 추상클래스는 구현을 강제하는 추상 메서드 이외에도 상속이 가능한 변수와 일반메서드가 있기에 1번의 이유로 인해 중복을 줄일 수 있다.
    3. 규격에 맞는 실체클래스 구현:인터페이스의 목적과 비슷하다. 개발자에게 가이드라인을 주어 구현에 있어 쌩뚱맞은 결과물이 안나오도록 제한하는 역할을 한다.

3. 둘을 왜 비교하는가?

  • 한마디 정리
    • 하는 일이 비슷하기 때문에
    • 하는일이란? : 상속받는 클래스 혹은 구현하는 인터페이스 안에 추상메소드를 구현하도록 강제 한다.

4. 공통점과 차이점이 무엇인가?

  • 한마디 정리

    • 공통점

      • 추상메소드를 가지고 있다.

      • 상속받는 클래스 혹은 구현하는 인터페이스 안에 추상메소드를 구현하도록 강제 한다.

      • 추상클래스는 추상클래스를 상속받을 수 있고, 인터페이스는 인터페이스를 상속받을 수 있다.

    • 차이점

      • 목적이 다르다-> 인터페이스를 사용하는 이유는 구현한 객체들에 대해서 동일한 동작을 위해 == 재사용을 위해 존재한다. 반면 추상클래스는 기능의 확장(추가 혹은 수정, 변경 등)을 위해 사용한다.

      • 인터페이스의 경우 다중상속이 가능하지만, 추상클래스는 다중상속을 지원하지 않는다(다중상속의 모호성 문제를 피하기 위해)

      • 인터페이스는 추상메소드의 집합으로 이루어져있고, 추상 클래스의 경우 추상메소드가 하나 이상만 존재한다면 그 외의 변수나 일반메서드가 존재하더라도 추상클래스로 역할을 할 수 있다.

출처

profile
엔지니어로 거듭나기

0개의 댓글