Programming Language 18

[Java] Java에서의 Thread와 Thread Pool

목차스레드(Thread)란?단일 / 멀티 스레드 작업 예시스레드 풀(Thread Pool)과 사용 예시정리예제 코드이 글에서는 Java에서의 스레드(Thread)와 스레드 풀(Thread Pool)의 개념을 이해하고, 이를 활용하여 프로그램의 성능을 최적화하는 방법을 알아봅니다.또한, 스레드를 무분별하게 생성 및 사용 시 성능 저하로 이어지며 이를 해결하고자 스레드 풀(Thread Pool)을 사용하여 스레드를 효율적으로 관리하는 방법을 소개합니다.1️⃣ 스레드(Thread)란?스레드는 프로그램 내에서 실행되는 하나의 작업 단위✅ 스레드의 특징CPU의 기본 실행 단위 (프로세스 안에서 개별적으로 실행됨)각 스레드는 독립 실행 (하나의 스레드가 멈춰도 다른 스레드는 계속 실행됨)멀티 스레드를 사용하면 프로..

[Java] effectively final

Java를 사용하다 보면 effectively final라는 개념을 접하게 됩니다. 특히 람다 표현식이나 익명 클래스와 같은 구문을 작성할 때, 이 용어가 중요한 역할을 합니다.이번 글에서는 effectively final에 대해 알아보도록 하겠습니다.1. effectively final이란?effectively final은 Java에서 한 번 초기화된 후로 값이 변경되지 않는 변수를 의미합니다.쉽게 말해, final 키워드가 없어도 사실상 final처럼 동작하는 변수입니다.int number = 10; // 초기화Runnable task = () -> System.out.println(number); // 람다에서 number 사용 가능위 코드에서 number는 한 번 초기화된 이후 변경되지 않았기 때..

[Python] * 연산의 오해와 진실, 얕은/깊은 복사

Python에서는 * 연산자를 사용하여 리스트나 문자열을 쉽게 복사하거나 확장할 수 있습니다.  이 연산은 매우 간편하지만, 작동 원리를 제대로 이해하지 못하면 의도치 않은 결과를 초래할 수 있습니다.특히, 리스트와 같은 가변 객체(mutable object) 를 다룰 때는 주의가 필요합니다.  이번 글에서는 Python의 * 연산이 어떻게 작동하는지, 그리고 이를 사용할 때 발생할 수 있는 문제와 해결 방법을 알아보겠습니다. 1. * 연산의 기본 원리Python의 * 연산자는 반복(repetition) 을 통해 객체를 복사하거나 확장하는 역할을 합니다.대표적으로 문자열, 숫자, 리스트에서 활용됩니다. (1) 문자열과 숫자의 경우문자열과 숫자는 불변 객체(immutable object) 이므로, * 연산..

[Python] pip를 사용한 외장 라이브러리 삭제

Python 개발을 하다보면 다양한 외장 라이브러리를 설치하게 됩니다.VSCode, PyCharm, 또는 콘솔에서 pip를 통해 외장 라이브러리를 설치했을 것입니다. 오늘은 Python의 표준 패키지 관리 도구인 pip를 사용해 인터페이스에 관계없이 외장 라이브러리를 손쉽게 제거할 수 있는 방법에 대해 알아보겠습니다.명시적 삭제삭제하려는 패키지를 직접 명시해 삭제하는 명령어입니다.pip uninstall 아래 명령어는 numpy를 삭제하는 명령어입니다.pip uninstall numpy다음과 같이 여러 라이브러리를 동시에 삭제할 수 있습니다.pip uninstall numpy pandas  설치된 패키지 확인삭제 전 설치된 패키지의 목록을 확인할 수 있습니다.pip list  설치된 패키지 목록화만약 설..

[Java] Java의 Collection Framework에 대해

Collection FrameworkJava Collection Framework는 데이터를 효율적으로 관리하고 조작하기 위한 표준화된 자료구조와 알고리즘의 집합입니다. 이를 통해 개발자는 복잡한 자료구조를 직접 구현할 필요 없이 최적화된 구현체를 사용하여 애플리케이션의 생산성과 유지 보수성을 높일 수 있습니다. Collections Framework OverviewCollections Framework Overview Introduction The Java platform includes a collections framework. A collection is an object that represents a group of objects (such as the classic Vector class)...

[Java] Double.MIN_VALUE는 음수가 아니다.

Java의 Double.MIN_VALUE는 종종 오해를 불러일으키는 상수입니다. 이름만 보면 "가장 작은 값"이라는 의미로 해석되어, 음수를 떠올리기 쉽습니다. 하지만 Double.MIN_VALUE는 음수가 아니며, 오히려 0에 가까운 양수입니다. 이를 이해하기 위해 해당 상수의 의미와 사용하는 맥락을 살펴보겠습니다. 1. Double.MIN_VALUE 란?Double.MIN_VALUE는 Java에서 double 타입이 표현할 수 있는 가장 작은 양의 값을 의미합니다. 이는 IEEE 754 표준에 따라 정의된 부동소수점 방식에서 정규화된 가장 작은 값입니다.public class DoubleExample { public static void main(String[] args) { Sys..

[Java] 문자열 + 연산과 StringBuilder 비교

Java에서 문자열 결합 시 많이 사용하는 + 연산은 직관적이고 간단하지만, 성능 측면에서 적절하지 않은 경우가 있습니다. 이번 글에서는 문자열 결합의 효율적인 방법과 이유에 대해 설명하겠습니다.Java에서의 + 연산Java의 String은 immutable(불변)한 객체입니다. 따라서 String 간의 + 연산은 기존 객체를 수정하지 않고, 새로운 String 객체를 생성하게 됩니다. 이는 다음과 같은 코드에서 성능 문제가 발생할 수 있습니다.// 비효율적인 코드 예시String res = "";for (int i = 0; i  위 코드는 for 문이 실행될 때마다 새로운 String 객체를 생성하여 성능 저하를 유발합니다.  + 연산이 효율적인 경우단일 라인의 +연산에서는 Java 컴파일러가 내부적으..

Python 리스트 언패킹

UnpackingPython에서 리스트의 요소를 언패킹하여 별도의 변수로 담아주는 여러 방법에 대해 알아보자. 리스트 ➡️ 변수리스트의 요소를 각 변수에 할당하는 방법이다. 리스트의 요소 갯수만큼 변수가 필요하다.numbers = [1, 2, 3]a, b, c = numbersprint(a, b, c) # 출력: 1 2 3  튜플 ➡️ 변수리스트와 동일하다. numbers = (1, 2, 3)a, b, c = numbersprint(a, b, c) # 출력: 1 2 3 튜플에서 변수로 언패킹 하는 방법은 아래와 같이 응용할 수 있다. 문자열 포멧 출력문의 경우 인자로 tuple을 받는다.따라서 입력으로 받은 words 리스트를 튜플로 변환하여 출력문의 각 인자로 쉽게 전달할 수 있다.words = [..