[TIL] OOP 실습(카페 만들기)

조성현·2022년 11월 21일
1

Today I Learned [요약]

1. 알고리즘으로 뇌를 깨웠다. (벨로그 글 링크)

  • 예전에 어렴풋이 봤다가 일보 후퇴했던 카카오 채용연계형 인턴십 문제를 풀었다.
    객관적으로 어려운 문제는 아니었지만, 무언가 발전하고 있음을 느끼는 기분이 좋았다.

2. OOP에 대한 글을 수정했다. (왜 OOP인가[1] 링크)

  • 오늘도 아침부터 OOP 라이브 특강을 들으며 느낀점들을 정리하고,
    지난주 금요일에 작성했던 OOP에 관한 글을 조금 더 발전시켰다.
  • 내일 마지막 OOP 라이브를 들은 뒤 왜 OOP인가 시리즈를 마무리 지어야겠다.

3. OOP 강의의 과제(카페 구현하기)를 하며 이론적인 개념들을 코드에 적용해보고 있다.

  • 기획단계는 스무스하게 진행했지만, 기획을 코드에 녹여내는 과정이 생각보다 쉽지 않았다.
  • 기획안의 시나리오를 따라 틀을 잡고, 코드의 디테일을 구글링을 통해 채워가며
    초안의 초안의 초안정도를 완성했다.
  • 중요한 것은 꺾이지 않는 마음!
    drx의 마인드셋을 가지고 계속 전진해야겠다. (자세한 내용은 TIL 상세에서 계속)

Today I Learned [상세]

OOP 강의 과제 - 카페 구현하기

풀이과정

1. 일단 기획부터 시작!

가장 먼저 과제의 추가 요구기능까지 포함한 큰~~ 틀을 잡았다.

다음으로, 최소 요구사항 구현을 위한 시나리오를 작성했다.

  • 보안을 위해 글씨를 최대한 악필로 작성했다. (아무튼 그렇습니다... 예.. 악필입니다..)

2. 시나리오를 따라 코드의 디테일을 하나씩 구현해나갔다.

  • 추가기능 구현을 위한 아이디어들은 일단 주석으로 작성해두었다.
    (나중에 주석 참고하여 구현하고 주석삭제하는 방식으로 진행)
// main.java 
package org.example;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Customer.getMenu();
        Scanner sc = new Scanner(System.in);
        System.out.println("원하시는 메뉴를 입력하세요");
        String drink = sc.nextLine();
        System.out.println("현재 보유 현금을 순순히 부세요");
        int money = sc.nextInt();

        Customer seonghyun = new Customer(money, drink);
        seonghyun.orderDrink();
    }
}
// Cafe.java 
package org.example;
import java.util.Arrays;

public class Cafe {
    private int totalSales;
    private static String[][] menu = {{"아이스아메리카노", "1000"}, {"라떼", "1500"}, {"밀크티", "2000"}, {"밀크쉐이크", "3000"}, {"캐모마일", "4000"}};

    public void addSales(int sales) {
        this.totalSales += sales;
    }
    public int getTotalSales() {
        return totalSales;
    }
    public static String menuReturn() {
        return Arrays.deepToString(menu);
    }
}
// Customer.java 
package org.example;

public class Customer {
    private int money;
    private static String drink;

    public static void getMenu() {
        System.out.println(Cafe.menuReturn());
    }
    public void orderDrink() {
        System.out.println("직원에게 " + drink + "를 주문했습니다.");
        Employee.getOrder(drink);
//        직원.getOrder >> 직원한테 전달하는거
//        if(money < 카페 메뉴의 가격 ){
//            프린트(너는 주문할 돈이 없다 이놈아)
//    } else {
//        money -= 카페메뉴의 가격
//    }
    }
    public Customer(int money, String drink){
        this.money = money;
        this.drink = drink;
        System.out.println(drink);
        System.out.println(money);
    }
}
// Employee.java 
package org.example;

public class Employee {
    public static void getOrder(String drink){
        System.out.println("직원: 주문하신 " + drink + "나왔습니다. ");
    }
}

3. 초안의 초안의 초안 - 결과물

일단 작동하는 코드를 완성했음에 의의를 두고 싶다.

  • 사실 작동하는 척(?) 하는 코드라고 보는게 맞다.
  • 내일 코드의 내실을 채워, 최소 요구사항에 맞게 제대로 작동하는 코드를 완성하고,
  • 그 다음에 추가 요구사항들도 만족하는 코드를 작성하는 것을 목표로 갈 예정이다.
    (수요일부터 진행되는 프로젝트의 선행학습 차원에서 할 수 있는 모든 것들을 도전해보고자 한다.)

4. 해당 과정에서 참고한 자료들

  • [Java] 2차원 배열 값 출력하는 2가지 방법 (반복문, Arrays 클래스) [링크]

  • [java]사용자로 부터 값 입력받기, Scanner [링크]

profile
맛있는 음식과 여행을 좋아하는 당당한 뚱땡이

2개의 댓글

comment-user-thumbnail
2022년 11월 28일

보안을 위한 악필.... 저도 참고하겠읍니다!

1개의 답글