Casting(형변환)
up casting : 자식 값을 부모 타입으로 형변환
down casting : up casting된 객체를 자식 타입으로 형변환
* 부모 값을 자식 타입으로 형변환 시 오류(메모리가 비어있으면 안된다)
Casting을 사용하는 이유
모든 자식 값을 전달받기 위해서는 동일한 타입의 저장공간으로 받아야 한다.
하지만 자식끼리는 서로 타입이 다르기 때문에 한 번에 전달 받을 수가 없다.
이 때 up casting을 사용하면, 모든 자식이 부모 타입이므로 하나의 저장공간에
모든 자식을 받을 수 있게 된다.
만약 up casting으로 자식 값을 전달받았다면, 자식에서 새롭게 구현한 기능들은
사용할 수 없기 때문에 down casting을 통해서 복구하고 사용한다.
객체 간 타입 비교(instanceof)
a instanceof A : 조건식,
- a 가 A 타입이면 true
- a 가 A 타입이 아니면 false
Casting Test
package castingTest;
public class CastingTask {
public void check(OTT ott) {
if(ott instanceof Animation) {
Animation ani = (Animation) ott;
ani.printSubtitle();
} else if(ott instanceof Drama) {
Drama drama = (Drama) ott;
drama.buyGoods();
} else {
Movie movie = (Movie) ott;
movie.print4D();
}
}
public static void main(String[] args) {
CastingTask ct = new CastingTask();
OTT ott = new Animation();
OTT ott1 = new Drama();
ct.check(ott);
ct.check(ott1);
}
}
Storage class(저장 기억 부류)
Stack | Data영역 |
---|
지역변수, 매개변수 | 전역변수, 정적변수(static) |
초기화 | 직접 자동 |
생명주기 } | new, 프로그램 종료 시 |
전역변수
생성자를 통해 메모리에 할당되며, 객체가 각각 가지고 있는 변수
static 변수(정적변수)
컴파일러를 통해 메모리에 1개 할당되며, 모든 객체가 공유하는 변수
variable Test
![](https://velog.velcdn.com/images/dev-april/post/1df29926-767c-427d-87de-df9a82cd4fec/image.png)
package storageClass;
public class VariableTest {
int money = 10000;
static int money_s = 10000;
void spendMoney() {
money -= 1000;
System.out.println(money);
}
static void spendMoney_s() {
money_s -= 1000;
System.out.println(money_s);
}
}
variable Test2
package storageClass;
public class VariableTest2 {
public static void main(String[] args) {
VariableTest mom = new VariableTest();
VariableTest son = new VariableTest();
mom.spendMoney();
mom.spendMoney();
mom.spendMoney();
mom.spendMoney();
mom = new VariableTest();
mom.spendMoney();
mom.spendMoney();
mom.spendMoney();
mom.spendMoney();
System.out.println("--------------------");
mom.spendMoney_s();
mom.spendMoney_s();
mom.spendMoney_s();
mom.spendMoney_s();
mom = new VariableTest();
mom.spendMoney_s();
mom.spendMoney_s();
mom.spendMoney_s();
System.out.println("--------------------");
mom.money_s = 20000;
System.out.println(mom.money_s);
}
}
![](https://velog.velcdn.com/images/dev-april/post/181400eb-18fb-4694-801e-d3ca21b25f72/image.png)