Java

[Java] Abstract, Interface

Bay Im 2024. 3. 13. 21:27
  • 다형성(Polymorphism)
    • 하나의 타입에 여러 가지 객체를 대입하여 다양한 실행 결과를 얻는 것
    • 하위 클래스에서 각 함수명을 통일해서 사용 가능
    • 객체를 부품화 시키고 유지보수 용이하다.
  • 자동 타입 변환(Promotion)
    • 프로그램 실행 도중에 자동 타입 변환이 일어나는 것
    • 바로 상단의 부모가 아니더라도 상속 계층의 상위면 자동 타입 변환 가능
    • 업 캐스팅
      • 자식 객체가 부모 클래스 타입을 가지는 것
      • 부모클래스 변수 = new 자식클래스(); 형태
  • 강제 타입 변환(Casting)
    • 부모 타입을 자식 타입으로 변환하는 것
    • 다운 캐스팅
      • 자식 타입을 부모 타입으로 자동 변환 후, 다시 자식 타입으로 변환할 때
      • 자식클래스 변수 = (자식클래스) new 부모클래스(); 형태
    • 필요한 경우
      • 자식 타입이 부모 타입으로 자동 변환, 부모 타입에 선언된 필드와 메소드만 사용 가능
      • 자식 타입에 선언된 필드와 메소드를 다시 사용해야 할 경우
  • 객체 타입 확인 (instanceof)
    • 강제 타입 변환 전에 먼저 자식 타입인지 확인 후 강제 타입 실행해야 한다.
    • if(부모객체 instanceof 자식객체) { 강제 타입 변환 }
  • 매개변수가 클래스 타입일 경우
    • 해당 클래스의 객체 대입이 원칙이나 자식 객체 대입하는 것도 허용

 

  • 추상 클래스 (abstract)
    • 클래스들의 공통되는 필드와 메소드를 정의한 클래스
    • public abstract class 클래스명 { … } 형식으로 추상 클래스 선언
    • new 연산자로 객체 생성하지 못하고 상속으로 자식 클래스만 생성 가능하다.
    • 추상 클래스에서는 메소드의 선언부만 작성하고, 실행 내용은 실체 클래스에서 오버라이딩하여 작성한다.
  • 추상 메소드 선언
    • public abstract 리턴타입 메소드명(매개변수) 형식
    • 인터페이스의 메소드는 키워드 생략하더라도 자동으로 추상 메소드로 선언

 

  • 인터페이스 (interface)
    • [public] interface 인터페이스명 {…} 형식으로 선언
    • 메소드는 추상 메소드만 있는 클래스
    • 인터페이스는 상수 필드만 선언 가능하다. 상수명은 대문자로 작성, 언더바 사용
    • 인터페이스에 선언된 필드는 모드 public static final
    • 선언과 동시에 초기값 지정해야 한다.
    • 인터페이스는 다중 상속이 되므로 implements 옆에 여러 개의 인터페이스를 선언할 수 있다.
    • JDK8부터 default 메소드가 추가되었다. 인터페이스에서 일반 메소드처럼 정의 가능 (public default void 메소드명() {…})
  • 구현 클래스 선언
    • public class 구현클래스명 implements 인터페이스명 { 인터페이스에 선언된 추상 메소드의 실체 메소드 선언 } 형식
    • 인터페이스의 모든 추상 메소드를 재정의해야하고, 일부만 재정의할 경우 추상 클래스로 선언하여 사용
  • 인터페이스 간 상속
    • public interface 하위인터페이스 extends 상위인터페이스1, 상위인터페이스2 {…} 형식
    • 하위 인터페이스 구현 클래스는 상위, 하위 인터페이스 모두 추상 메소드 재정의 해야 한다.

 

  • abstract와 interface 차이
    • 추상 메소드
      • 둘다 존재
    • 일반 메소드
      • abstract는 있고, interface는 없음 (default 메소드만 있음)
    • 예약어
      • abstract class
        • abstract 메소드명
        • extends
      • interface
        • implements
    • 다중 상속
      • abstract는 불가능, interface는 가능
    • 객체 생성(new)
      • 둘 다 불가능
      • abstract는 상속으로, interface는 구현으로
    • 접근 제한자
      • abstract
        • public, protected, private
      • interface
        • public
    • 필드 선언(멤버 변수)
      • abstract는 가능, interface는 public static만 가능
728x90