minghxx.blog
  • 자바의 정석 79~강 캡슐화, 다형성, 참조변수 형변환, instanceof 연산자,
    2023년 08월 06일 00시 47분 45초에 업로드 된 글입니다.
    작성자: 민발자
    728x90

    ch 7-22 캡슐화

    1. 캡슐화와 접근 제어자

    접근 제어자를 사용하는 이유

    - 외부로부터 데이터를 보호하기 위함, 외부에서 직접 접근하는 것을 막고 메서드를 이용 간접 접근을 허용시킴

    - 외부에는 불필요한, 내부적으로 사용되는 부분을 감추기 위해서 사용


    ch 7-23 다형성

    1. 다형성★

    조상 타입 참조 변수로 자손 타입 객체를 다루는 것

    Tv t = new SmartTv();
    // 타입이 불일치하지만 가능
    // 조상 타입 참조변수인 t로 자손 타입 객체 SmartTv를 다룰수 있음
    // 반대인 경우 불가능(자손 타입 참조변수로 조상 타입 객체를 다룰수 없음)

    조상 타입 참조변수로 자손 객체를 다루면 조상 멤버만 사용가능 ex)Tv 5개 SmartTv 7개면 5개 사용가능

     


    ch 7-24~25 참조변수의 형변환

    1. 참조변수의 형변환

    기본형의 형변환처럼 값이 변경되는 것이 아닌 사용할 수 있는 멤버의 갯수를 조절함

    조상 자손 관계의 참조변수는 서로 형변환 가능

    class Car { 4개 멤버 }
    class FireEngine extends Car { 1개 멤버 }
    class Ambulance extends Car { }
    
    FireEngine f = new FireEngine(); // 5개
    
    Car c = (Car)f; // 부모로 형변환 4개
    FireEngine f2 = (FireEngine)c; // 자식으로 형변환 5개
    
    Ambulance a = (Ambulance)f; // 에러 상속관계가 아닌 클래스는 형변환 불가

     

    2. 형변환시 주의사항

    Car c = new Car(); //4개의 멤버
    
    FireEngine f = (FireEngine)c;
    
    f.water(); 
    // 형변환 실행 에러 java.lang.ClassCasrException
    // 컴파일러는 타입이 일치하기때문에 에러 발생 안함
    
    // 형변환을 했어도 객체 자체가 Car이기 때문에
    // 실제로 어떤 객체인지가 중요

     

     

    +) 어려워서 예시로 실행해봄

    class Ex7_7 {
    	public static void main(String args[]) {
    		Car c1 = new Car();
    		Car c2 = new FireEngine();
    		c1.drive(); // 4개 
    		c2.drive(); // 4개 리모컨(참조변수) 자체가 car이기 때문 
    		
    		FireEngine f1 = new FireEngine();
    		f1.drive(); // 5개 리모컨(참조변수) 자체가 FireEngine이기 때문 
    		f1.water(); // 가능
            
    		// 부모 -> 자식 형변환
    		// FireEngine f2 = (FireEngine)new Car(); // 형변환 실행 에러 
    		//f2.drive(); 형변환 실행에러로 불가능
    		
    		// 자식 -> 부모 형변환
    		Car c3 = (Car)f1;
    		c3.drive(); // 4개 객체는 FireEngine 리모컨(참조변수)는 car
    	}
    }
    
    class Car {
    	String color;
    	int door;
    
    	void drive() {
    		System.out.println("drive, Brrrr~");
    	}
    
    	void stop() {	
    		System.out.println("stop!!!");	
    	}
    }
    
    class FireEngine extends Car {
    	void water() {
    		System.out.println("water!!!");
    	}
    }

    ch 7-26 instanceof 연산자

    1. instancof 연산자

    참조변수의 형변환 가능 여부 확인 → 조상과 자신 true 반환

    참조변수를 변경함으로써 사용할 수 있는 멤버의 갯수를 조절하기 위함


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

    1. 다형성의 장점

    • 다형적 매개변수
    • 하나의 배열로 여러 종류 객체 다루기

     

    2. 다형성 정리

    • 조상 타입으로 자식 타입을 다룰 수 있음
    • 참조변수의 형변환(리모컨 바꾸기, 사용가능한 멤버 갯수 조절)
    • instanceof 연산자로 형변환 가능 여부 확인

     

    3. 매개변수의 다형성

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

     

    class Product{
    	int price;
    	int point;
    }
    
    class Tv extends Product {}
    class Computer extends Product {}
    class Audio extends Product {}
    
    class Buyer {
    	int money = 1000;
    	int point = 0;
        
    	// 매개변수를 부모타입으로 넘겨줌 다형성으로 computer, tv, audio 모두 구매 가능
    	void buy(Product p) { 
    		money -= p.price;
    		point += p.point;
    	}
    }

    ch 7-29~30 여러종류 객체를 배열로 다루기

    1. 여러 종류 객체를 배열로 다루기

    조상타입 배열에 자손들의 객체를 담을 수 있음

    // 조상 타입의 배열에 자손들의 객체를 담을 수 있음
    Product p[] = new Product[3];
    p[0] = new Tv();
    p[1] = new Computer();
    p[2] = new Audio();
    728x90
    댓글