강의 소개
현재 수강하고 있는 멀티캠퍼스 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 // 가능
출처: 자바의 정석(남궁 성 저), 멀티캠퍼스
'교육, 학습 > 멀티캠퍼스_풀 스택' 카테고리의 다른 글
멀티캠퍼스 국비교육(k-digital 지능형 웹 서비스 풀 스택 과정) 커리큘럼, 특징 (0) | 2022.01.12 |
---|---|
JAVA 문법 - 배열(array), 확장된 for문, 다차원 배열 (0) | 2022.01.11 |
JAVA문법 - 인터페이스 개념, abstract 클래스와의 비교(설계적 관점에서 사용이유) (0) | 2022.01.10 |
JAVA 문법 - 메서드 오버라이딩의 3가지 규칙, abstract와 final제어자 (0) | 2022.01.10 |
JAVA 문법 - abstract, 추상클래스, 추상메서드와 상속, 오버라이딩의 관계 (0) | 2022.01.09 |
댓글