전체 글 143

Java - 간단한 예외처리 테스트

이 글은 Junit5.8.1, assertj3.21 기준으로 작성되었습니다. 1. assertThrows Assertions.assertThrow는 예상가능한 Exception를 던지고, 그 Exception을 반환합니다. 이 때 예외가 발생하지 않거나 다른 유형의 예외가 발생한다면 메서드는 실패하게 됩니다. 코드로 살펴보면 import static org.junit.jupiter.api.Assertions.assertThrows; @Test void test1( { Assertions.asserThrows(RuntimeException.class, () -> { voyage.test(); }); } 람다식으로 voyage.test() 메서드를 실행하여 첫 인자인 RuntimeException과 같은지 ..

Skills/Java 2022.11.12

우아한테크코스 - 프리코스 2주차 회고

프리코스 2주차의 미션은 숫자야구게임 입니다. 작성한 코드 GitHub - Voyager003/java-baseball: 숫자 야구 게임 미션을 진행하는 저장소 숫자 야구 게임 미션을 진행하는 저장소. Contribute to Voyager003/java-baseball development by creating an account on GitHub. github.com 1. 프로그램 설계 코드 작성 전에 구현 기능목록을 작성하고, commit의 단위를 이 기능 목록에 맞춰서 추가하라는 것을 요구 사항에서 확인할 수 있습니다. 코드를 작성하면서 느낀 것이지만 첫 설계의 중요성을 알 수 있었습니다. 처음부터 완벽하게 목록을 작성하는 것은 힘들겠지만, 그게 가능하다면 구현에만 집중할 수 있어 시간을 아낄 수..

Java - Lambda

이 글은 프리코스 진행 중 람다식의 사용법을 정리하고 작성한 글입니다. 람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수를 지칭하는 용어입니다. 익명 함수라고 하는 이유는 글짜 그대로 함수의 이름이 없는 함수라는 것입니다. 이 익명함수들은 일급객체(First Class Citizen)라는 특성을 지닙니다. 일급 객체는 일반적으로 다룰 객체들에 적용 가능한 연산을 모두 지원하는 개체를 말합니다. 메서드를 값으로 사용할 수도 있으며, 패러미터로 전달하거나 변수에 대입하는 연산들이 가능합니다. 1. 표현식 반환Type 메서드명 = (Parameter)->{구현코드}; Java에서 기본 람다식은 '->'를 기준으로 그 왼쪽에는 람다식을 실행하기 위한 패러미터가 그 오른쪽에는 패러미터를 이용한 구현할 ..

Skills/Java 2022.11.06

우아한테크코스 - 프리코스 1주차 회고

저번주 수요일에 시작한 프리코스 1주차가 마무리되었습니다. 엠바고 느낌으로 글을 안쓰고있다가 1차 미션 제출시간이 지나서 리뷰를 작성해봤습니다. 1주차 미션은 요구사항에 맞게 값을 출력하는 코딩테스트 형식의 문제였습니다. 느낀 바로는 특정 알고리즘 구현보다 데이터를 어떤 자료구조를 이용하여 취급하는지를 확인하는 미션처럼 느꼈습니다. 문제는 총 7문제이며, 특출나게 어려웠던 문제는 없었습니다. 작성했던 코드를 리뷰해보겠습니다. 작성한 코드는 여기서 확인할 수 있습니다. https://github.com/Voyager003/java-onboarding/tree/Voyager003 GitHub - Voyager003/java-onboarding: 온보딩 미션을 진행하는 저장소 온보딩 미션을 진행하는 저장소. ..

Java - Comparable & Comparator

우테코 프리코스 1주차 미션 중, 다중정렬조건을 적용하던 중 Comparator에 대한 이해가 부족하여 정리하고자 작성한 글입니다. 1. Comparable java.lang.Comparable의 인터페이스인 Comparable는 compareTo라는 메서드가 선언되어 있습니다. 이는 인터페이스이기 때문에 Comparable을 사용하려면 compareTo 메서드를 override해줘야 합니다. 하지만! Java 8부터는 인터페이스에서도 일반 메서드를 구현할 수 있도록 변경되었습니다. Comparable은 정렬 수행시 기본적으로 적용되는 정렬 기준이 되는 메서드를 정의해 놓은 인터페이스로 Java에서 제공되는 정렬이 가능한 클래스(Integer, Double, Long 등 내림차순, String 클래스의 ..

Skills/Java 2022.11.01

Java - 인스턴스화를 막으려면 private 생성자를 사용하라

Java로 코드 작성 시, 정적 메서드와 정적 필드만을 담은 클래스를 만드는 경우가 종종 있습니다. 예를 들어, java.lang.Math와 같이 기본 타입 값이나 java.util.Array처럼 배열 관련 메서드를 모아놓을 수 있습니다. 또한 java.util.Collections처럼 특정 인터페이스를 구현하는 객체를 생성하는 정적 메서드를 모아놓을 수 있고, final 클래스와 관련된 메서드를 모아놓을 때 사용합니다. (final 클래스를 상속하여 하위 클래스에 메서드를 넣는 것은 불가능) 하지만 위에서 나열한 정적 멤버만을 담은 utility class는 인스턴스로 만들어 쓰려고 설계한 것이 아닙니다. 정적 멤버만 담은 uility class에 생성자를 명시하지 않으면 JVM이 기본 생성자를 자동으..

Skills/Java 2022.10.30

Java - private 생성자나 열거 타입으로 싱글턴임을 보증하라.

Singleton은 애플리케이션이 실행될 때, 어떤 클래스에 최초 한번만 메모리를 할당하고, 그 메모리에 인스턴스를 만들어 사용하는 패턴입니다. 최초로 한번만 할당했기 때문에 여러번 호출되어도 실제로 생성되는 객체는 하나이며, 최초로 생성된 이후에 호출된 생성자는 이미 생성한 객체를 반환하도록 만듭니다. 1. 장점과 단점 장점이자 사용 이유는 DB에서 커넥션, 스레드풀, 캐시, 로그 등 공통된 객체를 생성해서 사용하는 상황에 최초 한번만 메모리를 할당하기 때문에 메모리 낭비를 방지할 수 있고, 싱글톤으로 구현한 인스턴스는 '전역'이므로 다른 클래스의 인스턴스들이 데이터를 공유하는 것이 가능합니다. 다만 이러한 싱글톤 패턴으로 인스턴스를 생성하게 되면, 싱글톤 인스턴스가 너무 많은 역할을 하게되고 이러한 ..

Skills/Java 2022.10.25

독서 - 쇳밥일지를 읽고

이번에 우아한 테크코스 백엔드 5기에 지원하였는데 이번 주 수요일부터 프리코스가 시작됩니다. 좋은 결과가 있으면 좋겠네요. 10월의 책은 천현우 작가님의 쓴 '쇳밥일지'라는 책입니다. 저자의 학창시절을 시작으로 용접을 업으로 삼게되고 거기에 성찰이 더해진 연대기로 진행됩니다. 저자는 가난한 집에서 태어나 마산의 공고를 졸업하고 전문대학에서 실습을 갔다가 20살에 산재를 당하고, 이후 여러 공장들을 전전하다 용접공으로 살아가지만 어릴적부터 소설가를 꿈꾸며 일기를 열심히 씁니다. 저자가 마주한 세상은 '몰락한 산업 도시의 번잡스러움을 고스란히 전시해둔 장소', 회색 미래로 묘사하는데 저자가 살아온 세상은 썩 밝지 않았음을 보여줍니다. 삶에서 퍼 올린 글 속에서 그는 실패하고 절망했었지만, 그럼에도 불구하고 ..

독서 2022.10.24

Java - 생성자에 매개변수가 많다면 Builder를 고려하라

이펙티브 Java의 2장은 제목과 같이 Builder 패턴에 대해 설명합니다. item 1에서 설명한 생성자와 정적 팩토리 메서드에서는 공통적으로 매개변수가 많다면 대응하기 힘들다는 포인트가 있었습니다. 이를 Builder를 통해 어떻게 개선하는지 패러미터를 어떻게 깔끔하게 처리하는지 알아보겠습니다. 1. 생성자 패턴 Buidler 설명에 앞서, 생성자 패턴의 맹점을 알아보겠습니다. public class Nutrition { private final int calroies; private servings; private final fat; private final int sodium; public Nutrition(int calroies, int servings) { this(calroies, serv..

Skills/Java 2022.10.19

Java - JDBC Transaction

1. Transaction과 Lock 트랜잭션은 DB 상태를 변화시키기 위해 수행하는 작업의 단위로 이전에 작성한 글에서 용어를 정리했었습니다. 간단하게 정리하자면 DB의 상태를 변화(SQL 질의)시키기 위해 수행하는 작업의 완전성을 위해, 작업을 완벽하게 처리하거나 혹은 처리하지 못할 경우에 원 상태로 복구하여 작업의 일부만 적용되지 않도록 해주는 기능을 말합니다. 사용자가 DB에 접근하기 위해서는 Spring의 WAS 서버나 DB 접근 툴(H2 console)과 같은 클라이언트를 통해 DB에 접근할 수 있습니다. 이 때, 클라이언트는 DB 서버에 연결을 요청하고 커넥션을 맺게되는데 DB 서버는 내부에 세션이라는 것을 만들어 모든 요청을 세션을 통해 실행하게 됩니다. 한 세션에서 트랜잭션 처리를 하는 ..

Skills/Java 2022.10.18