IT/JAVA

Java Section 11 : 다형성과 타입 변환

_KH_ 2025. 1. 18. 23:57

01 클래스에서의 타입 변환

■ 클래스의 타입 변환에도 자동 형 변환, 강제 형 변환 존재

   => 상속 관계에 있는 클래스 사이에서만 변환 가능

 

① 자동 형 변환 : 상속 관계에 있는 자식 클래스의 객체를 부모 타입의 객체로 변환하는 것

-> 자식 타입에서 부모 타입 방향으로만 가능

package practice;

class Parent {}
class Child extends Parent {}

public class Ex {

	public static void main(String[] args) {

		Parent p1 = new Parent();
		Child c1 = new Child();

		Parent p2 = new Child(); // 자동형변환
		Parent p3 = c1; // 자동형변환


		if(p3 == c1) {
			System.out.println("같은 객체를 참조하고 있다.");
		}
	}
}

- Child 타입의 Child 객체 c1의 타입을 Parent로 변환해 만든 p3은 여전히 c1 객체임.

- 타입을 변환한다고 객체가 바뀌는 것이 아니라, 객체는 보존되고 사용만 부모 객체처럼 사용한다.

 

② 강제 형 변환 : 자식 객체가 부모 타입으로 자동 형 변환 후, 다시 자식 타입으로 변환하는 것

- 자식 타입에서 부모 타입으로 자동 형 변환 했지만 자식 클래스 멤버에 접근하고 싶을 때 사용

- 개발자가 직접 명시해야 함

- 부모 타입으로 변환했던 자식 객체를 다시 자식 타입으로 변환할 때만 사용 가능

 

02 다형성 : 하나의 타입으로 다양한 객체 사용 가능

- [상속] + [메서드 오버라이딩] + [클래스 타입 변환] 을 사용하여 구현.

 

03 instanceof 연산자

■ 객체 instanceof 타입 (클래스명) 

: instanceof 기준으로 왼쪽 객체가 생성될 때 오른쪽 타입으로 생성되었는지 확인하는 연산자

: 맞으면 true, 아니면 false를 반환하며 만약 null을 가리키면 false를 반환한다.

 

+ '==' 연산자와의 차이

- A instance B : 객체 변수 A가 객체의 타입 B로 생성된 것인지 확인함

- C == D : 객체 변수 C와 객체 변수 D가 같은 객체를 참조하고 있는지 확인함

 

04 오버로딩과 오버라이딩

비슷한 기능 & 중복된 구현이 필요할 때 오버로딩과 오버라이딩을 통해 중복 없는 최소한의 코드로 구현 가능

 

① 오버로딩 : 자바는 매개변수의 자료형/개수/순서를 기반으로 메서드를 구별하므로 하나의 클래스 안에서 같은 이름의 메서드를 여러 개 구현하고 필요에 따라 메서드를 선택해 사용할 수 있다.

=> 새로운 메서드 정의

 

② 오버라이딩 : 부모 클래스에게 상속받은 메서드를 재정의하여 자식 클래스용 메서드를 구현하고 자식 객체를 통해 메서드를 호출하면 오버라이딩된 메서드가 호출된다.

=> 상속받은 기존의 메서드를 재정의