추상 클래스와 인터페이스

김지윤·2023년 2월 8일
0

자바

목록 보기
3/11

추상 클래스

실체 클래스에서 공통적으로 사용될 필드와 메소드를 '예측'해 추상 클래스를 만든다.
-> 클래스들의 가이드를 만들기 위해 (규격의 역할)

  • 실체 클래스는 추상 클래스를 상속해 사용한다.
  • 내용은 필드와 생성자와 메소드, 추상 메소드이다.
    생성자는 자식을 편하게 하는 역할이다.
  • 직접 객체를 생성 불가하다.
  • class 앞에 abstract를 붙여 만든다.
  • 추상 메소드가 있으면 자식은 무조건 재정의 해야한다.

같이 쓰는 경우 : 인터페이스로만 하면 구현 클래스마다 중복 코드가 발생할 수 있어 추상 클래스를 중간에 만들어주면 코드 중복 제거가 가능하다.


인터페이스

지금까지는 객체에 직접 접근하여 사용하였지만, 지금부터는 인터페이스를 통해서 객체에 접근하도록 할 것이다.

  • 인터페이스를 사용한 구현 클래스가 있고, 구현 클래스를 통해서 개발 코드에서 객체를 사용한다.
  • 인터페이스는 상수와 추상 메소드로 이루어져 있다.
    상수는 대문자이고 여러 단어 연결일 경우 _로 연결해 준다. 초기값을 반드시 준다.
  • 구현 클래스에서는 메소드를 재정의 한다. Implements로 인터페이스를 사용한다.
  • 개발 코드에서 실제로 사용할 때는 “인터페이스 변수 = new 구현클래스 객체();” 로 사용한다.

사용하는 이유 : 객체를 쉽게 바꿔서 사용하려고.
여러 인터페이스를 동시에 가진 객체를 만들 수 있으므로, 말그대로 인터페이스를 통해 자유롭게 객체를 바꿔 쓸 수 있다.

강제 타입 변환(casting)

인터페이스를 이용해 만들어진 객체는 인터페이스에 없는 자신에게만 있는 필드나 메소드는 사용 불가하기 때문에, 자신의 메소드를 사용하기 위해선 자기 타입으로 다시 강제 타입 변환(casting)을 해주어야 한다.
그렇게 되면, 모든 필드와 메소드가 사용 가능하다.

강제 타입 변환할 때, 다른 객체랑 꼬일 수가 있으므로 instanceof로 타입을 확인하고 변환을 진행해 준다.

인터페이스를 정의할 때, 상위 인터페이스를 여러 개 상속받아 정의가 가능하다.

그렇게 하면 객체를 자동 타입 변환할 때, 상위 인터페이스 타입으로도 변환이 가능하다.

profile
꾸준하게 공부하고 기록하는 개발자

0개의 댓글