BOOK

[JAVA] MENTOR JAVA SECTION 11

Minch13r 2025. 1. 18. 21:17

클래스에서의 타입 변환

타입 변환은 타입을 다른 타입으로 변환하는 것으로 자바에서는 다음과 같이 두 가지의 대표적인 타입 변환이 있다.

  • 자료형(타입) 변환
  • 클래스의 객체 타입 변환

자료형 변환은 자동 형 변환과 강제 형 변환이 있다. 클래스의 타입 변환도 마찬가지로 자동 형 변환과 강제 형 변환이 있다. 단, 자료형에 비해 타입 변환이 가능한 범위가 상당히 좁다. 클래스의 타입 변환은, 서로 상속 관계에 있는 클래스 사이에서만 변환할 수 있다.

 

자료형에서의 자동 형 변환과 마찬가지로 개발자가 직접 명시하지 않아도 자동으로 타입 변환이 일어나는 것을 '클래스 자동 타입 변환' 아록 부른다. 클래스 자동 타입 변환은 상속 관계에 있는 자식 클래스의 객체를 부모 타입의 객체로 변환하는 것을 말한다. 자식 객체를 만들면서 바로 부모 타입으로 변환할 때는 다음과 같이 구현한다.

부모 클래스(타입) 객체 변수 = new 자식 클래스();

 

만들어진 자식 객체를 부모 타입으로 변환할 때는 다음과 같이 구현한다.

부모 클래스(타입) 객체 변수 = 자식 객체;

 

자동 타입 변환은 자식 타입에서 부모 타입 방향으로만 가능하다. 따라서 부모 타입을 자식 타입으로 변환하려고 하면 오류가 발생한다.

 

부모 타입으로 자동 타입 변환을 했지만 자식 클래스의 멤버들에게 접근하고 싶을 때가 생길 수 있다. 자바의 규약으로 부모 타입에서는 자식 클래스의 멤버에 접근할 수 없으므로 이러한 경우 다시 변경해 접근할 수 있도록 제공하고 있다. 이를 클래스 강제 타입 변환이라고 한다. 자식 객체가 부모 타입으로 자동 타입 변환을 한 후, 다시 자식 타입으로 변환하는 것을 말한다.

 

클래스 타입 변환에서 강제 타입 변환은 자동 타입 변환과는 달리, 개발자가 직접 명시해야만 타입 변환을 할 수 있다. 자식 타입을 부모 타입으로 변환할 때는 별도 명시가 없어도 프로그램이 실행되면서 자동으로 타입을 변환해주지만, 부모 타입에서 자식 타입으로 변환하려면 우리는 반드시 변환하고자 하는 타입 형태를 직접 작성해야 한다.

 

일회성으로 타입 변환이 필요할 때는, 다음과 같이 사용할 수 있다.

((자식타입)) 부모 타입).메서드();

 

자식 클래스의 멤버들에 대한 접근이 여러 번 필요한 경우에는 다음과 같이 자식 타입 변수에 담아서 사용하기도 한다.

자식 타입 변수 = (자식 타입) 부모 타입;

다형성

다형성은 OOP의 대표적인 특징 중 하나로, 하나의 타입으로 다양한 객체를 사용할 수 있는 것을 의미한다. 자바에서는 앞에서 학습한 클래스 타입 변환을 통해, 부모 클래스의 타입 하나로 여러 가지 자식 객체들을 참조해 사용함으로써 다형성을 구현할 수 있다. 결과적으로 클래스 타입 변환이 존재하는 이유는 다형성을 구현하기 위함이라고 할 수도 있다. 하지만 타입 변환은 다형성을 구현하는 방법의 하나일 뿐, 혼자 다형성을 완전히 구현해낼 수 없다. 다음 세가지 특징이 힘을 합쳐야 다형성을 구현할 수 있다.

  • 상속
  • 메서드 오버라이딩
  • 클래스 타입 변환

instanceof 연산자

instanceof 연산자의 특징은 다음과 같다.

  • instanceof 기준으로 왼쪽 객체가 생성될 때 오른쪽 타입으로 생성되었는지 확인하는 연산자이다.
  • 맞으면 true, 아니면 false를 반환하며 만약 null을 가리키고 있으면 false를 반환한다.

오버로딩과 오버라이딩

  • 오버로딩 : 자바는 매개변수의 자료형/개수/순서를 기반으로 메서드를 구별하므로 하나의 클래스 안에서 같은 이름의 메서드를 여러 개 구현하고 필요에 따라 메서드를 선택해 사용할 수 있다.
  • 오버라이딩 : 부모 클래스에게 상속받은 메서드를 재정의하여 자식 클래스용 메서드를 구현하고 자식 객체를 통해 메서드를 호출하면 오버라이딩 된 메서드가 호출된다.

'BOOK' 카테고리의 다른 글

[JAVA] MENTOR JAVA SECTION 13  (2) 2025.01.20
[JAVA] MENTOR JAVA SECTION 12  (2) 2025.01.19
[JAVA] MENTOR JAVA SECTION 10  (2) 2025.01.17
[JAVA] MENTOR JAVA SECTION 9  (1) 2025.01.16
[JAVA] MENTOR JAVA SECTION 8  (2) 2025.01.15