상속과 다형성을 이용한 클래스

hyunn·2021년 8월 5일
0

Java-basic

목록 보기
20/26
post-thumbnail

다형성 Polymorphism

장점

상속과 다형성을 잘 이용하면 if else 문이 필요없어진다

SOLID원칙

O || OCP 개방-폐쇄 원칙 (Open/closed principle) || “소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.”

개방 - 확장성

폐쇄 - 수정불가

예시 - 피자

피자 - 치즈피자, 수퍼수프림피자, ...

만약 ㅁ-ㅁ-ㅁ 이런 구조로 피자 종류마다 상속하면?
-> 종류 추가될때마다 클래스 생겨야함 => XXXX

Pizza 클래스 선언 -> 피자 종류 인스턴스화

public void ~~~(Pizza pizza) {

pizza.makePizza()

}

일반화 Generalization

공통의 속성을 뽑아서 부모클래스화

Ex. Scanner

상속 특징

  • 아무때나 쓰지XX -> if~else / kind of

  • 처음부터 사용XX

Store Program

  1. 메뉴이름 -> 일치 가게

  2. 현재위치 -> 가장 가까운 가게

추상화와 상속

  • 상속 - 공통의 코드를 뽑아서 부모쪽 클래스화

  • 추상 - 다른코드를 추상메서드화 -> common OR abstract




상속 예시 FindStore

public class Ex1 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.println("하고싶은 일은..");

        String oper = scanner.nextLine();

        switch (oper) {
            case "1":
                System.out.println("메뉴이름?");
                String menuName = scanner.nextLine();

                break;

            case "2":
                System.out.println("현재 위도?");
                double lat = Double.parseDouble(scanner.nextLine());
                System.out.println("현재 경도?");
                double lng = Double.parseDouble(scanner.nextLine());

                break;
        }
    }
}

switch를 쪼개고싶은데 Scanner를 상속받아야해 -> How??
쪼개면 클래스 2개 나온다

  • findMenuUI
  • findPositionUI

Scanner는 공통

공통의 코드를 부모쪽으로 몰아주기 -> "상속"



수정 전

public class FindMenuUI {

	Scanner scanner = new Scanner(System.in);
	
    public void find() {

	}
}
public class FindPositionUI {

	Scanner scanner = new Scanner(System.in);
	
    public void find() {

	}
}

수정 후

공통되는 입출력문 뽑아내기

//일반화된 코드들 몰아주기 -> Generalization
public class AbstractMenuUI {

    protected Scanner scanner; //접근제한자

    //String msg로 질문
    //return으로 대답 입력받기
    public String readLine(String msg) {
        System.out.println(msg);
        return scanner.nextLine();
    }

    public double readDouble(String msg) {
        return Double.parseDouble(this.readLine(msg));
    }
}
public class FindMenuUI extends AbstractMenuUI {

    public void find() {

        String menuName = readLine("어떤메뉴?");

    }
}
public class FindPositionUI extends AbstractMenuUI{

    public void find() {

        double lat = readDouble("위도는?");
        double lng = readDouble("경도는?");

    }
}

0개의 댓글

관련 채용 정보