키오스크 과제 : 장바구니 구현기 (HashMap에서 Key의 유일성 판단)
·
TIL
이번 키오스크 과제를 하면서는 설계를 하는 데에 많은 고민을 했다.어떤 클래스를 만들까? 이 클래스가 어떤 역할까지를 맡는 것이 맞을까?어떤 메서드를 만들까? 이 메서드가 어떤 기능까지 수행하는 것이 맞을까?와 같이 역할을 분리하는 데에,특히 사용자와 상호작용 하는 부분과 내부 비즈니스 로직을 어떤 클래스에 어떤 메서드로 분할할 지를 많이 고민했다.또 나의 코드를 읽는 이로 하여금 쉽게 이해할 수 있는 코드를 짜려고 노력을 했다. 결과적으로 시원하게 모든 고민들을 해결했다고 말할 순 없지만(애초에 가능한가?), 고민하면서 전체 코드에 대거 변화가 일어나기도 했다. 일단 구현을 하면서 마주쳤던 고민들과 공부 내용, 해결했던 방법들을 정리해보자.들어가기 앞서 ...우선 필수기능까지 구현한 기존의 프로젝트 구..
키오스크 과제 : Stream 함수에서 인덱스 사용하기
·
TIL
💥 Stream 함수에서 인덱스 사용발단 : forEach() 에서 인덱스 정보가 필요해!`기존에 생성한 Menu의 MenuItem을 조회 할 때 스트림을 사용하여 출력하도록 수정`하라는 요구사항에 맞게, `Menu` class의 `printMenuItems()` 메서드를 변경하고자 하였다.기존 코드 // List에 들어있는 MenuItem을 순차적으로 보여주는 함수 public void printMenuItems() { for(int i=0; i위 함수를 실행하면 다음과 같이 인덱스와 함께 메뉴 아이템의 정보가 출력된다.1. ShackBurger | W 6.9 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거2. SmokeShack | W 8.9 | 베이..
계산기 과제 : 계산 결과 Lambda&Stream 필터링 조회 구현하기
·
TIL
Lv.3 의 구현사항계산기 클래스의 메서드 calculate의 피연산자로 모든 타입의 숫자를 받아올 수 있어야 한다. (int, double, 양수, 음수)enum 으로 연산자 타입을 관리하고 활용한다.계산기에 저장된 연산 결과를 Lambda & Stream을 활용하여 조건에 맞도록 조회하는 메서드를 구현한다.오늘은 어제 1,2를 구현하면서 대강만 짜놨던 3번 요구사항을 세부 구현해보았다.어제는 아래 코드와 같이 메서드를 하나만 추가해놨었다. public void printResultGreaterThan(Number value) { String str = result.stream() .filter(v -> v > value.doubleValue()) ..
추상클래스 vs 인터페이스, 언제 어떤 것을 사용할까?
·
프로그래밍 언어/Java
추상 클래스`class` 앞 `abstract` 키워드 사용추상 메서드를 포함한 클래스그러나 추상 메서드를 포함하지 않더라도 abstract 키워드를 통해 추상 클래스 처리가 가능하다. ( -> 인스턴스 생성 불가하도록 만들 수 있음)기존 클래스처럼 멤버변수와 메서드, 생성자를 가질 수 있음인스턴스를 생성할 수 없음추상 클래스를 상속받는 클래스는모든 추상 메서드를 구현하여 인스턴스 생성이 가능한 `클래스`가 되거나,모든 추상 메서드를 구현하지 않은 경우 `추상 클래스`가 된다.인터페이스오직 `추상 메서드`와 `상수`만을 멤버로 가진다 ( *default/static 메서드 예외 )모든 메서드는 `public abstract`모든 멤버 변수는 `public static final`인스턴스를 생성할 수 없음..
계산기 과제 : Java Generics, Enum 활용기
·
TIL
구현 요구사항Lv.3 의 구현사항은 아래와 같다.계산기 클래스의 메서드 `calculate`의 피연산자로 모든 타입의 숫자를 받아올 수 있어야 한다. (int, double, 양수, 음수)enum 으로 연산자 타입을 관리하고 활용한다.계산기에 저장된 연산 결과를 Lambda & Stream을 활용하여 조건에 맞도록 조회하는 메서드를 구현한다.오늘은 1과 2를 중점적으로 고민하여 구현하였다.Generics  : 피연산자 타입 확장하기먼저 기존 Lv.2의 계산기 클래스이다.기존의 피연산자 입력으로 0을 포함한 양의 정수만을 받아왔기 때문에 `calculate` 메서드의 피연산자 타입이 int로 지정되어있다.결과 값은 double로 지정되어있는데, 피연산자가 모두 정수여도 나누기 연산 시 실수가 될 수 있기 ..
Java Enum 이놈아
·
프로그래밍 언어/Java
오늘은 Java Enum에 대해서 복습해보았다.되게 신기한게 책에 밑줄이 좍좍 그어져 있는데 마치 새로 알게 된 정보처럼 느껴진다는 것이었다.  ㅠㅠ 떵뇌 인간 그렇지만 이번엔 완벽하게 기억할 것만 같은 느낌인데책에 기억에 없는 밑줄을 그었던 순간에도 이렇게 느꼈을지도 ...그럴지도 ...Enum열거형열거형 데이터란, 서로 관련된 상수들을 묶어서 관리하는 틀 역할을 제공하는 것이다.예를 들어서 월 화 수 목 금 토 일의 내용을 상수로 관리하고 싶다면 다음과 같이 정의한다.// enum 열거형이름 { 상수명1, 상수명2, 상수명3, ... }enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDA..
Java의 예외처리 (함수 너 회피형이야?)
·
프로그래밍 언어/Java
오늘은 Java의 예외 처리에 대해 복습을 해 보았다. 예외를 처리하는 방법Java에서 예외를 처리하는 방법은, try-catch문을 사용하는 것이다.예외가 발생할 수 있는 코드, 즉 예외가 발생한다면 처리를 해주고 싶은 부분을 try 블럭으로 감싸준다.그리고 catch 블럭을 이용하여 각 Exception이 발생할 경우를 처리해준다.만일 예외 발생 여부에 상관없이 공통적으로 수행하고 싶은 작업이 있다면, finally 블럭을 추가하여 적어준다.try { // 여기에 쓰인 코드들에서 예외가 발생한다면 // 해당하는 catch문 블럭이 실행된다.} catch (ArithmeticException e) { // ArithmeticException이 발생한 경우} catch (IllegalArgumen..
잠깐 ! JVM 정리하고 갑시다
·
프로그래밍 언어/Java
오늘부터 Java 강의를 듣고 과제를 수행한다.1~3주차 강의의 내용은 아주 기본적인 내용들이었다.몇몇은 건너뛰기도 하고, 1.5배속으로 훑으면서 가물가물한 부분들은 따로 공부를 진행하려고 메모를 해두었다.그리하여 이제 메모한 내용들을 공부할 시간 ... 먼저 JVM에 대해 정리하고 넘어가자   JVM이란?JVM은 Java Virtual Machine의 줄임말로, Java로 짜여진 코드들을 운영체제에서 실행할 수 있도록 만들어주는 가상의 기기(소프트웨어)이다.자바로 작성된 어플리케이션이 컴퓨터에서 동작하기 위해서는 반드시 JVM이 필요하다.일반적인 다른 어플리케이션이 바로 OS와 상호작용하는 것과 달리 자바 어플리케이션은 JVM과 상호작용하며, JVM이 OS와 상호작용하는 역할을 한다.이 때문에 어플리케..
[Java] 문자열(String) 내장 함수 정리
·
프로그래밍 언어/Java
length()문자열의 길이를 반환한다.compareTo()int compareTo(String str)str과 현재 인스턴스의 문자열의 내용을 사전순으로 비교한다.현재 인스턴스가 사전순으로 더 이전이면 음수를, 이후면 양수를, 두 문자열의 내용이 같다면 0을 반환한다. String str1 = "apple"; String str2 = "banana"; System.out.println(str1.compareTo(str2)); // -1 출력chatAt()char chatAt(int index)인스턴스 변수로 가진 char[] value에서 해당 index의 문자를 반환한다.concat()String concat(String str)(..
[Java] 스트림(Stream)
·
프로그래밍 언어/Java
Java에서의 입출력사용자가 키보드로 입력한 문자를 받아와 모니터에 보여주려면 어떻게 해야할까?만약 사용자가 특정 문서를 인쇄하기 위해 인쇄 버튼을 누른다면 이를 프린터를 어떻게 인쇄할까? 이처럼 프로그램에서 데이터를 받아오거나 데이터를 특정 장치에 보내줘야 할 때, 바로 스트림을 이용한다. 위의 경우에서는 키보드로 입력한 문자를 받아올 때 입력 스트림을, 해당 문자를 화면에 나타낼 때 출력 스트림을 이용한다.또 사용자가 인쇄를 요청한 경우에는 인쇄를 담당하는 프로그램이 해당 문서의 내용을 입력 스트림을 통해 받아오며, 출력 스트림을 통해 프린터기로 데이터를 전송한다. 스트림이란 데이터를 교환하려는 두 대상을 연결하고, 데이터를 전송할 수 있는 통로 역할을 한다.Stream의 특징..