ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 학원 DAY 15. 추상화, 인터페이스, 추상클래스
    기록 2022. 10. 2. 20:50

    << 추상화 (Abstract) >>

    의미 - 구현부가 없는 메소드(추상 메소드)를 정의하는 것. 

    목적 - 하위 클래스(구현 클래스)들이 반드시 구현할 기능을 추상메소드를 사용해서 추상화한다.

    사용법이 동일한 하위 객체를 만들기 위함이다. (메소드 재정의를 강제 시키기 때문)

    (* 구현 클래스란? 구현 메소드로 구성된 클래스. 추상화된 메소드를 보유할 수 없다.)

    추상화는 공통된 속성과 기능을 모아서 추상클래스인터페이스를 정의하는 것이다. 

    공통 속성은 변수나 상수로 표현하고, 기능은 추상메소드로 표현한다.

     

    << 인터페이스(Interface) >>

    - 추상화의 수단이다.

    - 하위 구현클래스에 특정한 메소드가 반드시 존재하도록 강제할 때 사용한다.

    - 모든 하위 구현클래스의 사용법을 통일시키는 표준으로 사용된다.

    - 하위 구현클래스가 구현할 기능의 사양을 정의한다.

    (구현부가 없는 메소드는 반환타입, 메소드명, 매개변수의 종류를 지정한다. <-- 메소드의 사양)

    - 하위구현클래스는 인터페이스에 정의된 추상화된 메소드를 반드시 재정의해야한다. (반대로, 상속에서는 메소드 재정의를 하든지 안하든지 상관할 수 없다.)

    - 하위구현클래스는 동시에 여러개의 인터페이스를 구현할 수 있다.

    - 인터페이스 이름에는 -able이 붙는 경우가 많다.

    - 상수와 구현부가 없는 메소드를 포함할 수 있다.(Java 8부터는 구현부가 있는 디폴트 메소드도 포함할 수 있다.)

    - new연산자를 사용해서 객체 생성할 수 없다. (객체가 만들어지기는 하지만 내가 new로 만들 수 없음)

    - 인터페이스에 정의되는 추상메소드는 접근제한자와 abstract 키워드를 보통 생략한다. (인터페이스에 한해서)

    - 인터페이스 간 상속이 가능한데 상속받은 인터페이스가 추상메서드를 구현하는 것이 아니라, 인터페이스를 구현하는 클래스가 추상메서드를 구현해야 하는 것이다. 

    + 상속의 목적 : 반복코드 제거, 하위클래스의 빠른 개발, 공통속성과 공통기능의 재사용성 증가, 유지보수성 향상

    + 인터페이스 구현 목적 : 사용방법이 동일한 하위 객체를 만들게 하는 것

    => 체지향 개발방법(SOLID) 5대 원칙 중 인터페이스 분리 원칙(ISP)

    클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원리이다.

    불필요한 인터페이스를 구현하지 말고, 하나의 인터페이스 안에 너무 많은 기능을 넣어놓지 말 것. 

    인터페이스를 분리하고 인터페이스 몇 개를 합해서 새로운 인터페이스를 만들 수 있고, 그것을 구현하면 된다.

     

    + 인터페이스는 표준, 사양으로서 메소드 재정의를 강제하는 역할을 하기도 하지만, 클래스가 무엇을 구현할 수 있는지 알려주는 역할을 하기도 한다. 

     

    < 추상클래스 >

    - 구현메소드와 추상메소드를 모두 포함할 수 있는 클래스.

    - 일반 구현클래스의 모든 구성요소(멤버변수, 클래스변수, 생성자, 멤버메소드, 클래스메소드)를 포함할 수 있다. (일반클래스와의 차이점 : 일반클래스 구성요소 + 추상메서드도 포함할 수 있다.)

    - new연산자를 이용해서 객체 생성할 수 없다. (객체가 만들어지기는 하지만 내가 new로 만들 수 없음)

    추상클래스는 추상 메소드가 포함되어 있는 미완성 설계도이기 때문에 객체를 생성할 수 없다.

    - 추상클래스는 상속을 통해 하위클래스에 의해서만 완성될 수 있다.

    - 클래스 선언부에 abstract 키워드를 포함한다.

    - 추상클래스에 정의되는 추상메소드는 반드시 abstract 키워드를 포함해야 한다.

    빨간색 박스 안의 내용이 동일하다. 이를 아래와 같이 추상클래스를 통해 이러한 코드 중복을 해결할 수 있다.

    추상클래스는 인터페이스와 구현 클래스의 중간이다.

    댓글

Designed by Tistory.