개발/Java

    [Java] 데이터 타입, 변수

    [Java] 데이터 타입, 변수

    작년 백기선님의 자바 스터디를 참여했던 포스팅에서 약간 수정하여 포스팅중입니다. (추후 작성할 포스팅에 보조 설명 링크를 첨부하기 위해) 지금은 끝났지만 목차는 남아있기 때문에 자바를 공부를 하시는 분들은 깃헙 이슈에서 목차를 확인할 수 있습니다. https://github.com/whiteship/live-study GitHub - whiteship/live-study: 온라인 스터디 온라인 스터디. Contribute to whiteship/live-study development by creating an account on GitHub. github.com Primitive type 종류와 값의 범위 그리고 기본 값 The Java programming language is statically-t..

    [Java] 제네릭

    [Java] 제네릭

    제네릭 제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능입니다. 왜 제네릭을 사용해야 하는가? 제네릭 타입을 이용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있습니다. 제네릭은 클래스와 인터페이스, 메서드를 정의할 때 타입(type)을 파라미터(parameter)로 사용할 수 있도록 해줍니다. ArrayList를 생성 시 제네릭을 사용하지 않고 생성을 했을 때 문제점을 찾아보겠습니다. List list = new ArrayList(); list.add(1); list.add(2); list.add(3); int index1 = (int)list.get(0); int index2 = (int)list.get(1); int in..

    [JUnit] @ParameterizedTest - @MethodSource 사용하기

    [JUnit] @ParameterizedTest - @MethodSource 사용하기

    들어가며 이전에 'Parameterized Test - 테스트를 효율적으로'라는 글을 올렸었는데 전부 학습한 내용이 아니라서 이번에 사용한 기능을 추가로 포스팅하려고 합니다. 이전에 다뤘던 테스트는 클래스, 문자열, 기본 타입, Enum, Csv를 사용한 테스트였습니다. 하지만 좀 더 복잡한 객체들을 파라미터로 테스트할 수 있는 방법이 있습니다. 테스트 코드를 예시로 보면서 설명하겠습니다. 로또 번호를 맞추는 테스트이고 맞힌 숫자에 따라 등수를 반환합니다. (실제 로또와 같은 원리로 동작하는 코드입니다.) private static final Number BONUS = new Number(7); private static final Lotto LOTTO = new Lotto(givenNumbers(1, ..

    [Java] package, import

    [Java] package, import

    👨‍💻 package 키워드 패키지란 폴더 또는 디렉터리를 의미한다. 자바에서 패키지란 관련된 인터페이스나 클래스를 적절히 배치할 수 있도록 만든 폴더 또는 디렉터리 API에서 제공되는 많은 클래스들이 패키지화되어 제공되고 있다. 자바 소스 파일에서 이 파일의 클래스나 클래스들이 속하는 패키지는 package와 함께 지정된다. 이 키워드는 일반적으로 소스 파일에서 처음 오는 키워드이다. 하나의 패키지 선언을 소스 파일에 선언할 때에는 다음과 같이 할 수 있다. package java.awt.event; 패키지 안에는 같은 이름의 클래스를 사용할 수 없으며 패키지가 다르면 상관없다. 패키지명은 관례에 따라 소문자로 작성한다. 그 외에도 몇 가지 규칙이 존재한다. 숫자로 시작할 수 없다. _ $ 문자를 제외..

    [JUnit] Parameterized Test - 테스트를 효율적으로

    [JUnit] Parameterized Test - 테스트를 효율적으로

    들어가며 특정 메서드의 결괏값을 확인할 때 반복문을 사용하거나 여러 개의 단위 테스트를 만들어 엣지 케이스와 올바른 값을 확인합니다. 하지만 하나의 테스트에서 진행할 수 있는 방법이 존재합니다. 예를 들어 소수 값을 확인하는 메서드가 다음과 같습니다. public class Numbers { public static boolean isOdd(int number) { return number % 2 != 0; } } 소수를 테스트 하기위해 여러 테스트를 만들거나 반복문을 사용하지 않고 다음과 같이 테스트가 가능합니다. @ParameterizedTest @ValueSource(ints = {1, 3, 5, -3, 15, Integer.MAX_VALUE}) // six numbers void isOdd_Sho..

    [Java] 리플렉션 (reflection) 개념 이해하기

    리플렉션 들어가며 자바를 처음 배우던 시절 생각해 보면 리플렉션이라는 단어조차 들어 본 적이 없었습니다. 자바를 점점 학습하면서 종종 들어봤지만 그때 당시 '리플렉션을 모르면 사용하지 말아라', '면접에서 안다고 얘기했다가 까였다.' 등의 글을 읽으며 핑계 삼아 공부를 미뤘습니다. 백기선님의 자바 라이브 스터디 시절 어노테이션을 공부하다가 리플렉션이라는 키워드를 다시 만나게 되었고 이때 간단하게 학습했습니다. 그리고 스프링 AOP를 공부하면서 다이나믹 프록시를 알게 되고 리플렉션에 대해 이해하게 되었습니다. 저도 한 번에 이해하지 못 한 개념이고 어노테이션, aop 등 공부하다 보면 리플렉션에 대한 퍼즐 조각이 자연스럽게 맞춰질 수도 있습니다. (제가 그랬어요.) 자바의 리플렉션이 익숙하지 않다면 조금이..

    [Java] Record

    [Java] Record

    Record Intro. 자바 14 이전에는 단순히 데이터를 저장시키고 조회하는 클래스를 만들려면 필드와 메서드가 포함된 클래스를 만들어야 했고 이는 개발자의 잦은 실수와 반복되는 작업을 일으켰다. 자바 14부터 record를 사용하여 이러한 문제를 해결할 수 있다. record는 enum처럼 제약을 가진 클래스의 일종으로 간결함을 얻기 위한 용도가 있다. 목적 일반적으로 데이터베이스의 결과, 쿼리 결과, 서비스 정보 같은 단순한 데이터를 가진 클래스를 작성한다. 많은 경우 데이터를 불변하게 생성하는데 이 과정에서 private, final, getter, constructor, equals and hashcode, toString을 작성하게 된다. 이것은 많은 getter 메서드를 필요로 하고 클래스의..