자바[JAVA] - 다형성(Polymorphism)

turtleJ·2022년 5월 10일
0

언어

목록 보기
8/11

다형성 이전에 상속이란 개념을 먼저 숙지하는 것이 필요하다. 상속에 관한 포스팅을 먼저 보고오는 것을 추천한다.

다형성이란?

프로그램 언어의 다형성이란 그 언어의 각 요소들(상수, 변수, 식, 오브젝트, 함수, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질을 가리킨다.

객체지향프로그래밍(OOP, Object Oriented Programming)의 3대 특징 중 하나인 다형성은 하나의 부모타입 참조변수가 여러 자식 타입의 인스턴스를 가질 수 있는 성질을 말한다.

아래 예제 코드를 통해 다형성을 이해해보자.

Main.java

class A {};

class B extends A {};

class C extends A {};

public class Main {

	public static void main(String[] args) {
		
		A var1 = new A(); // 자신(A)을 인스턴스로 생성
		
		// Up Casting
		A var2 = new B(); // 자식(B)을 인스턴스로 생성
		A var3 = new C(); // 자식(C)을 인스턴스로 생성
		
		// Down Casting
		// var1, var2의 type이 A -> B로 바뀜. (부모에서 자식으로)
		B var4 = (B)var2;
		B var5 = (B)var1;
		
	}

}

클래스 형변환

업 캐스팅(Up Casting)

상속 관계에 있는 부모, 자식 클래스 간에 부모타입의 참조형 변수가 모든 자식 타입의 객체 주소를 받을 수 있음.

위 예제코드를 참조하시길 바랍니다.

다운 캐스팅(Down Casting)

  • 자식 객체의 주소를 받은 부모 참조형 변수를 가지고 자식의 멤버를 참조해야 할 경우, 부모 클래스 타입의 참조형 변수를 자식 클래스 타입으로 형 변환하는 것.
  • 자동으로 처리되지 않기 때문에 반드시 후손 타입 명시해서 형 변환.

위 예제코드를 참조하시길 바랍니다.

instanceof 연산자

현재 참조형 변수가 어떤 클래스 형의 객체 주소를 참조하고 있는지 확인 할 때 사용

//	표현식
//		if(레퍼런스 instanceof 클래스타입) {
//		 	true일때 처리할 내용.
//		}
        

Main.java

class A {};

class B extends A {};

class C extends A {};

public class Main {

	public static void main(String[] args) {
		
		A var3 = new C(); // 자식(C)을 인스턴스로 생성
        
        if(var3 instanceof A) {
			System.out.println("O");
        } else {
        	System.out.println("X");
        }
		
		if(var3 instanceof B) {
			System.out.println("O");
		} else {
			System.out.println("X");
		}
		
		if(var3 instanceof C) {
			System.out.println("O");
		} else {
			System.out.println("X");
		}
		
	}

}

결과

다음 결과를 통해 var3가 A와 C 클래스의 인스턴스임을 알 수 있다.

profile
꾸준함을 무기로 성장하는 개발자가 되겠습니다.

0개의 댓글