알아가기 51

Java의 BigInteger 클래스

Java에서 정수는 기본적으로 int와 long 타입으로 표현된다. 그러나 이들 타입은 각각 32비트와 64비트의 크기 제한이 있어, 매우 큰 정수를 처리할 수 없다. 이를 해결하기 위해 Java는 java.math.BigInteger 클래스를 제공한다. 이 클래스는 임의의 크기를 가진 정수를 다룰 수 있도록 해주며, 기본적인 산술 연산, 비트 조작, 소수 판별 등의 기능이 가능하다.BigInteger는 불변 객체(immutable)로 설계되어, 객체의 상태를 변경하는 대신 새로운 객체를 생성하는 방식으로 동작한다. 따라서, BigInteger는 메모리와 성능 면에서 주의가 필요하지만, 큰 정수를 안전하게 처리할 수 있는 강력한 도구이다.

알아가기/Java 2024.11.25

[Java] ListIterator: 리스트 순회를 위한 양방향 인터페이스

ListIterator 는 List 컬렉션을 순회할 때 하용하는 인터페이스이다. ListIterator 를 사용하면 요소의 추가, 삭제, 이전 요소 및 다음 요소에 접근하는 등의 작업을 할 수 있다. ListIterator 주요 메서드 add(E e): 해당 리스트에 전달된 요소를 현재 커서 위치에 추가한다. hasNext(): 해당 리스트를 순방향으로 순회할 때 다음 요소가 있는지 확인한다. 다음 요소가 있으면 true를 반환한다. hasPrevious(): 해당 리스트를 역방향으로 순회할 때 이전 요소가 있는지 확인한다. 이전 요소가 있으면 true를 반환한다. next(): 리스트의 다음 요소를 반환하고, 커서의 위치를 순방향으로 이동한다. nextIndex(): next() 메소드를 호출하면 반환..

알아가기/Java 2024.04.01

[Java] MathContext 정확도를 조절하는 자바 클래스

MathContext는 자바의 java.math 패키지에 포함된 클래스로, BigDecimal 연산의 수학적 설정(정밀도와 반올림 모드)을 지정하는 데 사용된다. 정밀도(Precision)는 결과가 표현할 수 있는 최대 자릿수를 의미한다. 예를 들어, 정밀도가 5인 경우, 결과는 최대 5자리 숫자를 가질 수 있다. 반올림 모드(Rounding Mode)는 정밀도를 초과하는 숫자를 어떻게 처리할지 결정하는 규칙이다. 예를 들어, 반올림 모드가 HALF_UP인 경우, 소수점 이하의 숫자가 5 이상이면 올림하고, 그렇지 않으면 버림한다. MathContext는 이런 설정들을 모아둔 것으로, BigDecimal 연산 시에 이를 인자로 전달하여 연산 방식을 제어할 수 있다. 정밀도 사용 import java.ma..

알아가기/Java 2024.01.27

[Java] Arrays.stream() 및 sum() 메서드

Arrays.stream() 에 대해 Arrays.stream() 메서드는 Java 8에서 소개된 Arrays 클래스의 정적 메서드이다. - Arrays.stream() 메서드는 배열을 원시 타입에 따른 스트림으로 변환할 수 있다. (int, long, double) - 스트림은 일회성이므로 한 번 소비하면 재사용할 수 없다. - 배열의 요소를 변경하더라도, 스트림은 해당 변경을 반영한다 Arrays.stream().sum() 사용 예시 import java.util.Arrays; public class Main { static int[] numbers; public static void main(String[] args) { numbers = new int[] {1, 2, 3, 4, 5}; // 배열을..

알아가기/Java 2024.01.25

[Docker] 내부망 MySQL 접속 주소. 2003, "Can't connect to MySQL server on 'localhost' ([Errno 99] Cannot assign requested address)"

오류 메시지 sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'localhost' ([Errno 99] Cannot assign requested address)") (Background on this error at: https://sqlalche.me/e/20/e3q8) 이 오류를 해결하면서.. Docker의 내부와 외부 환경을 어느 정도 이해하고 있었지만 데이터 베이스를 가져오는 과정에서 왜 내부 연결을 이용하는지 의아한 부분이다. 로컬 환경에서 Docker container를 개별 생성하면 경험상 지정한 외부 포트로 데이터가 전달된다. 만약 내부망을 이용하고자..

알아가기/Docker 2023.12.20

[Python] mysqlclient 설치 오류 Can not find valid pkg-config name

mysqlclient 오류 메시지 root@2230da7c6145:/code/backend# pip install mysqlclient Collecting mysqlclient Downloading mysqlclient-2.2.1.tar.gz (89 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 90.0/90.0 kB 4.1 MB/s eta 0:00:00 Installing build dependencies ... done Getting requirements to build wheel ... error error: subprocess-exited-with-error × Getting requirements to build wheel did not run successf..

알아가기/Python 2023.12.19

[Spring] Tomcat 실행 에러 해결 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

SEVERE: Error configuring application listener of class [org.springframework.web.context.ContextLoaderListener] java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 얼마전에도 이렇게 떳었다. 검색을 통해 해결을 하였지만 어떻게 했는지 기억을 더듬어보니 가물가물한 상태였기에 다시 검색하여 해결하면서 기록해둔다. 6줄 요약 1. 프로젝트 우클릭 -> Properties 2. Deployment Assembly 선택 -> Add 클릭 3. Java Build Path Entries 선택 -> Next 클릭 4. Mave..

알아가기/Spring 2023.12.08

[Spring] 임의의 서버 포트 번호 (random server port number)

톰캣에서 서버 포트 번호를 지정하지 않고 랜덤 하게 생성하는 방법이다. 동일한 애플리케이션을 서로 다른 인스턴스에서 실행할 때 포트 충돌이 일어나는 것을 방지한다. automation을 통해 애플리케이션을 실행할 때 유용할 수 있다. 기본 포트 설정 application.properties 에 포트를 지정하지 않은 기본값 지정된 포트 설정 application.properties 에 원하는 포트를 지정 server.port=8181 랜덤 포트 설정 application.properties 에 server.port를 0으로 지정하여 랜덤 포트 넘버를 부여 1트. 포트 넘버 3474 server.port=0 2트. 포트 넘버 3505 3트. 포트 넘버 3541

알아가기/Spring 2023.11.18

[Spring] Advice Types inside AOP

Advice Types inside AOP 알아보자 Before advice: 메서드가 호출되기 전에 실행. ex) 메서드 호출 전에 인증을 수행하거나, 로그를 기록하는 등의 작업을 수행. @Before("execution(* *.*(..))") public void beforeAdvice() { // 인증을 수행한다. } AfterReturning advice: 메서드가 정상적으로 종료된 후 실행. ex) 메서드 호출 결과를 캐싱하거나, 성능 측정을 수행하는 등의 작업을 수행. @AfterReturning("execution(* *.*(..))") public void afterReturningAdvice(Object returnValue) { // 메서드 호출 결과를 캐싱한다. } AfterThrow..

알아가기/Spring 2023.11.08

[Spring] Eager Instantiation Vs Lazy Instantiation

Eager Instantiation 즉시 생성: 인스턴스는 필요한 시점이 아니라 미리 객체 생성 시 초기화 미리 계산: 필요하지 않은 정보까지 미리 계산하고 저장 높은 메모리 사용량: 모든 인스턴스가 미리 생성되므로 메모리 사용량이 높음 높은 초기화 비용: 모든 객체가 초기화되므로 초기화 비용이 높을 수 있음 예측 가능한 성능: 인스턴스가 필요한 시점에 사용 가능하므로 성능 예측이 용이 복잡한 객체 그래프: 복잡한 객체 그래프를 구축하는 경우 메모리와 성능 문제가 발생할 수 있음 주로 단순한 응용 프로그램에 적합 Lazy Instantiation 필요할 때 생성: 인스턴스는 실제로 필요한 시점에 생성 지연 계산: 필요한 정보만 생성하고 저장하므로 불필요한 계산을 피할 수 있음 낮은 메모리 사용량: 필요한..

알아가기/Spring 2023.11.05