새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.
추상화 클래스와 인터페이스 차이점 알기
오늘은 추상화 클래스와 인터페이스 차이를 알아봤습니다.
학습목차
- 추상 클래스란
- 인터페이스란
- 추상 클래스와 인터페이스 장단점
- 추상 클래스를 주의해서 사용해야하는 이유
학습내용
추상클래스란?
- 하나 이상의 프로퍼티나 함수가 불안전한 클래스
- 메소드 시그니처만 작성하는 경우
abstract
로 선언 - 직접 인스턴스화가 불가능
- 단일 상속만 가능
인터페이스란?
- 불완전한 함수와 상수 프로퍼티의 집합
- 구현이 있는 메서드를 정의 가능
- 다중 구현이 가능하다.
추상 클래스와 인터페이스
공통점
- 구현이 있는 메서드를 포함할 수 있다.
- 인터페이스 혹은 추상 클래스를 상속받아 구현체를 통해 인스턴스화가 가능하다.
- 상속하거나 구현한 클래스는 추상 멤버를 반드시 구현해야한다.
추상클래스 장점
- 상위 클래스의 멤버 변수나 메서드를 재사용할 수 있다.
- 템플릿 메서드 패턴을 사용하여 하위 클래스는 구조를 변경하지 않고 특정 단계만 재정의하여 사용할 수 있습니다.
- 상위 클래스에서 제공하는 기본 동작을 사용할 수 있습니다.
추상 클래스 단점
- 하위 클래스의 오버라이딩으로 인해 상위 클래스의 캡슐화가 깨질 수 있다.
- 상위 클래스의 추가 메서드로 하위 클래스의 일관성이 깨질 수 있다.
- 상위 클래스가
private
으로 사용중인 멤버변수나 메서드가 있다면 하위 클래스는 오버라이딩을 하기 어렵고 테스트 코드를 작성하기 어렵다. - 초기 상위 클래스의 멤버 변수와 메서드를 상속받기 때문에 결합도가 올라가기 때문에 확장할 때마다 상위 클래스가 추가로 상속되기때문에 확장하기 어렵습니다.
인터페이스 장점
- 인터페이스끼리 다중 상속이 가능하고, 클래스도 다중 구현이 가능하기 때문에 다중 상속과 유사한 효과를 얻을 수 있다.
-
연관이 없는 클래스끼리 인터페이스를 사용하여 다형성으로 사용할 수 있습니다.
- 데코레이터 패턴이나 전략 패턴을 사용하여 확장에 용이하고 유지보수도 쉬워집니다.
추상 클래스를 주의해서 사용해야하는 이유
비즈니스 로직에서 오류를 수정하거나 기능을 확장하는 일이 생깁니다.
메서드를 통해 객체의 상태가 변경이 가능하다면 코드내에 존재하는 메서드를 들어가서 확인해야합니다.
이는 객체의 캡슐화와 정보은닉이 깨지게 되며 객체지향 프로그래밍 방식의 장점을 잃게 됩니다.
그래서 멤버 변수를 final
으로 선언하는 불변 객체를 사용합니다.
하지만 추상 클래스는 멤버 변수를 final
으로 선언해도 하위 클래스는 오버라이딩으로 객체 상태를 변경할 수 있으며
하위 클래스를 불변으로 만들었다고 하더라도 상위 클래스에서 결함이 발생하면 하위 클래스에도 전파가 됩니다.
그러므로 객체지향 프로그래밍에서 상태를 공유한다는 것은 캡슐화와 정보은닉을 깨지게 할 수 있으므로 추상 클래스는 주의해서 사용해야합니다.
상속 대신 구성을 사용하여 해결할 수 있습니다.
내부 필드로 의존하고 생성자를 통해 의존성을 주입받는다면 결합도도 낮아지며 유연성과 확장도 쉽게 가능해집니다.
댓글남기기