Programming Languages/Java(18)
-
[Java] Lombok 사용 시 주의사항
문제 상황 Lombok은 Java 기반의 라이브러리로 getter/setter, toString, equals, hashCode 등 여러 반복적이고 귀찮은 코드들을 애너테이션 선언만으로 컴파일 시점에 바이트 코드를 조작해서 넣어준다. 그런데 만약 애너테이션을 선언했는데 개발자가 직접 코드를 작성했다면 어떻게 될까? 테스트 롬복만 추가한 프로젝트에서 진행했다. plugins { id 'java' } group = 'io.jeidiiy' version = '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { compileOnly 'org.projectlombok:lombok:1.18.26' annotationProcessor 'org.projectlo..
2023.04.15 -
[Java] 인증번호 생성 방법
1. 문제 프로젝트에서 이메일 인증을 통해 회원가입을 수행하도록 하는 요구사항이 발생했다. 이때 6자리 숫자를 입력하는 방법으로 인증을 하도록 했는데 이 방법에 대해서 찾아본 내용들을 정리한다. 2. 인증번호 생성 방법 자바에서 인증번호를 생성하는 방법은 여러 가지가 존재한다. Random ThreadLocalRandom SecureRandom 이 중에서 세 번째인 SecureRandom을 사용하도록 한다. 3. Random 탈락 이유 Java에서는 난수를 제공하는 방법으로 Random 패키지를 제공한다. 하지만 암호학적으로 안전하지 않다. 이는 공식 문서에 언급되어 있다. 💡 Instances of `java.util.Random` are not cryptographically secure. Consi..
2023.03.28 -
[Java] ArrayList의 capacity, size, 그리고 add(int index, E element)
문제 알고리즘 문제를 풀던 중 2차원 배열 형태를 ArrayList 형태로 구현하려고 했다. 코드는 다음과 같다. N = Integer.parseInt(br.readLine()); tree = new ArrayList(N + 1); ArrayList list = new ArrayList(N + 1); list.add(child, weight); tree.add(parent, list); 언뜻 봐서는 정상적으로 동작할 것 같지만 list.add() 에서 IndexOutOfBoundsException이 발생한다. 왜 예외가 발생하는 것일까? capacity와 size ArrayList는 내부적으로 capacity와 size라는 변수를 두고 있닫. 용도는 다음과 같다. capacity - ArrayList에 ..
2023.03.16 -
[Java] VSCODE에서 MAVEN 프로젝트에 MySQL JDBC 연동
JPA를 배우기 전에 간략하게 이런 게 있고 동작 방식, 여러 문제 때문에 JPA가 나오게 되었다는 것 정도만 알고 넘어가서 오랜만에 다시 복습할 겸 글을 작성한다. 주제에 앞서서 JDBC에 대해 간략히 소개하고 가도록 하자. JDBC JDBC(Java Database Connectivity)는 위키백과의 설명을 빌리자면 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. JDBC를 사용하면 코드 상에서 DB에 접속한 다음 각종 쿼리를 사용할 수 있게 된다. JDBC의 실행 사이클 JDBC 드라이버를 메모리에 로딩한다. DB와 연결한다. DB에 쿼리를 수행한다. DB와의 연결을 종료한다. JDBC 드라이버 로딩 드라이버는 DB 벤더마다 다르다. 따라서 각 벤더의 홈페이지에서 다운로드해야 한다..
2021.12.11 -
[Java] 메서드 시그니처
자바에서 메서드 이름과 파라미터를 합쳐서 메서드 시그니처라고 한다. 메서드 이름이 다르거나 파라미터 타입, 개수가 다르면 시그니처가 다르다고 표현한다. 리턴 타입이나 예외 타입은 시그니처에 포함되지 않는다. 비교 대상 메서드 public String greeting(String name) throws Exception { return "hello " + name; } 비교 메서드 // 메서드 시그니처가 다르다 public String hello(String name) { return "hello " + name; } // 메서드 시그니처가 다르다 public String greeting(String name, String suffix) { return "hello " + name + suffix; } /..
2021.12.04 -
[Java] Equals and HashCode
equals()와 hashcode()는 서로 다른 객체가 같은지를 판별할 때 사용되는 메서드이다. Object 클래스에 구현되어 있고 따라서 모든 객체가 상속받는다. Object의 equals()는 객체의 참조값을 비교하기 때문에 비교하고자 하는 클래스에서 hashCode()와 함께 오버라이딩해야 한다. hashCode()는 객체의 멤버 변수를 통해 해싱을 통한 해시값을 만들어낸다. 따라서 멤버 변수가 달라지면 hashCode()의 결과도 달라진다. 참고로 Object의 hashCode()는 객체의 주소값으로 해시코드를 만들어내기 때문에 프로그램을 실행할 때마다 변경될 수 있다. JDK1.8부터 java.util.Objects 클래스에 hash() 메서드가 추가됐다. hashCode()를 구현할 때 유용..
2021.10.19