본문 바로가기

JAVA

(21)
키오스크에 장바구니 및 구매하기 기능 추가하기 (+반성의 글..) 결론부터 말하자면 이번 과제는 많이 부족했던 것 같다🙈하지만 어쩌겠는가,,, 이미 시간은 지났고 되돌릴 수 없다지금부터 고민했던 점들에 대해서 정리해보도록 하고 다음 프로젝트는 이번 문제점을 고쳐서 발전시키는 방향으로 가자😳😳😳 고민점장바구니 기능을 클래스로 빼는게 맞는지에 대한 고민장바구니기능이 없는 lv5만 구현했을 때까지만 하더라도 Kiosk 클래스는 사용자의 주문에 대한 입출력에 대해서 기능적인 부담이 크지 않다고 생각하지만, 장바구니 요구사항을 보니 내용이 꽤 많았음.. (추가 삭제 조회 등등, + 예외 처리)그렇기 때문에 이 모든 요구사항을 Kiosk에 넣어버리면 코드도 엄청 무거워지고 알아보기가 너무 힘들 것 같다고 생각-> 장바구니와 관련된 역할은 Cart 클래스에서 하기로 결정!p..
키오스크 만들기 : 음식 메뉴와 카테고리를 클래스로 관리하기 고민했던 점1. Kiosk의 start()메서드의 복잡함Kiosk에서 사용자의 입력에 따라서 출력을 보여주는 start()메서드의 로직이 너무 길고 복잡해보여서 개발을 진행하면서도 너무 복잡하고 알아보기가 쉽지 않았음카테고리를 출력하는 부분과, 메뉴를 출력하는 부분을 각각 showCategories(), showMainMenes(Menu menu) 메서드로 분리하여 해결private void showCategories() { System.out.println("[ MAIN MENU ]"); for (int i = 0; i   2. 사용자로부터 적절한 값을 검증하는 부분에 대한 고민화면에 출력되는 부분에서 보여지는 숫자값만을 입력해서 검증하는 부분에서 이를 어떤 식으로 할 지 고민..
객체지향적인 계산기 만들기 : 멘토님 코드와 나의 코드간의 개선점 비교 입출력 멘토님 코드음수 입력시에 재입력을 받도록 처리가 되어 있음if (firstNumber   세이프티 코딩 (Safety Coding) 적용문자열 비교 시 변수에 담지 않고, 해당 문자열 자체로 equals를 사용하여 비교함 -> 세이프티 코딩 (Safety Coding)널은 메서드를 사용하지 못하기 때문에 스트링으로 비교하면 프로그램이 종료됨NullPointerException 방지if ("exit".equals(sc.next())) { break; } 기존에 내가 작성한 코드변수명에 널이 들어갈 수 있기 때문에 위험함String exit = sc.nextLine(); exit = exit.toLowerCase(); ..
제네릭 타입제한과 필드에서의 값 전달 (feat : 계산기 과제) 제네릭 타입 제한제네릭 타입 제한은 클래스, 메서드, 인터페이스 선언 부분에서만 가능함public class Calculator { private final List resultList = new ArrayList(); // T는 Number의 하위 타입} 클래스에서 T의 제한을 걸면, 타입의 제한이 클래스 내부 전체에 걸림public class Calculator { private final List resultList = new ArrayList(); // T는 Number의 하위 타입} -> 지난번에 내가 과제에서 수행했던 것처럼 메서드 수준에서 제네릭 제한을 걸어버리면, results 에 타입을 Number로 지정해서 해결했어야 했음 지난번 짠 코드private List results ..
Enum 및 예외처리를 적용한 계산기 만들기 기존 OperatorType연산자 클래스별로 연산자를 나타내는 char값만 존재함public enum OperatorType { ADD('+'), SUBTRACT('-'), MULTIPLY('*'), DIVIDE('/'); private final char operator; public char getOperator(){ return operator; } OperatorType(char operator) { this.operator = operator; }}public class ArithmeticCalculator { private OperatorType addOperator = OperatorType.ADD; priv..
Lambda & Stream을 이용하여 특정 값보다 큰 값들만 조회하기 LambdaLambda란 인스턴스를 생성하지 않고 작성할 수 있는 익명함수!메서드는 클래스에 포함되어야 하기 때문에 번거로운 제약들이 많음 → 람다의 등장으로 메서드를 변수처럼 다루는 것이 가능 → 람다를 통해서 메서드가 1급 객체가 됨 (이를 통해 자바는 객체지향프로그래밍 뿐만 아닌 함수지향 프로그래밍도 가능)1급객체 : 메서드(함수)를 변수, 인자, 리턴값에 할당 가능한 것람다식은 사실 메서드가 아닌, 익명 클래스의 객체사용법람다의 모든 매개변수 타입은 생략하는 것이 좋음매개변수가 하나라면 괄호도 생략  (a) -> a * a 이 아닌 a -> a * a실체(int a, int b) -> a > b ? a : b; 의 실제 모습은 아래와 같음 즉, 람다식은 익명 클래스의 객체new Objcet() {..
제네릭을 활용한 Double타입 계산이 가능한 계산기 만들기 여러 자료를 보며 내가 이해한 제네릭이란 메서드나 클래스의 타입에 대한 지정을 최초 생성시에 하는 것이 아닌 인스턴스를 만들 때 외부에서 지정해주는 것이었다. 한마디로 핵심은 외부에서 타입을 지정해 준다는 것! 1. 첫번째 시도계산의 결과를 담는 results 배열의 타입을 제네릭으로 지정해주고, 계산을 수행하는 calculate 메서드의 리턴타입과 매개변수 타입을 동일한 제네릭으로 선언Operator ‘+’ cannot be applied to ‘T’, ‘T’ 에러 발생public class A { private ArrayList results = new ArrayList(); public T calculate(T number1, T number2){ results.add(num..
다형성을 이용한 계산기 만들기 - 예외처리 추가 import java.util.Scanner;public class CalculatorApp { public static boolean start() throws Exception { //throws Exception : 위험하다는 표시, 이에 대한 메서드의 예외 처리를 해줘야 함 Parser parser = new Parser(); Scanner scanner = new Scanner(System.in); System.out.println("첫번째 숫자를 입력해주세요!"); String firstInput = scanner.nextLine(); parser.parseFirstNum(firstInput); System.out..