제주 탈출 일지

패스트캠퍼스 챌린지 18일차 본문

패스트캠퍼스 챌린지!

패스트캠퍼스 챌린지 18일차

귀건 2021. 9. 23. 23:31
728x90
반응형

 

18일차 ㄱㄱ

 

07. 상속은 언제 사용 할까? 

is-a 관계

일반적인 개념과 구체적인 개념과의 관계

상위 클래스 : 하위 클래스보다 일반적인 개념 ( ex . Employee)

하위 클래스 : 상위 클래스보다 구체적인 개념들이 더해짐 ( ex. Engineer, Manager...)

 

상속은 클래스간 결합도가 높은 설계

계층구조가 복잡하거나 hierachy가 높으면 좋지 않다.

 

has-a 관계

클래스가 다른 클래스를 포함하는 관계

Student가 Subject를 포함하는

Library를 구현할 때 ArrayList를 생성하여 사용한다.

상속을 하지 않는다.

 

08. 다운 캐스팅과 instanceof

인스턴스가 업캐스팅되었다가 원래 변수형으로 다시 형변환하는 것을 다운 캐스팅이라고 한다.

다운 캐스팅은 명시적으로 이루어져야 한다.

Customer vc = new VIPCustomer(); //묵시적

VIPCustomer vCustomer = (VIPCustomer) vc ; // 명시적

 

 

intanceof 형을 이용하여 인스턴스의 형을 체크할 수 있다.

if (customerE instanceof GoldCustomer) {
GoldCustomer vc = (GoldCustomer)customerE;
System.out.println(customerE.showCustomerInfo());
}

 

AnimalTest 이전 예제에서 Human의 readBook(), Tiger의 hunting(), Eagle의 flying()은 업캐스팅 된 이후에 사용할 수 없었다.(상속받은 이후 재정의되지 않은 하위 클래스의 메소드이기 때문에)

이 것을 다운캐스팅하여 사용하였다.

 

public void testDownCasting(ArrayList<Animal> list) {
		
		for(int i = 0; i < list.size(); i++) {
			Animal animal = list.get(i);
			
			if (animal instanceof Human) {
				Human human = (Human)animal;
				human.readBook();
			}
			
			else if (animal instanceof Tiger) {
				Tiger tiger = (Tiger)animal;
				tiger.hunting();
			}
			
			else if (animal instanceof Eagle) {
				Eagle eagle = (Eagle)animal;
				eagle.flying();
			}
		}
		
	}

업캐스팅 된 Animal들이 들어있는 ArrayList를 받아 instanceof로 검사한다. 그 후 animal을 맞는 클래스로 명시적 형변환 하여 각 메소드들을 사용한다. 결과는 다음과 같이 나온다.

 

09. 추상 클래스(abstract class) 구현하기

추상클래스의 반대 개념 : concrete class(구체적 클래스)

 

int add(int x, int y); 와 같은 메소드 형태는 구현부가 존재 하지 않는 추상 메소드이다.

추상 클래스는 추상 메소드를 포함한 클래스를 의미한다.

 

추상 클래스에서는 공통으로 사용할 메소드는 구현하고, 아직 어떻게 사용할 지 모르는 메소드들은 추상 메소드로 놔둔채 하위 클래스에게 책임을 떠넘기는 형식이다. 그러면 하위클래스가 추상메소드를 자신에게 맞도록 구현해서 사용할 수 있다.

(추상클래스는 상속을 위한 클래스이다.)

 

예제 구조

 

(abstract)Computer <- Desktop

                          <- (abstract)Notebook <- MyNoteBook

 

Computer 클래스

package ch09;

public abstract class Computer {
	
	public abstract void display();
	public abstract void typing();
	
	public void turnOn() {
		System.out.println("전원을 킵니다.");
		
	}
	
	public void turnOff() {
		System.out.println("전원을 끕니다.");
	}

}

이 컴퓨터 클래스는 display와 typing이 구현되어 있지 않다. 그래서 이 클래스는 인스턴스를 생성할 수 없다. 

 

Desktop 클래스

package ch09;

public class Desktop extends Computer {

	@Override
	public void display() {
		System.out.println("Desktop display");
		
	}

	@Override
	public void typing() {
		System.out.println("Desktop typing");
	}

	@Override
	public void turnOff() {
		
		System.out.println("Desktop TurnOff");
	}
	
	

}

 

Notebook 클래스

package ch09;

public abstract class NoteBook extends Computer {

	@Override
	public void typing() {
		System.out.println("NoteBook typing");
	}

}

 

MyNoteBook 클래스

package ch09;

public class MyNoteBook extends NoteBook {

	@Override
	public void display() {
		// TODO Auto-generated method stub
		System.out.println("MyNoteBook display");
	}

}

 

ComputerTest 클래스

package ch09;

public class ComputerTest {

	public static void main(String[] args) {
		
		Computer desktop = new Desktop();
		//Computer computer = new Computer(); // 추상클래스는 생성할 수 없다!
		desktop.turnOff();
		desktop.display();
		
	}

}

 

실행결과

코드에 대한 설명은 따로 하진 않겠다.

한번 확인하면 될듯?

 

오늘은 여기까지만....

 

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/37BpXiC

 

The RED : 김영하 작가의 내 안의 숨은 이야기를 찾아 쓰는 법 | 패스트캠퍼스

대중이 사랑하는 이 시대의 작가 김영하, 그가 전하는 글쓰기와 스토리텔링 기법 패캠에서 최초공개합니다.

fastcampus.co.kr

 

728x90
반응형
Comments