티스토리 뷰

day13 190308


강제형변환(Casting), 객체타입확인(InstanceOf), 그리고 클래스의 다이어그램에 대해서

배웠습니다.


<강제형변환> (Casting)

: 부모가 실행시키지 못하는 것(재정의되지 않은 메소드)을 실행할 때.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class TireApp4 {
    public static void main(String[] args) {
        
        Tire t1 = new KumhoSnowTire();
        t1.go();
        //g1.chain();        에러
        //t1.push();        에러
 
        SnowTire t2 = (SnowTire)t1;        // 강제형변환(캐스팅)
        t2.go();
        t2.chain();
        //t2.push();    에러
        ((KumhoSnowTire)t1).push();        // 즉흥적으로 사용할 때 사용한다.
    }
}
cs

>> 9행,12행처럼, 형변환을 할 수 있다.


<객체타입확인> (InstanceOf)

: Casting을 할 수 있는지 확인하기 위해 사용된다.

 ( 자식타입이 부모타입으로 변환되어 있는 상태에서만 가능하기 때문에 확인 필요)

1
2
3
4
5
6
7
8
9
10
public class TireTester {
    public void testTire(SnowTire tire) {
        if ( tire instanceof HankookSnowTire) {
            HankookSnowTire t = (HankookSnowTire) tire ;
            t.melt();
        } else if (tire instanceof KumhoSnowTire) {
            ((KumhoSnowTire) tire).push();
        }
    }
}
cs

>> 위 처럼 Instanceof키워드를 사용하여 형변환이 가능한지 만들고,


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class TireTesterApp {
    public static void main(String[] args) {
        
        TireTester tester = new TireTester();
 
        Tire t1 = new Tire();
        //tester.testTire(t1);    에러! testTire(SnowTire tire)메소드는 SnowTire류 객체만 전달받을 수 있다.
 
        KumhoSnowTire t2 = new KumhoSnowTire();
        tester.testTire(t2);
 
        HankookSnowTire t3 = new HankookSnowTire();
        tester.testTire(t3);
    }
}
cs

>> 7행의 주석처리를 없애고, 컴파일해보면 오류가 나는 것을 볼 수 있다.


<클래스 다이어그램>

- 상속관계, 의존관계, 포함관계, 구현관계 등의 클래스간의 관계를 그림으로 약속지어 만들어놓은 것.

http://www.nextree.co.kr/ 에 용어 설명이 잘되어있으므로 참조. )

(출처 : http://www.nextree.co.kr/p6753/)



Casting과 instancOf가 자주 사용되지는 않지만, 때때로 사용될 때가 있다고 합니다. 

숙지해두는 편이 좋을 것 같습니다.

day13.zip



댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
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
31
글 보관함