java/java

    [Java] Comparator와 @FunctionalInterface

    함수형 인터페이스 공부하다가, Comparator 인터페이스 @FunctionalInterface 애노테이션이 붙은 것을 확인했다. @FunctionalInterface public interface Comparator { int compare(T o1, T o2); boolean equals(Object obj); ... } 해당 애노테이션은 Comparator가 함수형 인터페이스라고 명시하는 것이다. 그러나 함수형 인터페이스는 추상 메서드가 한 개여야 한다. 근데 Comparator는 위와 같이 추상 메서드가 두개다. -> 왜 Comparator를 함수형 인터페이스로 명시한걸까하는 의문이 들었다. 찾아보니, 모든 클래스는 Object 클래스를 상속받데, 만약 아무 것도 상속받지 않은 클래스가 있으면 ..

    [Java] public class

    자바에서 하나의 .java 파일에 여러 class를 만들 수 있지만, public class는 파일명과 동일한 이름의 클래스 하나만 만들 수 있다. ex) Member.java public class Member { } class Id { } class Name { } 하나의 자바 파일에 여러 클래스를 작성하는 경우에, 하나의 public(대표) class를 파일명과 동일하게 하는 것이 코드의 가독성에 도움이 된다고 한다. (자바를 만든 제임슨 고슬링이 이렇게 하라고 함..) +) 만약 public class의 클래스 이름이 파일명과 다르면 컴파일 오류가 발생한다. 참고로 Kotlin의 경우, 하나의 파일에 여러 class를 선언할 수 있고, 파일명과 꼭 맞출 필요도 없다. ex) Member.kt cl..

    Mockito

    Mockito Mock: 진짜 객체와 비슷하게 동작하지만 프로그래머가 직접 그 객체의 행동을 관리하는 객체. Mockito: Mock 객체를 쉽게 만들고 관리하고 검증할 수 있는 방법을 제공한다. Mock 프레임워크 중 가장 많이 사용된다. 단순한 로직의 단위 테스트는 간단하게 할 수 있지만, 만약 애플리케이션이 DB를 사용한다던가 외부 API를 호출한다고 하면, DAO 객체나 외부 API가 어떻게 동작하는지 Mock을 사용해 실제 API 호출 없이 사전에 테스트를 해볼 수 있다. 라이브러리 추가 스프링 부트 2.2+ 프로젝트 생성시 spring-boot-starter-test에서 자동으로 Mockito를 추가해 준다. 스프링 부트를 쓰지 않는다면, 의존성을 직접 추가한다. org.mockito mock..

    [Java] 등가속도 운동 - t초 후의 위치 계산

    [Java] 등가속도 운동 - t초 후의 위치 계산

    등가속도 운동에서 방향, 속도, 가속도가 주어질 때, t초 후의 위치 계산하는 코드이다. 물리학이긴 하지만,, 테스트할 일이 있어서 코드로 구현해 보았다. 코드는 유클리드 기하학 기준이다. (좌표평면) // 초기 위치(x, y), 방향(direction), 속도(velocity), 가속도(acceleration)이 주어졌을 때 // t초 후의 위치(x_prime, y_prime)을 계산 double space = velocity * time + 0.5 * acceleration * Math.pow(time, 2); double x_prime = x + space * Math.cos(direction); double y_prime = y + space * Math.sin(direction); 참고삼아 그림..

    [Java] 메서드 애노테이션 정보 가져오기

    다음과 같은 애노테이션이 있다고 가정하자. @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface TestAnnotation { String value(); } 다음과 같이 메서드에 선언되어 있는 애노테이션의 정보를 가져올 수 있다. public class Test { @TestAnnotation(value = "test") public void test() { } public static void main(String[] args) throws NoSuchMethodException { Method method = new Test().getClass().getMethod("test"); TestAnnotation..

    [Java] 현재 실행 중인 메서드 이름 가져오기

    public class Test { public static void main(String[] args) { String methodName = Thread.currentThread().getStackTrace()[1].getMethodName(); System.out.println("methodName = " + methodName); } } methodName = main

    [Java] Map - Value 값으로 정렬

    Map map = new HashMap(); map.put("math", 100); map.put("english", 80); map.put("history", 90); List keySetList = new ArrayList(map.keySet()); System.out.println("before"); for (String key : keySetList) { System.out.println(key + ": " + map.get(key)); } Collections.sort(keySetList, (o1, o2) -> map.get(o1).compareTo(map.get(o2))); System.out.println("after"); for (String key : keySetList) { System..

    [Java] OpenCsv를 사용해 CSV 파일 읽기

    [Java] OpenCsv를 사용해 CSV 파일 읽기

    OpenCSV http://opencsv.sourceforge.net OpenCSV는 자바에서 CSV 파일 읽기, 쓰기를 편하게 해주는 API들을 제공하는 라이브러리이다. 여기서는 OpenCsv의 파일 읽기에 대해서 알아보겠다. import 다음 라이브러리를 추가한다. (Gradle 기준) implementation 'com.opencsv:opencsv:5.5' String 배열로 읽기 CSV 파일을 String[] 형식으로 읽어들이는 것이 가능하다. public static void main(String[] args) throws CsvValidationException, IOException { CSVReader csvReader = new CSVReader(new FileReader("input.c..