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 키워드를 사용하여 구현
- 한 클래스가 여러 인터페이스를 구현하는 다중 구현이 가능함
인터페이스의 목적
- 계약 제공 - 구현 클래스에 특정 메서드 구현을 강제함
- 다형성 활용 - 인터페이스 타입으로 여러 구현체를 다룰 수 있음
- 결합도 감소 - 인터페이스를 통한 상호 작용으로 유연한 코드 구조 설계 가능
인터페이스의 특성
- 상속과 구현 동시에 가능
- 인터페이스는 클래스 상속과 동시에 구현 가능
- 부모 클래스에서 필요한 메서드를 상속 받고, 인터페이스에서 정의된 메서드를 구현
- 다중 구현
- 인터페이스는 클래스와 달리 다중 구현이 가능함
- 인터페이스 상속
- 인터페이스는 다른 인터페이스를 상속
- 클래스와 동일하게 extends 키워드 사용
인터페이스 vs 추상 클래스
- 추상 클래스 / 메서드와 인터페이스는 메서드 시그니처만을 선언하고, 이를 클래스에서 강제로 구현한다는 점에서 유사함
- 추상 클래스는 일반 멤버 변수 선언이 가능하다.
- 추상 클래스는 구현이 포함된 일반 메서드도 작성 가능
- 인터페이스는 public static final 제어자를 가진 상수만 선언 가능
- 인터페이스는 메서드의 구현을 작성할 수 없다.
⇒ 결론적으로, 인터페이스는 멤버 변수 선언과 메서드 구현을 제한하면서, 메서드 구현 강제에 더욱 집중함 또한, 추상 클래스와 달리 다중 구현이 가능하다는 이점이 있음