일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알버트
- albert
- R
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- 패스트캠퍼스후기
- AI
- 직장인자기계발
- SKT
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- 직장인인강
- 패스트캠퍼스
- 패캠챌린지
- Today
- Total
제주 탈출 일지
패스트캠퍼스 챌린지 18일차 본문
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();
}
}
실행결과
코드에 대한 설명은 따로 하진 않겠다.
한번 확인하면 될듯?
오늘은 여기까지만....
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
The RED : 김영하 작가의 내 안의 숨은 이야기를 찾아 쓰는 법 | 패스트캠퍼스
대중이 사랑하는 이 시대의 작가 김영하, 그가 전하는 글쓰기와 스토리텔링 기법 패캠에서 최초공개합니다.
fastcampus.co.kr
'패스트캠퍼스 챌린지!' 카테고리의 다른 글
패스트캠퍼스 챌린지 20일차 (0) | 2021.09.25 |
---|---|
패스트캠퍼스 챌린지 19일차 (0) | 2021.09.24 |
패스트캠퍼스 챌린지 17일차 (0) | 2021.09.22 |
패스트캠퍼스 챌린지 16일차 (0) | 2021.09.21 |
패스트캠퍼스 챌린지 15일차 (0) | 2021.09.20 |