09_Polmorphism(2)

김정욱·2022년 12월 26일
0

JAVA 복습

목록 보기
10/15
post-thumbnail
post-custom-banner

8) 추상(Abstract)

추상 클래스 : 몸체 없는 메소드를 포함한 클래스(미완성 설계도), 상속 + 다형성
[접근제한자] abstract class 클래스명{ }
추상 메소드 : 몸체 없는 메소드, 상속시 반드시 구현해야 하는, 오버라이딩이 강제화되는 메소드
[접근제한자] abstract 반환형 메소드명(자료형 변수명);
  • 특징
    ① 미완성 클래스(abstact 키워드 사용)
    : 자체적으로 객체 생성 불가 -> 반드시 상속하여 객체 생성
    ② abstract 메소드가 포함된 클래스는 반드시 abstract 클래스
    : abstract 메소드가 없어도 abstract 클래스 선언 가능 (abstract 메소드가 0개 이상)
    ③ 클래스 내에 일반 변수, 메소드 포함 가능
    ④ 객체 생성은 안되지만 참조형 변수 타입으로는 사용 가능

  • 장점
    상속 받은 자식에게 공통된 멤버를 제공하고, 일부 기능의 구현을 강제화 (자식클래스에서 재정의)

9) 인터페이스(Interface)

  • 정의 : 상수형 필드와 추상 메소드만을 작성할 수 있는 추상 클래스의 변형체, 상속 시 인터페이스 내에 정의된 모든 추상메소드를 구현해야 함

    [접근제한자] interface 인터페이스명{
    
    	[public static final] 자료형 변수명 = 초기값; // 변수명은 대문자로..
    
    	[public abstract] 반환자료형 메소드명([자료형 매개변수]);
        // public abstract가 생략 가능하기 때문에 
        // 오버라이딩 시 반드시 public 표기해야 함
  • 사용 : 어떤 객체가 이미 상속을 받고 있는데 다른 타입을 참고해야 할 경우 인터페이스를 사용한다.

    포유류 : 고양이, 개, 고래
    조류 : 닭, 독수리, 펭귄
    어류 : 상어

    고래, 펭귄, 상어 => 물속생활 클래스로 상속 가능??
    => No, 이미 포유류, 조류, 어류의 자손이고, 단일 상속만 가능하기 때문에
    이때 사용하는게 인터페이스

  • 특징
    ① 모든 인터페이스의 메소드는 묵시적으로 public abstract
    ② 변수는 묵시적으로 public static final
    ③ 객체 생성은 안되나 참조형 변수로는 가능 (다형성)
    ④ 다중 상속 가능하기 때문에 여러개의 인터페이스 추가 가능
    ex) public class Whale extends TypeMammalia implements WaterLife, BigAnimal, GoodAnimal{ }

  • 장점
    ① 다형성을 이용하여 상위 타입 역할 (자식 객체 연결)
    ② 인터페이스 구현 객체에 공통된 기능 구현 강제화 (== 구현 객체간의 일관성 제공)
    ③ 공동 작업을 위한 인터페이스 제공

  • 추상 클래스 vs 인터페이스

10) 정리

  • 상속
    -(자식클래스의) 공통된 부분을 추출하여 부모클래스를 만드는 것
    --> 공통된 필드, 메서드를 가진 클래스를 만들고, 작성된 코드를 자식들이 물려받아 사용
    --> 장점 : 코드 길이 감소, 코드 중복 제거, 재사용성 증가, 자식에 대한 일관된 규칙 제공

① [일반클래스] 상속

  • 부모 클래스도 객체로 만들 수 있어야 하는 경우

② [추상클래스] 상속

  • 연관된 클래스의 공통점으로 묶고, 부모 클래스는 객체로 만들 수 없는 경우
  • +일부 미완성 클래스(abstract메소드 0개 이상 포함)
    ex) Animal 클래스 -> 동물 객체는 어떤 동물인가?? eat(), breath()는 어떻게 수행되는가?? -> 알 수 없다. 하지만, 동물의 공통된 기능명은 알고 있음

③ [인터페이스] 상속 : 접점

  • 연관성이 낮거나 없는 클래스에게 공통된 기능을 제공할 때 사용
    ex) 키보드, 마우스, 스캐너, 카메라, 기울기 센서 (공통점 : 입력장치)
    우연히도 입력이라는 기능을 가지고 있음 -> 각각의 용도는 다르지만 입력이라는 공통된 기능명이 있음, 입력이라는 접점

  • +모든 필드가 묵시적(암묵적) public static final

  • ex) public static final double PI = 3.141592; -> duoble PI = 3.141592;

  • +모든 메서드가 묵시적으로 public abstract(추상메서드) => 같은 이름을 제공할뿐이지, 상세한 기능제공은 하지 않는다.
    ex) (public abstract) void input() // input이라는 이름을 자식에게 제공할 뿐, 상세한 기능은 자식이 알아서 오버라이딩 해라. 추상메서드 이니깐 오버라이딩의 강제화

profile
절박한 마음을 갖고 하루를 보내자!!
post-custom-banner

0개의 댓글