[포스코x코딩온] KDT-Web-8 17주차 Java - 캐스팅, 인터페이스

Yunes·2023년 10월 25일
0

[포스코x코딩온]

목록 보기
38/47
post-thumbnail

업캐스팅 upcasting

서브 클래스의 객체는 슈퍼 클래스의 멤버를 모두 가지고 있다. 또한 슈퍼 클래스의 멤버로 취급할 수 있고 슈퍼 클래스의 객체로 취급할 수 있다.

사람은 생물이다.

class Person {}
class Student extends Person {}

Student s = new Student();
Person p = s; // 업캐스팅, 자동 타입 변환

업캐스팅은 서브 클래스 객체를 슈퍼 클래스 타입으로 타입 변환하는 것을 말한다.

업캐스팅된 레퍼런스에 대해 객체 내에 슈퍼 클래스의 멤버만 접근 가능하다.

이미지 출처 : 명품 Java Programming

서브클래스인 Student 의 객체라면 슈퍼 클래스의 멤버와 서브 클래스의 멤버를 모두 접근 가능한데 업캐스팅이 되면 슈퍼 클래스의 멤버만 접근할 수 있다.

다운캐스팅 downcasting

다운캐스팅은 슈퍼 클래스 객체를 서브 클래스 타입으로 변환하는 것을 말한다. 이때 명시적인 타입 변환이 필요하다.

class Person {} // 슈퍼 클래스
class Student extends Person {} // 서브 클래스

Person p = new Student("이재문"); // 업캐스팅

Student s = (Student)p; // 다운캐스팅, (Student) 의 타입 변환 표시가 필요하다.

이미지 출처 : 명품 Java Programming

인터페이스

인터페이스는 클래스가 구현해야 할 메소드들이 선언되는 추상형을 말한다.

  • interface 키워드로 선언할 수 있다.

~ java 7 - 상수, 추상 메소드로만 구성

java 8 ~

  • default 메서드 포함 ( java 8 )
  • private 메서드 포함 ( java 9 )
  • static 메서드 포함 ( java 9 )
    단, 필드(멤버 변수) 는 선언할 수 없다.
public interface GameConsoleInterface {
	public static final int TIMEOUT = 10000; // 상수 필드 public static final 생략 가능
	public abstract void up();
    void down(); // 추상메소드 public abstract 생략 가능
    void left();
    public default void right() { // default 메서드 public 생략 가능
    	System.out.println("");
    };
}
  • 상수 : public 만 사용 가능하며 public static final 생략 가능
  • 추상 메소드 : public abstract 생략 가능
  • default 메소드 : 인터페이스에 구현 코드가 작성된 메소드로 인터페이스를 구현하는 클래스에 자동으로 상속된다. public 접근 지정자만 사용 가능하며 생략 가능하다.
  • private 메소드 : 인터페이스 내에 메소드 코드가 작성되어야 한다. 단, 인터페이스 내에 있는 다른 메소드에 의해서만 호출될 수 있다.
  • static 메소드 : public, private 모두 지정 가능하나 생략하면 public 이다.

인터페이스만으로는 객체를 만들 수 없다.

new GameConsoleInterface(); // 불가, 오류 발생

인터페이스 타입의 레퍼런스 변수는 선언할 수 있다.

GameConsoleInterface console;

인터페이스를 상속받는 클래스는 인터페이스의 모든 추상 메소드를 반드시 구현해야 한다.

다른 인터페이스를 extends 로 상속 가능하다.

인터페이스는 다중 상속이 가능하다.

interface MobileInterface extends PhoneInterface {}; // 인터페이스가 다른 인터페이스 상속시 extends 

interface MP3Interface {};

interface MusicPlayerInterface extends MobileInterface, MP3Interface {}; // 다중 상속

인터페이스는 상속받은 클래스들이 기능을 서로 다르게 구현할 수 있도록 하여 클래스의 다형성을 실현할 수 있다.

+) final 키워드 정리

  // 클래스에서 사용시 상속될 수 없음을 의미. final class ... => 상속 불가
  // 메소드에서 사용시 오버라이드될 수 없다.
  // 변수에서 사용시 수정될 수 없다.

+) 추상 클래스와 인터페이스 비교

이펙티브 자바 3/E 아이템 20. 추상 클래스보다는 인터페이스 사용을 우선하라

profile
미래의 나를 만들어나가는 한 개발자의 블로그입니다.

0개의 댓글