목차
개요
명시적인 .. 묵시적인..
또 어떤 자료에는 암시적인 .. 공학분야도 그렇지만 나라별로 그 분야의 선구자가 해외의 단어나 명칭을 해석하는 단어로 굳어지는 경우가 많다.
공학같은 strict 한 분야면 모를까 비교적 자유로운 분위기인 컴퓨터 공학쪽에서는 같은 단어를 여러가지 명칭으로 부르는 경우가 있는 것 같다.
딱 정리하자면
Explicit ; 명시적인
→ 개발자가 코드에서 직접 ~~ 하는 것을 말한다.
Implicit ; 암시적인, 묵시적인
→ 컴파일러나 런타임 시스템에 의해 자동으로 ~~ 되는 것을 말한다.
묵시적 형변환
타입 변환을 시스템이 자동으로 실행
컴파일러가 변환 중에 데이터 손실이 없다고 판단할 때 이루어진다.
이는 데이터 타입에 따라서 조금 상세하게 이해를 할 필요가 있다.
원시타입에서의 묵시적 형변환
대부분 작은 데이터 타입에서 큰 데이터 타입으로의 형변환이 일어난다.
→ 작은 데이터 타입에서 큰 데이터 타입으로 변환할 때 데이터 손실의 가능성이 없기 때문이다.
하지만 특정 경우에 큰 데이터 타입에서 작은 데이터 타입으로 묵시적 형변환이 발생할 수 있다.
→ 컴파일러가 변환 중에 데이터 손실이 없다고 판단하거나 언어 자체의 특성으로 인해 가능하다.
하지만 이는 예상하지 못한 손실이 발생할 수 있기에 유저가 직접 명시적인 형 변환을 해주어야한다.
원시타입에서의 명시적 형변환
위에서 설명했다 싶이 작은 데이터 타입으로 변환하려는 경우에 사용되며, 형변환을 위해 캐스팅 연산자(casting operator)를 사용해야한다.
double doubleValue = 42.7;
int intValue;
intValue = (int) doubleValue; // 명시적 형변환 발생, 소수부분이 손실됨
데이터 타입인 int 를 같이 입력하여 형변환을 해주어야한다.
하지만 위처럼 double이었던(소수점이 표기가 되었던) 데이터 타입을 정수형인 int로 바꾸면서 소수점이 소실될수 있다.
업캐스팅(upcasting) - 명시적 형변환 사용하지 않아도 ok!
위 클래스 타입의 변수에 하위 클래스의 인스턴스를 할당하는 것
Customer customerLee = new VIPCustomer(); // 업캐스팅
원시타입에서의 묵시적 형변환에서처럼 하위 클래스의 인스턴스가 상위 클래스의 변수에 할당할때는 데이터 손실의 가능성이 있다.
다운캐스팅(downcasting)- 명시적 형변환을 사용해야한다.
상위 클래스 인스턴스를 하위 클래스 타입의 변수에 할당하는 것
상속 관계에서 상위 클래스 타입의 변수에 하위 클래스 인스턴스가 할당되어 있을 때, 하위 클래스의 멤버 변수나 메서드에 접근하려면 명시적 형변환 을 수행해야한다.
VIPCustomer vipCustomer = (VIPCustomer) customerLee; // 다운캐스팅
또한 실제로 변환되는 객체가 해당 하위 클래스의 인스턴스인지 확인해야 한다.
그렇지 않으면 ClassCastException 오류가 발생할 수 있다. 따라서 하위 클래스의 인스턴스임을 확인하기 위해 instanceof 연산자를 사용하여 확인을 한다.
'미사용 > KakaoTechCampus' 카테고리의 다른 글
Java기초[10] 인터페이스 기본개념으로 알아보는 다형성 (0) | 2023.04.28 |
---|---|
Java기초[9] 전략&템플릿 메서드 패턴 (0) | 2023.04.28 |
Java기초[7] 자바에서의 상속 구현 (0) | 2023.04.28 |
[카테캠] 백엔드 과정 1기 웰컴키트(굿즈) 리뷰 (0) | 2023.04.18 |
Java기초[6] 오버로딩과 오버라이딩의 차이점 (0) | 2023.04.15 |