Software Engineering/Java & JSP

[Java] 제4장 인터페이스와 다형성

iseop 2023. 4. 30. 15:04

1. 추상 메소드(abstract method)

  • 추상 메소드는 형식만 정의된 메소드로, 추상 메소드라 한다.
  • 추상 클래스만 추상 메소드를 가질 수 있다.
  • 추상 메소드는 서브클래스에서 구현되어야 하므로 final 키워드를 쓸 수 없다.

2. 추상 클래스(abstract class)

  • 추상 클래스는 연관있는 클래스들이 비슷한 메소드 형식을 공유하려고 사용한다.
  • 추상 클래스로는 객체를 생성시킬 수 없고, 서브클래스를 구현해야 객체를 생성할 수 있다.
  • 추상 클래스는 서브클래스에서 구현되어야 하므로 final 키워드를 쓸 수 없다.
  • 추상 클래스는 구현된 메소드나 필드를 가질 수 있다.

3. 인터페이스(interface)

  • 인터페이스는 서로 관련 없는 클래스들이 비슷한 기능을 공유하려고 사용하는 것이다.
  • 인터페이스는 서로 다른 객체들 간의 공통적 행동양식을 정의하려고 사용하는 것이다.
  • 인터페이스는 추상클래스와 유사하다.
  • 인터페이스 간 (다중)상속 관계가 존재할 수 있다. (interface I extends II, III {...})
  • 서브클래스가 인터페이스를 (다중)구현할 수 있다. (class C implements I, II {...})
  • 인터페이스의 접근제어자는 생략 또는 public이다.
  • 인터페이스의 추상 메소드만 가질 수 있으며, 묵시적으로 public이다.
  • 인터페이스는 상수를 가질 수 있다. 묵시적으로 public static final이다.
  • 인터페이스가 추상이 아닌 메소드를 가지려면 default 키워드를 써야 한다.

4. 자료형 변환

  • 클래스와 인터페이스는 변수 선언 시 자료형처럼 사용된다.
  • 슈퍼클래스는 서브클래스의 객체를 가리킬 수 있고, 그 객체는 슈퍼클래스로 형변환된다.
  • List list;    list = new ArrayList();
  • 서브클래스는 슈퍼클래스의 객체를 가리킬 수 없다.

5. 다형성

  • 다형성은 메소드 오버라이딩, 메소드 오버로딩을 통해 구현된다.
  • 이를 메소드 동적 바인딩이라 한다.
  • 메소드 오버라이딩은 상속 받은 메소드를 재정의하는 것을 말한다.
  • 메소드 오버로딩은 상속 받은 메소드가 더 다양한 파라미터를 수용하도록 메소드를 추가하는 것을 말한다.

6. 열거 자료형

  • 열거 자료형에는 여러 상수를 미리 정의할 수 있다. 키워드는 enum이다.
  • 열거 자료형은 java.lang.Enum의 서브클래스이다.
  • 열거 자료형에는 원소를 배열로 반환하는 values() 메소드가 있다.
  • enum 클래스의 각 상수는 객체로 취급된다.
  • enum 클래스의 생성자에 대한 접근제어자는 생략 또는 private이다.

7. 익명 클래스

  • 클래스 정의 없이 단일 객체를 생성하기 위한 이름 없는 클래스를 익명 클래스라 한다.
  • 익명 클래스는 인터페이스를 구현하는 익명 클래스를 통해 객체화될 수 있다.
  • 익명 클래스는 다른 클래스를 상속받는 익명 클래스를 통해 객체화될 수 있다.
  • Super super = new Super() { 원하는 코드 추가; }

8. 연습문제 요약

  • 인터페이스는 다중 상속이 가능하다.
  • 자식인터페이스가 부모인터페이스를 상속하는 경우 implements가 아닌 extends 키워드를 사용한다.
  • 인터페이스에 선언된 메소드는 구현되어 있으면 안 된다.
  • 인터페이스에 완성된 메소드를 포함하고자 하는 경우 default 키워드를 사용하여 디폴트 메소드로 정의하여야 한다.
  • 추상클래스에 존재하는 추상메소드는 반드시 자식클래스에서 구현되어야 한다.
  • 클래스의 내부에 클래스가 있는 경우 컴파일하면 '외부클래스$내부클래스.class' 파일이 생성된다.
  • 익명 클래스가 있는 경우 컴파일하면 '다른클래스$1.class' 처럼 숫자가 들어간 파일이 생성된다.