장점
상속과 다형성을 잘 이용하면 if else 문이 필요없어진다
O || OCP 개방-폐쇄 원칙 (Open/closed principle) || “소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.”
개방 - 확장성
폐쇄 - 수정불가
피자 - 치즈피자, 수퍼수프림피자, ...
만약 ㅁ-ㅁ-ㅁ 이런 구조로 피자 종류마다 상속하면?
-> 종류 추가될때마다 클래스 생겨야함 => XXXX
Pizza 클래스 선언 -> 피자 종류 인스턴스화
public void ~~~(Pizza pizza) {
pizza.makePizza()
}
공통의 속성을 뽑아서 부모클래스화
Ex. Scanner
아무때나 쓰지XX -> if~else / kind of
처음부터 사용XX
메뉴이름 -> 일치 가게
현재위치 -> 가장 가까운 가게
상속 - 공통의 코드를 뽑아서 부모쪽 클래스화
추상 - 다른코드를 추상메서드화 -> common OR abstract
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개 나온다
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("경도는?");
}
}