☕Java: 다형성과 추상화

yoondgu·2022년 3월 27일
0

Java 

목록 보기
6/18

강의 수강 중 작성한 노트에서 내용을 발췌, 이응수 강사님 강의 의 노트와 이미지를 참조하고 있습니다.
스스로 이해를 위해 직접 쓴 문장들의 경우 정확성이 떨어질 수 있다는 점 참고 부탁드립니다

📌 다형성과 추상화

  • 메소드를 가진 클래스가 데이터베이스와 상호작용할 때를 보면,
    다음 예시과 같은 과정으로 다형성이 획득된다.
    1. MemberRepository(메소드들이 구현되어 있는 클래스)가 여러 종류의 데이터베이스와 상호작용할 때마다 메소드 하나 하나 새로 재정의할 필요가 없게끔, 각 데이터베이스에 맞는 자식객체들을 만든다.
    MemberRepositoryDBMS , MemberRepositoryNoSQL, MemberRepositoryCloud
    2. 자식 객체들은 부모객체를 상속하는 동시에 특정 공통된 메소드들을 각각 내부적으로 재정의하고 있다.
    3. 자식 객체를 클래스 형변환을 이용해 부모 객체 타입의 변수에 담는다.
    - 효과 : 다형성의 획득
    - 서로 다른 재정의 메소드를 가진 자식 객체들의 데이터타입을 통일
    - 같은 사용법에서 다른 결과가 나온다. (어떤 자식객체를 사용하느냐에 따라 구현내용이 다르다.)

⇒ 이 두 가지 ( 데이터타입이 같음 , 사용법이 같음 ) 조건을 충족시키기 위한 과정을 추상화라고 한다.

💡 WebApplicationMemberRepoistory 객체를 전달받는 클래스일 때
WebApplication의 매개변수 repo 에 MeberRepository을 상속받은 MemberRepositoryDBMS 를 대입해도 재정의된 메소드를 실행하는 데 아무 문제가 없다. (클래스 형변환 실행됨)
공통된 기능이 saveUser() 라고 할 때 saveUser()의 구현내용은 자식객체 별로 다르다.
이 때 어느 유형의 데이터베이스이든 사용법이 같다. 하지만 구현 내용은 다르다.


📌 추상화

  • 객체에서 공통된 속성과 기능을 추출하는 것, 자바에서는 공통된 기능만 추출하는 것을 의미한다.
  • 구현 내용은 다르지만 공통된 기능을 추출한다. 이를 위해 추상클래스나 인터페이스를 정의한다.
  • 메소드 재정의 관계에 있어야만 공통된 기능, 동일한 사용법을 가진다.
    따라서 추상화는 상속 관계 간에 메소드재정의를 강제시킨다.
    • 재정의를 강제하기 위해서는 추상 클래스를 사용한다.
    • 추상클래스를 상속받은 구현클래스를 정의한다.
    • 이 때 추상클래스를 상속받은 구현클래스는 추상메소드를 보유할 수 없으므로(컴파일이 되지 않음), 부모객체로부터 상속받은 추상메소드를 반드시 재정의해서 구현메소드로 바꾸어줘야지만 사용할 수 있다.
    • 구현클래스가 반드시 구현할 기능을 부모 클래스에서 추상메소드를 이용해 추상화시키고, 구현클래스에서 상속받은 추상메소드를 재정의하도록 강제한다.
    • 결과
      • 자식클래스에서는 무조건 부모클래스의 추상메소드를 재정의해야 한다.
      • 모든 자식클래스들이 해당 기능을 구현한다.
      • 모든 자식클래스들에서 해당기능은 동일한 사용법을 가진다. 용법이 동일하다는 것은 교체하기 쉽다는 뜻이다.
  • 추상화의 목적
    • 자식 클래스(구현 클래스)에게 메소드 재정의 강제
    • 자식 클래스(구현 클래스)가 반드시 구현할 기능을 정의
    • 모든 자식 클래스 (구현클래스)가 추상화된 기능을 구현하도록 강제
  • 추상화의 효과
    • 모든 자식 클래스(구현 클래스)는 같은 부모타입의 참조변수로 클래스형변환 할 수 있다. (상속)
    • 부모 타입의 참조변수로 모든 자식 객체에 재정의된 메소드를 실행할 수 있다. (메소드 재정의)
  • 추상화의 방법 (추상화를 구현하는 자식 객체의 생성)
    • 추상클래스 : 추상클래스를 상속해서 자식클래스 만들기
    • 인터페이스 : 인터페이스를 구현해서 자식클래스 만들기

0개의 댓글