추상 클래스, 인터페이스

김태희·2020년 12월 1일
0

추상 클래스


추상 : 공통되는 특성들을 추출해 낸 것.

추상 클래스 : 클래스들의 공통적인 특성들을 추출해서 선언한 클래스.

자식 클래스들의 공통되는 필드와 메소드들을 추출해서 만들었기 때문에 객체를 생성해서 사용할 수 없다.

추상 메소드가 없어도 abstract 키워드로 클래스를 생성하면 추상 메소드가 된다.


추상 클래스의 용도


  1. 자식 클래스들의 공통된 필드와 메소드들의 이름을 통일(규격)할 목적.

  2. 자식 클래스 작성 시간 절약.

  3. 규격에 맞는 상속을 통한 확장.


추상 클래스 선언


public abstract class 클래스이름 {
    // 필드
    // 생성자 : 자식 클래스의 객체가 생성될 때 부모 클래스의 생성자를 호출하므로 반드시 있어야 한다.
    // 메소드
}

추상 메소드


메소드의 선언부만 있고 실행 내용인 중괄호({})가 없는 메소드.

자식 클래스가 반드시 실행 내용을 채우도록 강제.

자식 클래스는 반드시 추상 메소드를 오버라이딩해서 실행 내용을 작성해야 한다.

(public || protected) abstract 리턴타입 메소드이름(매개변수들);


인터페이스


객체의 역할(규약, 명세)을 정의하는 것.

구현체의 교체를 자유롭게 한다.

public interface 인터페이스이름 {
    // 상수 O
    // public static final 생략해도 컴파일 과정에서 자동으로 붙음.
    (public static final) 타입 상수명 = 초기값;
    
    // 필드 X
    // 생성자 X
    
    // 메소드 O (추상 메소드, 디폴트 메소드, 정적 메소드)
    
    // 추상 메소드
    // public abstract 생략해도 컴파일 과정에서 자동으로 붙음.
    (public abstract) 타입 메소드이름(매개변수들);
    
    // 디폴트 메소드
    // public 생략해도 컴파일 과정에서 자동으로 붙음.
    // 인스턴스 메소드이기 때문에 구현 객체에서 사용할 수 있다.
    (public) default 타입 메소드이름(매개변수들) {...};
    
    // 정적 메소드
    // public 생략해도 컴파일 과정에서 자동으로 붙음.
    (public) static 타입 메소드이름(매개변수들) {...};
}

실행에 대한 규약. 실행에 집중한다.

생성자를 가질 수 없으므로 객체화가 불가능하다.

다중상속을 지원한다.

default 메소드

인터페이스 구현체들이 공통적으로 가질 메소드.

나중에 default 메소드에 수정이 있을 경우, 인터페이스의 default 메소드만 수정하면 되고, 구현체들의 코드를 수정하지 않아도 된다.


상속 vs 인터페이스


상속 : 같은 종류의 하위 클래스들을 만드는 것.
인터페이스 : 같은 사용방법의 클래스들을 만드는 것.



참조 : 책 '이것이 자바다'

profile
Web Back-End (Spring, JPA, AWS)

0개의 댓글