Categories: Java 언어Korean

Java 총 정리[66. 참조 자료형 변환 심화]

참조 자료형 변환 심화 1

이전 걸음에서 참조 자료형 변환에 대해서 사용 방법과 어떤 참조 자료형만 형 변환을 할 수 있는지 기초에 대해서 설명을 드렸습니다. 복습의 의미에서 간단하게 설명을 드리면 참조 자료형 변환은 연관 관계가 있는 class가 할 수 있는데 그 연관 관계가 상속입니다. 그래서 부모와 자식이 참조 자료형 변환을 할 수 있었습니다. 그래서 이번 걸음에서는 좀 더 참조 자료형 변환에 대해서 심도 있게 진행을 하도록 하겠습니다.

이번 걸음에서는 참조 자료형 변환 심화로 참조 자료형에 대해서 복합적인 사용 방법과 사용을 하는 경우 좋은 점 그리고 참조 자료형 변환만 쓰면 한계가 존재하는데 존재하는 이유까지 이번 걸음에서 설명을 드리도록 하겠습니다. 이번 걸음을 끝까지 보신다면 참조 자료형 변환에 이해가 한층 깊어지실 수 있습니다.

참조 자료형 변환 심화에서는 참조 자료형 변환의 부모와 자식의 사용 관계와  메소드에서 사용을 할 때 좋은 점과 마지막으로 참조 자료형 변환에 한계에 대해서 이번 걸음에서 알아보도록 하겠습니다.

참조 자료형 변환 이해 심화

참조 자료형 변환을 선언과 사용을 하는 것으로는 부족한 부분이 있습니다. 그래서 위의 사진을 가지고 설명을 드리려고 합니다. 제일 중요한 전제는 자료형 기준으로 객체를 사용을 할 수 있습니다. 

  1. 업 캐스팅 : 자료형은 부모 객체는 자식 이 기준으로 본다면 자식에 있는 것들은 사용이 불가 하며 부모가 가지고 있는 것만 사용이 가능 합니다.
  2. 다운 캐스팅 : 다운 캐스팅을 하면 객체와 같은 자료형으로 바뀌기 때문에 당연히 자식과 부모 모두 사용이 가능 합니다.

※ 이전 걸음에서 말씀을 드렸지만 Java언어에서 class 관계에서는 부모가 더 큰 것이 아니라 부모를 상속 받고 내 속성과 기능을 사용을 하기 때문에 무조건 자식이 부모보다 이상의 개념을 가지고 있습니다.

참조 자료형 변환과 메소드

위에 글을 읽으셨다면 의구심이 드실 수 있습니다. 부모로 업 캐스팅을 하거나 다시 다운 캐스팅을 하는데 굳이 이걸 왜 사용을 할까? 하는 의구심이 분명히 존재를 하실 겁니다. 우선 제일 중요한 이유는 하나의 부몬 하나의 자식 이런 개념을 보실 것이 아니라 하나의 부모 여러 명의 자식이 있는 경우를 보셔야 합니다. 

일반적으로 하나의 부모의 여러 자식이 존재하게 구현을 하게 됩니다. 이때 비로서 참조 자료형 변환의 좋은 점이 생기게 됩니다. 부모의 자료형은 모든 자식 객체를 받아서 사용이 됩니다. 

만약에 부모 class A가 있고 그걸 상속 받은 class B, class C, class D, class E가 있다고 하면 객체는 B, C, D, E이지만 자료형은 A로 선언을 할 수 있게 됩니다. 이렇게 말씀을 드려도 그게 뭐가 좋은 거지 하실 수 있습니다. 

그래서 간단히 설명을 드리면 만약에 자식 class인 B, C, D, E를 매개변수를 받는 메소드가 있다고 하면 총 4개의 메소드를 생성을 해야 합니다. 이름을 다르게 해서

예를 들어 getB(B b), getC(C c), getD(D d), getE(E e) 이렇게 할 수 있고 좀 더 편하게 오버로딩을 사용을 하여 get(B b), get(C c), get(D d), get(E e) 구현을 할 수 있습니다. 여기까지 배운 내용으로 할 수 있는 부분 이라고 생각을 합니다.

하지만 참조 자료형 변환에 업 캐스팅을 한다면 get(A a)로만 만들어 사용을 할 수 있습니다.

그럼 메소드 만들어야 하는 양이 줄어 들 수 있어 좋은 점이 있습니다.

참조 자료형 변환 한계

위에 내용처럼 메소드를 하나 만들어서 자식의 객체를 받아서 사용이 가능합니다. 하지만 이 부분에도 한계가 존재 합니다. 그 한계는 이번 글에서 처음 설명 드린 내용을 생각을 하면 좋습니다.  부모의 자료형으로 객체 활용이 되기 때문에 각자의 자식의 고유한 속성과 기능이 사용이 불가 합니다. 그 다음 걸음에서 자식의 객체를 사용을 할 수 있는 법을 배우도록 하겠습니다.

Dolphin

Recent Posts

Java 총정리[97. Java GUI]

Java GUI Java GUI에 대해서 이번 걸음에서 배움으로써 GUI에 전반적인 지식과 Java GUI를 구현하는 방법…

7개월 ago

Java 총정리[96. Java TCP 통신 프로그램 구현]

Java TCP 통신 프로그램 구현 Java TCP 통신 프로그램 구현을 위해서 이전 걸음에서 쓰레드에 대한…

7개월 ago

Java 총정리[95.쓰레드 통신]

쓰레드 통신 이전 걸음에서 쓰레드의 임계영역에 대해서 같이 공부를 했습니다. 동기화에 대한 개념을 계속적으로 하고…

7개월 ago

Java 총 정리[94. 쓰레드 임계영역]

쓰레드 임계영역 이전 걸음에서 쓰레드의 동기화에 대해서 같이 공부를 했습니다. 동기화에 대한 전반적인 내용을 공부하고…

8개월 ago

Java 총 정리[93. 쓰레드 동기화]

쓰레드 동기화 이전 걸음에서 계속 쓰레드에 대해서 공부를 하고 있습니다. 쓰레드는 상당히 중요한 개념이기 때문에…

8개월 ago

Java 총 정리[92. 쓰레드 join()]

쓰레드 join() 이전 걸음에서 쓰레드의 전반적인 실행 흐름에 대해서 공부를 했습니다. 이제 배운 실행 흐름…

8개월 ago

This website uses cookies.