[Java] 기초 - 다형성(Polymorphism)

J._.n·2024년 7월 31일

[Java]

목록 보기
10/10
post-thumbnail

다형성(Polymorphism)이란?

OOP의 4대 특징 중 하나로 여러 개의 형태를 가질 수 있는 능력 의미로 하나의 행동으로 여러가지 일을 수행한다는 개념이다.
자바에서 다형성이란 상속 관계에 있을 때 발현 되는 것으로 상위 클래스 타입의 레퍼런스 변수를 이용해 상속 받은 하위 클래스의 인스턴스를 참조할 수 있도록 허용하는 것이다.
다형성의 장점

  • 유지보수 용이 : 여러 객체들을 하나의 타입의 레퍼런스를 이용해 관리할 수 있다.
  • 재사용성 증대 : 객체들의 재사용이

레퍼런스 변수의 형변환

기본형 변수와 같이 레퍼런스 변수또한 형변환이 가능하다.
단, 서로 상속관계에 있는 클래스사이에서만 가능하기 때문에 조상타입의 레퍼런스 변수를 자손타입의 레퍼런스 변수로의 형변환만 가능하다.

업-캐스팅(Up-Casting)

조상 타입의 레퍼런스로 후손의 객체를 참조할 수 있게 형 변환하는 것으로
자바에서 대입 연산자의 특성으로 인해 피연산자들은 무조건 자료형이 같아야 한다. 이는 객체를 생성할 때도 대입 연산자를 사용하기 때문에 동일한 자료형으로 변환해줘야하는데 기본형 변수와 같이 작은 자료형에서 큰 자료형의 형변환은 생략이 가능하다.

class TV {
    public void turnOn() {}
    public void turnOff() {}
}

class SamsungTV extends TV {
    @Override
    public void turnOn() {
        super.turnOn();
    }

    @Override
    public void turnOff() {
        super.turnOff();
    }
    public void hiBixby(){}
}

부모 클래스인 TV 클래스와 자식 클래스인 SamsungTV가 있다.

TV tv1 = new SamsungTV();

부모 타입의 레퍼런스 변수에 자식 인스턴스를 담을 수 있다.

다운-캐스팅(Down-Casting)

조상타입의 레퍼런스 변수를 자손타입의 레퍼런스 변수로 변환하는 것으로
업 캐스팅한 레퍼런스 변수들만 다운-캐스팅이 가능하다.
즉, 상속 관계에 있어야만 캐스팅이 가능하다.

((SamsungTV)tv1).hiBixby()

부모 클래스 타입의 tv1이 자식 클래스의 메서드를 사용

instanceof 연산자

현재 레퍼런스 변수가 어떤 클래스 타입의 객체 주소를 참조하고 있는지 확인할 때 사용하는 연산자로 다운-캐스팅이 가능한지 확인하는 것과 같다.
최상위 조상 클래스 타입에 상속된 다양한 인스턴스 객체를 담았을 경우 각 인스턴스들의 메서드를 사용할 때 하나하나 명시적 다운-캐스팅이 불가능 하기에 instanceof 연산자를 사용한다.

if(tv1 instanceof SamsungTV){
	((SamsungTV)tv1).hiBixby();
}
profile
개발자를 꿈꾸는 대학생

0개의 댓글