BackEnd 17

Java HashMap이 List보다 contains의 성능이 더 좋은 이유

보통 실무에서 데이터를 불러올 경우 DB에서 정렬을 통하여 불러오기 떄문에 그 순서를 유지하기위해 ArrayList에 담는 경우가 많다. 처음 개발을 시작할 때는 자료구조의 'ㅈ'자도 몰라서 그냥 아무생각 없이 ArrayList의 contains 메소드를 호출하여 해당 데이터가 들어있는지 확인하였다. 허나 개발을 점점 해보면서 ArrayList의 contains는 시간복잡도가 O(n)이고 HashSet의 경우 시간복잡도가 O(1)이라 성능이 더 좋다는 것을 알게되었다. 이에 대해 ArrayList의 경우 모든 객체의 값을 하나하나 확인을 해봐야하나 HashSet의 경우 Key로 가지고 있기 때문에 바로 불러올 수 있어서 라고만 단순히 생각하였다. 그렇게 사용하던 중 정확히 내부에서 어떻게 동작하는지가 궁..

BackEnd/Java 2023.11.26

JAVA 객체 배열, 리스트 값 비교(Comparable, Comparator)를 통한 정렬

실무에서는 데이터 정렬 시 주로 쿼리에서 진행하지만, 최근 정렬 알고리즘 문제를 풀던 중 Comparable, Comparator을 사용하여 정렬을 하게 되어 비교 인터페이스에 대해 정리해보자 한다. 비교 인터페이스를 사용하는 이유 일반적인 숫자의 경우 기본적인 비교 연산자를 통하여 대소비교를 진행할 수 있다. 하지만 객체의 경우를 보자, 만일 String name, int age 두 개의 값을 가지고 있는 Person 객체를 비교한다해보자. Person 객체는 나이의 크기 통하여 대소비교를 진행할 지 이름값의 알파벳 순으로 대소비교를 진행할 지를 알 수 없으니 일반적인 방식으로는 대소비교가 불가능하다. 이 때 우리는 해당 객체에 비교 인터페이스를 상속시켜 해당 객체를 어떤값을 통하여 대소 비교를 진행할..

BackEnd/Java 2023.09.03

JAVA에 Call by refernce는 없다.

메소드 호출 시 파라미터의 값을 불러오는데는 Call by Reference와 Call By Value 두가지 방법이 있다. Call by Reference와 Call By Value란? Call By Reference (참조에 의한 호출) 메소드 호출 시 파라미터로 변수를 직접 전달한다. 메소드 내부에서 파라미터에 대한 수정이 발생할 경우 원본에도 동일하게 적용된다. 자바에서는 이 방식으로 동작하지 않는다. Call By Value (값에 의한 호출) 메소드 호출 시 파라미터로 변수의 값을 복사하여 전달한다. 메소드 내부에서 파라미터에 대한 수정이 발생할 경우 원본에는 반영되지 않는다. 자바에서의 파라미터 전달 방식은 Call By Value이다. 자바는 파라미터 전달 시 Call By Value 방식..

BackEnd/Java 2023.07.03

JAVA equals, hashCode 메소드

자바에서 모든 객체들이 기본적으로 상속받는 Object 클래스에 기본적으로 equals와 hashCode 메소드가 존재한다. equals 메소드두 개의 객체가 동일한지 비교하는데 쓰이는 메소드이다.기본적으로 두 객체의 주소값이 동일할 경우 true를 return한다.보통 equals 메소드를 오버라이드 후 객체 내부의 값을 비교하여 동일 여부를 판단하곤 한다. hashCode 메소드객체가 저장되어 있는 주소값을 기준으로 hashCode를 생성하여 return 한다.어플리케이션이 실행되는 동안 하나의 객체는 항상 동일한 hashCode값을 return한다. hashCode native 메소드로 경우 자바가 아닌 C, C++ 같은 네이티브 언어로 작성된 메소드이다.자바 프로그램에서는 JNI(Java Nati..

BackEnd/Java 2023.05.18

gradle 프로젝트가 build 안될 때 - java.lang.IllegalStateException: Module entity with name

윈도우 11에서 기존 프로젝트를 Git에서 checkout 하였으나 아래와 같은 에러로 정상적으로 build하지 못하고 있었다. 해결방법 실제 프로젝트명과 setting.gradle의 rootProject.name을 일치시켜 주었더니 바로 해결되었다. 반드시 대/소문자를 맞춰주자 + 윈도우 10에서 동일한 상황을 재현하려하였으나 대/소문자가 일치하지 않음에도 해당 문제가 발생하지 않았다. 출처 : https://youtrack.jetbrains.com/issue/IDEA-317606

BackEnd/Spring 2023.05.16

JAVA finalize() 소멸자 메소드에 대해

주의 - finalize 메소드는 JAVA 9부터 Deprecated되었으며 사용하는 것을 지양하자          try-finally, try-with-resources를 이용하여 처리해주자 글 다시 작성했습니다. 아래 글 참고해주세요https://potwings.tistory.com/63 X바(자바) finalize 메소드 쓰지마세요Java9부터는 Deprecate 되었어요 쓰지 마세요. 과거 필자는 특정 객체 동작하면서 남긴 임시 파일을 해당 객체가 소멸될 때 제거되도록 하기 위해finalize 메소드를 사용하여 처리하려 했던 적이 있었potwings.tistory.com  finalize 메소드는 자바에서 객체가 더 이상 참조되지 않을 때 Garbage Collector가 불필요한 메모리를 회수..

BackEnd/Java 2023.05.14

Spring AntPathMatcher URL 체크 시 OR 조건 매핑

/api/{spring:[원하는 URI||원하는 URI2]+} 위와 같은 형식으로 넣어주면된다 spring: 후 원하는 정규표현식을 넣어주고 +를 써주면 정상적으로 처리가 된다. 패턴은 매칭 진행 시 아래와 같은 조건문이 존재하므로 검사하려는 path와 pattern의 시작 값의 형식을 맞춰주자(pathSeparator의 default값은 "/"이다) https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/AntPathMatcher.html

BackEnd/Spring 2023.03.02