강의 수강 중 작성한 노트에서 내용을 발췌, 이응수 강사님 강의 의 노트와 이미지를 참조하고 있습니다.
스스로 이해를 위해 직접 쓴 문장들의 경우 정확성이 떨어질 수 있다는 점 참고 부탁드립니다
MemberRepository
(메소드들이 구현되어 있는 클래스)가 여러 종류의 데이터베이스와 상호작용할 때마다 메소드 하나 하나 새로 재정의할 필요가 없게끔, 각 데이터베이스에 맞는 자식객체들을 만든다.MemberRepositoryDBMS
, MemberRepositoryNoSQL
, MemberRepositoryCloud
⇒ 이 두 가지 ( 데이터타입이 같음
, 사용법이 같음
) 조건을 충족시키기 위한 과정을 추상화라고 한다.
💡
WebApplication
이MemberRepoistory 객체
를 전달받는 클래스일 때
WebApplication의 매개변수
repo 에 MeberRepository을 상속받은MemberRepositoryDBMS
를 대입해도 재정의된 메소드를 실행하는 데 아무 문제가 없다. (클래스 형변환 실행됨)
공통된 기능이saveUser()
라고 할 때saveUser()
의 구현내용은 자식객체 별로 다르다.
이 때 어느 유형의 데이터베이스이든 사용법이 같다. 하지만 구현 내용은 다르다.
구현 내용은 다르지만 공통된 기능
을 추출한다. 이를 위해 추상클래스나 인터페이스를 정의한다.
- 재정의를 강제하기 위해서는 추상 클래스를 사용한다.
- 추상클래스를 상속받은 구현클래스를 정의한다.
- 이 때 추상클래스를 상속받은 구현클래스는 추상메소드를 보유할 수 없으므로(컴파일이 되지 않음), 부모객체로부터 상속받은 추상메소드를 반드시 재정의해서 구현메소드로 바꾸어줘야지만 사용할 수 있다.
- 구현클래스가 반드시 구현할 기능을 부모 클래스에서 추상메소드를 이용해 추상화시키고, 구현클래스에서 상속받은 추상메소드를 재정의하도록 강제한다.
- 결과
- 자식클래스에서는 무조건 부모클래스의 추상메소드를 재정의해야 한다.
- 모든 자식클래스들이 해당 기능을 구현한다.
- 모든 자식클래스들에서 해당기능은 동일한 사용법을 가진다. 용법이 동일하다는 것은 교체하기 쉽다는 뜻이다.
모든
자식 클래스(구현 클래스)는 같은 부모타입의 참조변수로 클래스형변환 할 수 있다. (상속)모든
자식 객체에 재정의된 메소드를 실행할 수 있다. (메소드 재정의)