나를 기록하다
article thumbnail
[우아한테크코스 웹 백엔드] 2주차 - 자동차 경주

정신없던 우아한테크코스 1주차 미션이 끝나고 2주차 미션으로 자동차 경주를 안내받았다. 이전 과제들을 풀어본 경험이 없기에 새로운 마음으로 처음 구현해보는 내용이었다. 1주차 미션에서 피드백으로 받았었던 매직 넘버의 상수화, 메서드명 줄여쓰지 않기, 일급 컬렉션 적용, 중복 로직 제거를 적용하고자 노력하였고, 내가 부족했던 부분인 스트림과 람다를 공부하기 위해 각종 레퍼런스를 참고하며 공부하였으며 현재는 모던 자바 인 액션을 읽고 있다. 이번 회고에는 내가 2주차 미션을 수행하면서 하였던 고민과 구현 과정에 대해 상세히 기록하고자 한다. 요구사항 초간단 자동차 경주 게임을 구현한다. - 주어진 횟수 동안 n대의 자동차는 전진 또는 멈출 수 있다.각 자동차에 이름을 부여할 수 있다. - 전진하는 자동차를 ..

article thumbnail
[JUnit - 1] Junit 5란 무엇인가? (어노테이션, 정의, 테스트 클래스와 메서드)
Java 2023. 11. 1. 15:20

우아한테크코스의 프리코스를 진행하며 테스트의 중요성을 계속해서 느끼고 있다. 프리코스를 경험하기 전까지 테스트 코드에 전혀 무지했기에 자바 진영에서 가장 많이 사용되는 Junit, 그리고 그중에서 최신 버전인 Junit5에 대해서 정리하고자 한다. JUnit 5란 무엇인가? 공식 홈페이지를 살펴보면 아래와 같이 설명한다. 해석하자면 아래와 같다. Junit5는 세 가지 하위 프로젝트의 여러 모듈로 구성되어 있다. Junit 5 = Junit Platform + Junit Jupiter + Junit Vintage Junit Platform JVM에서 테스트 프레임워크를 실행하기 위한 기반 역할 플랫폼에서 실행되는 테스트 프레임워크를 개발하기 위한 TestEngine API를 정의 콘솔 런처를 제공하여 플..

article thumbnail
[모던 자바 인 액션] 자바의 변화(8 ~ 11)
Java/모던 자바 인 액션 2023. 10. 31. 19:29

자바 8 등장 전과 후 과거의 코드 Collections.sort(inventory, new Compartor() { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); } }); 자바 8을 이용한 자연어에 더 가까운 코드 inventory.sort(comparing(Apple::getWeight)); 자바 8이 제공하는 새로운 기술들 스트림 API 메서드에 코드를 전달하는 기법 인터페이스의 디폴트 메서드 자바 8은 병렬 연산을 지원하는 스트림이라는 새로운 API를 제공한다. 데이터베이스 질의 언어에서 고수준 언어로 원하는 동작을 표현하면, 구현(자바에서는 스트림 라이브러리가 이 역할을 수행)에서..

article thumbnail
[Effective Java 3/E] 7. 다 쓴 객체 참조를 해제하라
Review/Book 2023. 10. 30. 20:00

가비지 컬렉터가 있더라도 메모리 관리를 해야 한다 [예시] 스택을 간단히 구현한 코드 메모리 누수가 일어나는 위치는 어디인가? public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(); elements[size++] = e; } public Object pop() { if (size == 0) { throw new EmptyStackExc..

article thumbnail
[Effective Java 3/E] 6. 불필요한 객체 생성을 피해라
Review/Book 2023. 10. 30. 19:00

불필요한 객체 생성을 파하라 String s = new String("bikini"); 이 문장은 실행될 때마다 String 인스턴스를 새로 만듦 → 반복문이나 자주 호출되는 메서드 안에 있다면 쓸데없는 String 클래스가 수백만 개 만들어질 수도 있다. String s = "bikini"; 이 코드는 하나의 String 인스턴스를 사용한다. 이 방식을 사용한다면 같은 가상 머신 안에서 이와 똑같은 문자열 리터럴을 사용하는 모든 코드가 같은 객체를 재사용함이 보장된다. 생성자 대신 정적 팩토리 메서드(아이템 1)를 제공하는 불변 클래스에서는 정적 팩토리 메서드를 사용해 불필요한 객체 생성을 피할 수 있다. Boolean(String) 생성자 대신 Boolean.valueOf(String) 팩토리 메서드..

article thumbnail
[Effective Java 3/E] 5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
Review/Book 2023. 10. 30. 18:17

[예시] 정적 유틸리티의 잘못된 사용 public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() {} // 객체 생성 방지 public static boolean isValid(String word) {...} public static List suggestions(String typo) {...} } 비슷하게 싱글턴(아이템 3)으로 구현하는 경우도 흔하다. [예시] 싱글턴의 잘못된 사용 public class SpellChecker { private final Lexicon dictionary = ...; private SpellChecker(...) {} public static Spe..

profile on loading

Loading...