업캐스팅 / 다운캐스팅
업캐스팅 : 자식클래스의 객체를 부모클래스의 객체로 형변환 (묵시적)
String a = "hello";
Object b = a; => 이 경우 데이터의 손실은 없으나 부모클래스에 있는 속성과 메소드만 접근할 수 있다.
=> 업캐스팅 된 상태에서 캐스팅 전 하위 클래스의 메서드를 사용하고 싶다면
상위클래스를 추상클래스로 작성, 하위클래스의 메서드를 추상메서드로 정의해놓자.
추상클래스는 객체만 못만들 뿐 데이터 타입으로 정의 가능하다.
String c = (String)b ; => 원래 b가 가지고 있던 자식클래스의 정보를 다시 사용 가능
데이터 타입의 업캐스팅
int a = 3;
double b = a; => 묵시적으로 형변환이 가능하며 데이터 손실 없음
다운캐스팅 : 부모클래스의 객체를 자식클래스로 형변환(명식적)
Object a = new Object();
String b = (String)a;
데이터타입의 다운캐스팅
double a = 3.3;
int b = (int)a; => 명시적으로 형변환을 해주어야 하며 소수점이하가 버려짐과 같은 데이터 손실 주의
박싱/언박싱
: 데이터는 value(값)형 데이터와 reference(참조)형 데이터로 나뉨.
값형 데이터는 스텍영역에, 참조형 데이터는 힙 영역에 저장되어 사용된다.
박싱 : 값형 데이터를 참조형 데이터로 변환, 즉 스텍영역의 데이터를 힙 영역으로 옮긴다.
묵시적으로 형변환이 가능하며 데이터 손실은 없다.
int a = 3;
Object b = a ; or Integer c = a;
언박싱 : 참조형 데이터를 값형 데이터로 변환, 즉 힙영역의 데이터를 스택영역으로 옮긴다.
박싱 된 참조형 데이터를 다시 값 형 데이터로 되돌리기 위해 사용된다.
int d = (int)b;
결국 메모리 위치를 변화 시켜 가는 박싱과 언박싱은 비용이 많이 든다.
대표적으로 ArrayList 와 같은 object 형 컬렉션에 대량의 값 타입을 넣고 빼고 하여
발생하는 박싱,언박싱은 실제로 많은 속도 저하를 유발하는 원인이기도 하다.
(실제로 닷넷 2.0에서는 박싱,언박싱 (업캐스팅,다운캐스팅)의 비용을 줄이기 위해 지네릭이라는
새로운 개념이 도입되었다)
박싱/언박싱을 사용하는 코드는 런티임 에러를 발생하기 쉬우므로 사용시 주의하도록
직렬화(Serialization) : 객체의 메모리를 통재로 저장할 수 있는 기법.
역직렬(Deserialization) : 저장된 데이터를 이용하여 다시 복원하는 기술.
'~ 2014 > 기본개념' 카테고리의 다른 글
운영체제 스케쥴링 정책 (0) | 2014.06.15 |
---|---|
처리장치 속도 (0) | 2014.06.15 |
RGB 색상 수 (0) | 2014.06.12 |
프로그래밍(절차지향, 객체지향, 모듈) (0) | 2014.06.12 |