본문 바로가기
교육, 학습/멀티캠퍼스_풀 스택

JAVA 문법 - 기본형 타입, 참조형 타입의 형변환(자동 형변환, 명시적 형변환)

by 개발하는 경제학도 2022. 1. 10.

강의 소개

현재 수강하고 있는 멀티캠퍼스 k-digital 지능형 웹서비스 풀 스택 과정을 수강하며 적은 내용입니다.

교재로는 자바의 정석을 사용하고 있습니다.


 

형 변환

형 변환에는 기본형의 형 변환, 참조형의 형 변환이 있다.

 

1. 기본형 타입의 형 변환(자세히)

boolean을 제외한 7개의 기본형은 서로 형 변환이 가능하다.

2021.12.29 - [교육, 학습/멀티캠퍼스_풀 스택] - JAVA 문법 - String과 Char 비교, 변수의 타입

 

1) 자동 형 변환

'작은 크기 타입 -> 큰 크기 타입' 순으로 자동 형 변환이 가능하다.

char -> int -> long -> float -> double
byte -> short -> int -> long -> float -> double

 

2) 명시적 형 변환

int -> float 형 변환을 하려면 (float) 10라고 표현할 수 있다. 이렇게 형 변환이 되면 출력 결과는 10.0f 가 된다.

 


 

2. 참조형 타입의 형 변환

**참조형 타입(자세히)

더보기

기본형을 제외한 나머지 타입이다(String, System 등이며 대표적으로 배열, 열거, 클래스, 인터페이스 타입이 있다).

스택에는 객체의 주소를 저장하며, 실제값은 힙 영역에 저장된다.

(반면 기본형 타입은 스택에 실제값이 저장된다.)

 

참조형 타입의 형 변환을 하려면 반드시 타입을 변환하려는 2개 클래스 간의 상속관계가 있어야 한다.

 

1) 자동 형 변환

자식 객체를 부모 타입으로 형 변환할 수 있다.

1가지 타입으로 객체를 나타내지만, 여러 기능을 나타낼 수 있다는 것이다.

다형성을 표현하기 위해 형 변환을 한다.

 

- 형태

부모클래스 변수명 = new 자식생성자();
// 자식 객체를 생성하여 부모클래스로 변환
A a1 = new A(); // 자기 자신이므로 형변환 필요 X
A a2 = new B(); // 자동형변환
A a2 = (A)new B(); // 2번 라인과 똑같다. (A)는 생략해도 무방하다
A a3 = new C(); // 자동형변환
B b1 = new A(); // 자식으로 형변환은 불가하다

 

- 참조형 타입의 형 변환을 사용하는 이유

여러 가지 자식 클래스 객체들을 1개의 부모 클래스로 타입을 통일하기 위해서 사용한다.

 

[예시 1. 배열 생성에 이용]

이렇게 부모 클래스의 타입으로 통일하여 '하위 클래스들의 **배열을 생성할 수 있다.

** 배열(자세히)

더보기

배열 형태 

데이터 타입 [] 배열 변수명 = new 데이터 타입[길이];

> 동일 타입 데이터 여러 개 저장하는 것이 배열이다.

 

예를 들어, 클래스 A를 클래스 B가 상속받은 뒤, 클래스 C가 클래스 B를 상속받은 경우를 보면 (클래스 C -> 클래스 B -> 클래스 A 순 상속받은 경우)

A~C 3개 클래스 타입 객체를 모아서 1개 배열로 선언할 때 사용할 수 있다.

 

[예시 2. 메서드의 매개변수로 다양한 객체를 전달하고 싶을 때 이용]

메서드의 매개변수로 여러 가지 다양한 객체를 전달해야 할 때, 타입 통일이 필요하다.

class Test{

void m(A a1) {..}

}

예를 들어, 클래스 test 내부에 m 메서드가 있다.

이 메서드는 상황에 따라 A, B, C 클래스의 객체를 모두 매개변수로 전달받고 싶은데,

이때 아래와 같이 '자동형 변환'을 통해서 다양한 객체(클래스 A의 하위 클래스들의 객체)를 매개변수로 전달해줄 수 있다.

public class interfaceTest {
	public static void main(String[] args) {

		Test t = new Test();
		t.m(new A());
		t.m(new B());
		t.m(new C());
	}
}

 

 

2) 명시적 형 변환

자식 클래스 -> 부모 클래스 타입으로 자동 형 변환된 뒤에, 명시적 형 변환을 통해 원래 본인인 자식 타입으로 다시 돌아오는 것이다.

명시적 형 변환 이후에 사용 가능한 것은 자식, 부모 클래스의 변수, 메서드 모두(부모 클래스의 메서드는 상속받았으니까) 사용 가능하다.

 

[예제. 명시적 형 변환]

class A{int i = 10; }

class B extends A{int j = 20; }

A a2 = new B(); // 자동형변환
a2.i;  // 가능
a2.j; // 불가능(B클래스의 변수 사용 불가)


B b2 = (B)a2;  // 명시적 형변환
b2.i;  // 가능
b2.j // 가능

 

 

출처: 자바의 정석(남궁 성 저), 멀티캠퍼스

댓글