Java Casting

alert("april");·2023년 7월 7일
0

java

목록 보기
5/9
post-thumbnail

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 {
// OTT 넷플릭스
//	애니메이션, 영화, 드라마 클래스 선언
//	사용자가 선택한 영상이
//	애니메이션이라면 "자막지원" 기능 사용
//	영화라면 "4D" 기능 사용
//	드라마라면 "굿즈" 기능 사용
	
	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(저장 기억 부류)

StackData영역
지역변수, 매개변수전역변수, 정적변수(static)
초기화직접 자동
생명주기 }new, 프로그램 종료 시
전역변수
	생성자를 통해 메모리에 할당되며, 객체가 각각 가지고 있는 변수
static 변수(정적변수)
	컴파일러를 통해 메모리에 1개 할당되며, 모든 객체가 공유하는 변수

variable Test

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();
		
//		System.out.println(mom.money);
//		mom.spendMoney();
//		
//		System.out.println(son.money);
		
//		System.out.println(mom.money_s);
//		VariableTest.spendMoney_s();
//		
//		System.out.println(son.money_s);
//		System.out.println(VariableTest.money_s);
		
		
//		Integer.parseInt("1");
		
		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);
		
		
	}
}

profile
Slowly but surely

0개의 댓글

관련 채용 정보