추상(Abstract),인터페이스(Interface)

김덕근·2022년 12월 26일
0

concept

목록 보기
13/21

Abstract
Interface

안정성
확장가능성

추상화 : 공통점을 추출하고 불필요한 부분 제거

추상 클래스(abstract class)

몸체 없는 메소드를 포함한 클래스 (미완성 설계도)

추상 메소드(abstract method)

몸체 없는 메소드


추상 클래스

특징
1. 미완성 클래스(abstract 키워드 사용)
자체적으로 객체 생성 불가 → 반드시 상속하여 객체 생성
2. abstract 메소드가 포함된 클래스는 반드시 abstract 클래스
abstract 메소드가 없어도 abstract 클래스 선언 가능
3. 클래스 내에 일반 변수, 메소드 포함 가능
4. 객체 생성은 안되지만 참조형 변수 타입으로는 사용 가능

장점
상속 받은 자식에게 공통된 멤버 제공.
일부 기능의 구현을 강제화(공통적이나 자식 클래스에 따라 재정의 되어야 하는 기능).


인터페이스(Interface)

상수형 필드와 추상 메소드만을 작성할 수 있는 추상 클래스의 변형체
메소드의 통일성을 부여하기 위해 추상 메소드만 따로 모아놓은 것으로
상속 시 인터페이스 내에 정의된 모든 추상메소드 구현해야 함

반드시 사전에 정의된 추상메서드와 상수만 가질 수 있다!

특징
1. 모든 인터페이스의 메소드는 묵시적으로 public abstract
2. 변수는 묵시적으로 public static final
3. 객체 생성은 안되나 참조형 변수로는 가능(다형성)

장점
상속 받은 자식에게 공통된 멤버 제공.
일부 기능의 구현을 강제화(공통적이나 자식 클래스에 따라 재정의 되어야 하는 기능).


<정리>

  • 상속
    (자식클래스) 공통된 부분을 추출하여 부모클래스를 만드는 것
    -> 공통된 필드, 메서드를 가진 클래스를 만들고, 작성된 코드를 자식들이 물려받아 사용.
    -> 코드길이 감소, 코드 중복 제거, 재사용성 증가, 자식에 대한 일관된 규칙 제공

  • [일반 클래스] 상속
    부모클래스도 객체로 만들수 있어야 하는 경우

  • [추상 클래스] 상속
    연관된 클래스의 공통점을 묶되, 부모클래스는 객체로 만들 수 없는 경우
    일부 미완성 클래스(abstract 메서드 0개 이상 포함)
    EX) Animal 클래스 -> 동물 객체는 어떤 동물인가? eat(), breat() 는 어떻게 수행되는가? -> 알수 없음
    하지만, 동물의 공통된 기능명은 알고 있음.

  • [인터페이스] 상속 : 접점
    연관성이 낮거나 없는 클래스에게 공통된 기능을 제공할 때 사용.
    EX) 키보드, 마우스, 스캐너, 카메라, 기울기 센서(공통점 : 입력장치)
    우연히도 입력이라는 기능을 가지고 있음! -> 각각의 용도는 다르지만 입력이라는 공통된 기능명이 있음. 입력이라는 접점!

  • 모든 필드가 묵시적(암묵적) public static final ->
    ex) public static final double PI = 3.141592;
    (public static final) double PI = 3.141592;
  • 모든 메서드가 묵시적으로 public abstract(추상메서드) => 같은 이름을 제공할 뿐이지, 상세한 기능지공은 하지 않는다.
    ex) (public abstract) void input() // input이라는 이름을 자식에게 제공할 뿐, 상세한 기능은 자식이 알아서 오버라이딩 해라! 그런데 추상메서드니까 오버라이딩 강제화

(참고) 인터페이스 활용 용도

  • default메서드 : 상속받은 클래스에 공통 기능 제공
    -> 자바의 함수 지향언어 사용을 위한 메서드로 사용
  • 람다, 스트림에 사용
profile
안녕하세요!

0개의 댓글