🌱 Spring JDBC 사용 전 이해하기
·
Back-End/Spring
JDBC란?JDBC (Java DataBase Connectivity)Java 표준 API로 , SQL 쿼리를 실행하고 결과를 가져오는 등의 데이터베이스 관련 작업을 수행하도록 하는 인터페이스와 클래스들의 집합Java를 사용하여 DB와 상호작용하기 위해 가장 오래 & 널리 사용된 Java의 표준 API이다.JDBC만 사용하여 데이터베이스와 상호작용하는 것은 가능하지만, 다음과 같은 문제점이 생긴다.예외처리가 번거롭다. SQLException 예외 처리를 위해 Try-Catch 블록을 여러 곳에 작성해야 한다.Connection, Statement, ResultSet 객체를 사용한 뒤 반드시 close() 메서드를 호출하여야 한다. 이처럼 자원 누수를 방지하기 위해 많은 자원 관리 코드를 작성해야 한다.쿼..
📖 Servlet 이해하기
·
Web
Web ServerHTTP 기반으로 동작하며 정적 리소스를 제공한다.대표적인 웹 서버ApacheNGINX등등WAS (Web Application Server)웹 서버의 기능에 + DB 조회를 포함하여 다양한 로직에 대한 처리를 함께 한다. 추가적인 코드 실행을 통해 어플리케이션 로직을 수행하고 동적 컨텐츠를 생성한다.대표적인 WASApache Tomcat (Spring Boot에 내장)Eclipse Jetty등등실제 웹 시스템 구성 (Web Server과 WAS의 관계)정적 데이터에 대한 요청은 Web Server에서 바로 처리하여 응답한다.ex) 요청 경로가 `/public/images/logo.png` -> 정적 리소스로 처리, 바로 응답그 외의 경우 Web Server가 Http Request를 W..
키오스크 과제 : 장바구니 구현기 (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 | 베이..
[MYSQL] DATE 데이터 다루기
·
Database
지정 형식으로 문자열 반환DATE_FORMATDATE_FORMAT(컬럼명, 형식) : 지정한 형식대로 구성된 `문자열`을 반환한다.형식 예시 : `'%Y-%m-%d'` -> `2000-06-20`기호 %Y4자리 년도%y2자리 년도%M영문 월%m숫자 월 (2자리)%c숫자 월 (한 자리 수는 한 자리로)%d일 (2자리)%e일 (한 자리 수는 한 자리로)%W긴 요일 이름 (ex. MONDAY)%a짧은 요일 이름 (ex. MON) 년/월/일 정수로 반환원하는 날짜 데이터를 뽑아 `정수`로 반환한다.YEAR(컬럼명)년도 반환MONTH(컬럼명)월 반환DAY(컬럼명)일 반환
🧐 계산기 과제를 마무리하는데 생겨난 궁금증
·
TIL
Generics의 사용Generics를 사용해서 기존엔 int였던 피연산자 타입을 double로도 받아올 수 있도록 하는 것이 Lv.3의 요구사항 중 하나였다.내가 구현한 내용은 다음과 같다.public class ArithmeticCalculator { private final List result = new LinkedList(); public Double calculate(T firstNum, T secondNum, String operator) { double result = OperatorType.fromSymbol(operator).operate(firstNum,secondNum); setResult(result); return result; ..
[프로그래머스] Lv.2 시소 짝꿍 (Java)
·
알고리즘/문제 풀이
문제https://school.programmers.co.kr/learn/courses/30/lessons/152996 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이이진탐색 이용 우선 몸무게를 오름차순으로 정렬한다.이제 몸무게가 a,b (a2a = 2b (즉 몸무게가 같은 경우, a=b)문제 조건에 의해 시소의 1(m)거리 지점에 앉을 수 없으므로 2a = 2b라고 나타낸 것이다.2a = b3a = 2b4a = 3bweights 배열을 오름차순으로 정렬한 뒤 weights[i]를 하나씩 방문하고, i보다 큰 j에 대해서 weights[i]와 시소 짝꿍이 되는 경우의 수를 만족하는 weights[j..
계산기 과제 : 계산 결과 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..