일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Java
- 동적쿼리
- NPM
- HTTP
- RequestMethod.POST
- jsx
- 서드파티모듈
- node.js
- egov
- 콜백
- MVC
- vscode
- mybatis
- Spring
- Callback
- SQL
- 쿼리
- android
- MySQL
- C#크롤링
- iBATIS
- AndroidStudio
- c:forEach
- react
- fullcalendar
- JavaScript
- JSTL
- jQuery
- c:choose
- 국제화
- Today
- Total
Today Yewon Learned
[JAVA] Casting(캐스팅 : 형변환) 본문
자바의 데이터형
■ 기본형(Primitive Type)
- Boolean Type(boolean)
- Numeric Type(Short, int, long, float, double, char)
■ 참조형(Reference Type)
- Class Type
- Interface Type
- Array Type
- Enum Type 등
캐스팅(Casting)
- 캐스팅(Casting)은 형변환이라고 부르기도 함
- 객체지향(OOP)에서의 다향성(Polymorphism)에 있어 매우 중요함
- 다형성과 관련
- 종류 : UpCasting, DownCasting
■ 기본형(Primitive Type)의 캐스팅
- 보통 "데이터 손실"을 막기위해 동작
int a = 1.2345; // 컴파일 에러
int newA = (int)1.2345; // 캐스팅
■ 참조형(Reference Type)의 캐스팅
- 기본적으로 캐스팅은 서로 관련이 있는 데이터끼리의 변환을 목표로 함
- 즉 레퍼런스 타입에서는 서로 상속(extends)나 구현(implements) 관계 등에 있지 않은 전혀 다른 두 객체라면,
캐스팅이 일어날 수 없음
Class Candy {
String flavor;
int price;
}
Class Cup {
String shape;
boolean isCover;
}
■ 업 캐스팅(UpCasting)
- 자식 클래스가 부모 클래스 타입으로 캐스팅 되는 것
- Java에서 서브 크랠스는 슈퍼 클래스의 모든 특성을 상속 받음
- 즉 서브 클래슨느 슈퍼 클래스로 취급될 수 있음
예시) 슈퍼 클래스 : 생물, 서브 클래스 : 사람
사람은 생물이다. 라고 할 수 있음
class Human{
// 생략
}
class Student extends Human{
// 생략
}
public class CastingTest {
public static void main(String[] args) {
Student student = new Student();
Human human = student;
// 자식 클래스(Student)가 부모 클래스(Human)타입으로 캐스팅
}
}
package study.test.java;
class Person{
String name;
public Person(String name) {
this.name = name;
}
}
class Student extends Person{
String age;
public Student(String name) {
super(name); // super 키워드에 대해서는 따로 설명하겠다.
}
}
public class CastingTest {
public static void main(String[] args) {
// student 참조변수를 이용하면 age, name에 접근 가능하다.
Student student = new Student("도리도리");
// person 참조변수를 이용하면 Student 객체의 멤버 중에서 Person 클래스의 멤버에만 접근이 가능하다.
Person person = student; // "업 캐스팅"
person.name = "세진세진";
person.age = "24"; // 컴파일 오류 ~!
}
}
위 코드에서, person 참조변수는 Student 객체를 가르킴
하지만 Person 타입이므로 자신의 클래스에 속한 멤버만 접근 가능하기 때문에 person.age를 했을 때 오류 발생
■ 다운 캐스팅(DownCasting)
- 부모 클래스가 자식 클래스 타입으로 캐스팅 되는 것
- 자신의 고유한 특성을 잃은 서브 클래스의 객체를 복구 시키는 것 (= 업캐스팅 된 상태를 원상태로 다시 되돌림)
- 명시적 타입 지정 필요
- 업캐스팅이 선행 된 후 진행되어야 함
class Human{
// 생략
}
class Student extends Human{
// 생략
}
public class CastingTest {
public static void main(String[] args) {
Human human = new Human();
Student student = (Student) human;
// 부모 클래스(Human)이 자식 클래스(Student)타입으로 캐스팅
// 위의 구문은 오류지만, 이런 식으로 된다는 걸 보여주기 위한 것이니 참고만 하자.
// 실제로 다운캐스팅은 업 캐스팅이 선행된 후 되어야 한다.
}
}
'JAVA' 카테고리의 다른 글
[JAVA] request.getParameter() 메소드 (0) | 2021.11.30 |
---|---|
[JAVA] Generic(제네릭) (0) | 2021.11.15 |
[JAVA] 상속 (0) | 2021.11.11 |
[JAVA] Setter 메소드와 Getter 메소드 (0) | 2021.11.10 |
[JAVA] HashMap (0) | 2021.11.10 |