Elice

엘리스 10일차 - 추상화와 인터페이스

공부곤 2024. 7. 5. 15:56

추상화와 인터페이스

추상화

  • 사물이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것
  • 설계?, 디자인(컨셉)? ⇒ 모델링
  • 클래스 간 공통적인 속성을 찾아내어 공통의 조상을 만드는 작업

장점

  • 복잡도를 낮춰 이해와 분석에 용이하고, 재사용성과 유지보수성 향상
  • 일관성 있는 개발 작업 및 협업에 유리함

추상 클래스

  • ‘미완성 설계도’
  • 추상 메서드가 하나 이상 포함된 클래스
  • abstract 키워드 사용
  • 인스턴스 생성 불가
  • 상속 필요

추상 메서드

  • 메서드 시그니처만 있고 구현 로직이 없는 메서드
  • 상속받는 자식 클래스의 구현이 필수적
  • 다형성 기반 설계
public abstract class Animal{ //추상 클래스
	public abstract void eat(); //추상 메서드
}

abstract 키워드

  • 추상 클래스와 메서드는 abstract 키워드를 이용해 구현 가능
  • 추상 메서드 abstract 키워드와 함께 구현 부분 없이 선언만 작성
  • 추상 메서드를 포함하는 추상 클래스는 class 앞에 abstract를 작성해야 함

인터페이스(interface)

  • 두 객체(대상) 간 연결과 소통을 돕는 가교
  • 구현해야 하는 동작(메서드)를 작성해 놓고, 구현을 강제하도록 하는 일종의 명세서
  • interface는 주로 여러 클래스에서 공통적으로 행하는 동작을 정의하고 싶을 때 사용
  • interface키워드를 사용하여 선언
    • 클래스와 같이 public, (default) 접근 제어자를 사용 가능
  • 메서드 구현 내용이 작성되지 않은 형태로 선언
    • 인터페이스를 구현하는 클래스는 해당 메서드를 모두 구현해야 함
    • 구현을 강제하는 효과
  • 모든 메서드는 public abstract 제어자로 선언
    • 제어자를 명시하지 않아도, 컴파일 과정에서 자동으로 추가
  • implements 키워드를 사용하여 구현
    • 한 클래스가 여러 인터페이스를 구현하는 다중 구현이 가능함

인터페이스의 목적

  • 계약 제공 - 구현 클래스에 특정 메서드 구현을 강제함
  • 다형성 활용 - 인터페이스 타입으로 여러 구현체를 다룰 수 있음
  • 결합도 감소 - 인터페이스를 통한 상호 작용으로 유연한 코드 구조 설계 가능

인터페이스의 특성

  1. 상속과 구현 동시에 가능
    • 인터페이스는 클래스 상속과 동시에 구현 가능
    • 부모 클래스에서 필요한 메서드를 상속 받고, 인터페이스에서 정의된 메서드를 구현
  2. 다중 구현
    • 인터페이스는 클래스와 달리 다중 구현이 가능함
  3. 인터페이스 상속
    • 인터페이스는 다른 인터페이스를 상속
    • 클래스와 동일하게 extends 키워드 사용

인터페이스 vs 추상 클래스

  • 추상 클래스 / 메서드와 인터페이스는 메서드 시그니처만을 선언하고, 이를 클래스에서 강제로 구현한다는 점에서 유사함
  • 추상 클래스는 일반 멤버 변수 선언이 가능하다.
  • 추상 클래스는 구현이 포함된 일반 메서드도 작성 가능
  • 인터페이스는 public static final 제어자를 가진 상수만 선언 가능
  • 인터페이스는 메서드의 구현을 작성할 수 없다.

⇒ 결론적으로, 인터페이스는 멤버 변수 선언과 메서드 구현을 제한하면서, 메서드 구현 강제에 더욱 집중함 또한, 추상 클래스와 달리 다중 구현이 가능하다는 이점이 있음