블로그 이미지
'무른모'란 부드럽다라는 뜻을 가진 '무르다'라는 말과 도구, 연장을 뜻하는 '연모'라는 순 우리말의 합성어로 소프트웨어를 말합니다. seanhigher

카테고리

분류 전체보기 (161)
Blog srart (16)
Dev Center (94)
Real Life (13)
Mac life (21)
Naver life (17)
Total659,138
Today21
Yesterday31
클래스 형태의 데이터 타입을 사용하게 되면 또 하나의 막강한 기능을 사용할 수 있다. 상속을 통한 확장과, 다양한 형변환을 통해, 언제 어떤 형태로든 데이터를 사용하는 것이 가능해 진다. 물론, 변환하고자 하는 데이터형에 알맞아야 한다는 불변의 조건이 있지만...



데이터 형변환하는 캐스팅.
자바의 기본 데이터에서는 캐스팅을 통해 더 큰 형태의 데이터로 형변환을 하는 것이 가능하다. 이것은 클래스를 사용하는 데이터 형에서도 사용이 가능하다. '사람' 이라는 클래스와 이것을 확장하는 '학생' 이라는 클래스 데이터형이 있다면, '학생' 이라는 클래스 데이터는 '사람'이라는 데이터 형태로 형변환이 가능하게 된다.

학생 홍길동 = new 학생();
사람 사람1 = (사람)홍길동;

서로 다른 데이터 형이지만, 동일한 데이터 형으로 취급하여 사용하는 것이 가능하게 된다. 그리고 위에서 만든 홍길동은 '사람' 이외에도 'Object' 형태로의 형변환이 가능한데, 이것은 모든 클래스가 기본적으로 Object 를 상속받아 만들어졌기 때문이다. (자바 API 를 보면 모든 클래스가 Object 를 상속받는 다는 걸 알 수 있다.) 그렇기 때문에 모든 데이터형을 한꺼번에 처리하고자 한다면, 'Object' 의 형태로 데이터를 선언하고 사용하면 될 것이다. 하지만, 그만큼 안정성은 보장하지 못한다는 사실도 기억해야 한다.


강제적인 캐스팅 확인하기, instanceof 연산자.
사실 위와 같이 하위 클래스에서 상위 클래스로의 형변환은 궂이 선언하지 않아도 자동으로 상황에 맞추어 형변환이 이루어진다. 반대로, 하위로 형변환을 하게 될 경우에는 꼭 원하는 데이터 형으로 형변환을 선언해 주어야 한다. 하지만, 이리저리 데이터들이 이동을 하고 자주 형변환이 이루어지는 과정에서 이 데이터가 내가 생각하는 데이터가 맞는지 고민을 하게 되는 경우가 생기기도 한다. 이럴때 사용할 수 있는 것이 instanceof 연산자이다. 이것은 대상 데이터가 비교하고자 하는 데이터 형태로 형변환이 가능한지는 확인해주는 역할을 하게 된다. '사람' 타입으로 변형된 '홍길동' 을 다시 학생으로 돌려놓고 싶은데, 그것이 가능한지 알고 싶다면 다음과 같은 방법을 사용할 수 있다.

if(홍길동 instanceof 학생)
    학생 새홍길동 = (학생)홍길동;

이런 클래스의 형변환은 다양한 데이터를 좀더 효율적으로 사용할 수 있도록 해준다. '사람1' 과 '홍길동' 은 서로 다른 데이터 형으로 만들어 졌지만, 형변환으로 통일된 데이터 형을 가짐으로써 하나의 로직으로 좀더 많은 데이터를 수용하는 것이 가능해지는 것이다.

Posted by seanhigher

댓글을 달아 주세요

최근에 달린 댓글

글 보관함