강의 내용
[1] 동작 측면에서 클래스 설계하기
[2] 상속 관계에서 객체 생성 방법
[1] 동작 측면에서 클래스 설계하기
클래스의 행위(동작) 정보를 중심으로 클래스와 클래스를 설계(상속)하는 방법
부모 클래스의 동작을 하위 클래스에게 상속하면 하위 클래스도 부모의 행위 정보를 사용할 수 있게 된다.
클래스를 동작하는 측면에서 바라보는 상속(수평적 구조 설계)
비슷한 성격을 갖는 객체는 중복되는 동작이 나오게 될 확률이 높음(공통 분모)
(1) 코드의 중복
(2) 유지 보수의 어려움(새로운 요구사항이 발생되면 모든 클래스를 수정해야 함)
(3) 확장성 저하
Q. Dog와 Cat클래스를 설계하고 동작시켜 보시오.
Dog 클래스와 Cat 클래스는 개와 고양이를 객체화 한 것이므로 동물이라는 공통 분모가 나오게 된다.
public class Dog { public void eat() { // 공통 분모 System.out.println("개처럼 먹다."); } }
public class Cat { public void eat() { // 공통 분모 System.out.println("고양이처럼 먹다."); } public void night() { System.out.println("밤에 눈에서 빛이 난다."); } }
public class DogCatTest { public static void main(String[] args) { // Dog [객체를 생성]한 후 eat() 동작을 구동하시오. Dog d = new Dog(); d.eat(); // Cat [객체를 생성]한 후 eat(), night() 동작을 구동하시오. Cat c = new Cat(); c.eat(); c.night(); } }
클래스를 동작하는 측면에서 바라보는 상속(수직적 구조 설계)
중복되는 부분을 부모의 클래스로 빼놓음으로써 중복되는 코드를 없앨 수 있다.
자식 클래스가 부모 클래스를 상속 받으면 자신의 기능 + 부모의 기능까지 사용 가능(확장, 재활용)
Q. Dog와 Cat클래스를 설계하고 동작시켜 보시오.
public class Animal { // 동물 : 개와 고양이를 포괄 public void eat() { System.out.println("동물처럼 먹다."); } }
public class Dog extends Animal { // eat() }
public class Cat extends Animal { // eat() public void night() { System.out.println("밤에 눈에서 빛이 난다."); } }
public class DogCatTest { public static void main(String[] args) { // Dog [객체를 생성]한 후 eat() 동작을 구동하시오. Dog d = new Dog(); d.eat(); // Cat [객체를 생성]한 후 eat(), night() 동작을 구동하시오. Cat c = new Cat(); c.eat(); c.night(); } }
[2] 상속 관계에서 객체 생성 방법
상속 구조를 왜 사용해야 할까?(동작 측면)
(1) 직접 설계한 클래스를 사용하는 경우 : 클래스안에 어떤 동작이 있는지 알 수 있음
(2) 다른 사람이 설계한 클래스를 사용하는 경우 : 클래스안에 어떤 동작이 있는지 알 수 없음
UpCasting(업캐스팅)
부모가 자식을 가리키는 객체 생성 방법(부모를 통해 자식을 구동하는 방법)
자식의 객체를 부모의 타입으로 받음(타입이 다르지만 상속 관계이므로 가능)
자식의 동작을 알 수 없을 때는 부모 타입으로 객체를 생성할 수 밖에 없음
UpCasting(업캐스팅)의 필요성
일반적으로 코드를 받을 때는 완성된 파일(*class, 컴파일된 코드)만 받게 된다.
사용 방법을 클래스를 만든 사람은 알지만, 사용하는 사람은 모르기 때문에
클래스를 구동시킬 중간 역할을 할 별도의 클래스를 만들어 사용해야 함
예) 사람(사용자) → 리모컨(부모) → TV(자식)
사람은 TV의 동작 방식을 몰라도 리모컨을 통해 언제든 TV를 구동시킬 수 있다.
클래스를 TV(자식) - 리모콘(부모) 관계로 설계하여 배포해야 함
Q. Dog와 Cat클래스를 설계하고 동작시켜 보시오.
public class DogCatUpcastingTest { public static void main(String[] args) { // Upcasting(업캐스팅) : 부모가 자식을 가리킴 Animal an = new Dog(); an.eat(); an = new Cat(); an.eat(); } }
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://bit.ly/48sS29N