Day 29

ChangWoo·2023년 5월 4일
0

자바의 정석

목록 보기
29/71

ch 7-26 instanceof 연산자

instanceof 연산자

참조변수의 형변환 가능여부 확인에 사용. 가능하면 true 반환
1. instanceof 연산자로 확인(형변환 해도 되는지) -> 2. 형변환
형변환 전에 반드시 instanceof로 확인해야 함

Ex) c가 FireEngine의 자손인가를 확인하는 경우
	void dowork(Car c) { // doWork(new Car()); / doWork(new FireEngine()); / doWork(new Ambulanced)); 3문장이 모두 가능 / doWork(new FireEngine());은 Car c = new FireEngine(); doWork(c);와 동일
		if(c instanceof FireEngine) {			// 1. 형변환이 가능한지 확인
        	FireEngine fe = (FireEngine)c;		// 2. 형변환
            fe.water();
            ...
	}
  • 형변환을 하는 이유는 인스턴스의 원래 기능을 모두 사용하려고 Car타입의 리모코인 c로는 water()를 호출할 수 없으니까, 리몬콘을 FireEngine타입으로 바꿔서 water()를 호출
FireEngine fe = new FireEngine();
System.out.println(fe instanceof Object);   		// true
System.out.println(fe instanceof Car);   		// true
System.out.println(fe instanceof FireEngine);   // true
  • FireEngine -> Car -> Object
  • 어떤 타입을 지정했을 때, instanceof 형변환이 가능한지 확인한다.
Object obj = (Object)fe;  // OK	/ Object는 모든 객체의 조상이므로 안 써도 Ok
Car		c  = (Car)fe;	  // OK

instanceof로 형변환이 가능한지 확인 후 형변환을 해야한다.
instanceof는 조상-자손에 관해서는 true를 반환한다.

Q&A

Q. 참조변수의 형변환은 왜 하나요?
A. 참조변수(리모콘)을 변경함으로써 사용할 수 있는 멤버의 갯수를 조절하기 위해서

  • 형변환을 해서 주소값, 객체의 값은 변경되지 않는다.
  • 형변환은 참조변수의 타입만 변경되는 것이다.
    Q2. instanceof연산자는 언제 사용하나요?
    A. 참조변수를 형변환하기 전에 형변환 가능여부를 확인할 때

ch 7-27,28 매개변수의 다형성

매개변수의 다형성

참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있다.

  • 장점 : 1. 다형적 매개변수 2. 하나의 배열로 여러종류 객체 다루기
  • 다형성
    1. 조상타입의 참조변수로 자손 객체 다루기(Tv t = new SamrtTv();)
    2. 참조변수의 형변환 (리모컨 바꾸기 / 사용가능한 멤버갯수 조절)
    3. instanceof연산자(형변환 가능여부 확인)
  • Product는 조상 클래스 / Tv,Computer,Audio는 자손 클래스
  • Buyer가 물건을 구매했을 때를 계산하기 위해 buy라는 메서드를 추가
  • Tv라는 메서드를 추가했으므로 Tv만 들어올 수 있다.
  • Computer와 Audio가 들어오기 위해서는 각각의 메서드를 적어야한다. (= 오버로딩)
  • 오버로딩 = 메서드이름이 같고, 매개변수 타입이 다른 것
  • 그러나, 코드가 중복되고 다수의 데이터가 생길 시 관리하기 힘들어진다.
  • 그래서 Tv 타입이 아닌 조상타입의 Product타입을 사용한다.
  • 그렇게 되면, Product 메서드 하나로 여러 물건을 구입할 수 있게 된다.
  • 다형성에 의해서 조상타입의 참조변수로 자손타입의 객체를 가리킬 수 있게 된다.
  • 메서드 하나로 모든 물건을 살 수 있기 때문에 여러 메서드를 만들지 않아도 된다.
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글