본문 바로가기

전체 글135

[Python] Matplotlib으로 데이터 시각화하기 [Python] Matplotlib으로 데이터 시각화하기Matplotlib은 Python에서 가장 널리 사용되는 데이터 시각화 라이브러리다.기본 그래프부터 복잡한 시각화까지 다양한 기능을 제공한다.기본 그래프 작성라인 플롯import matplotlib.pyplot as pltimport numpy as np# 데이터 준비x = np.linspace(0, 10, 100)y = np.sin(x)# 기본 라인 플롯plt.figure(figsize=(10, 6))plt.plot(x, y, label='sin(x)')plt.title('Basic Line Plot')plt.xlabel('X axis')plt.ylabel('Y axis')plt.legend()plt.grid(True)plt.show()다양한 그래.. 2024. 11. 19.
[Python] Pandas DataFrame [Python] Pandas DataFramePandas는 데이터 분석을 위한 Python 필수 라이브러리다.DataFrame을 효과적으로 다루는 방법부터 고급 기능까지 상세히 알아보자.  데이터 전처리기본적인 데이터 로딩과 확인import pandas as pd# CSV 파일 로딩df = pd.read_csv('data.csv')# 데이터 기본 정보 확인print(df.info())print(df.describe())# 중복 행 확인 및 제거duplicates = df.duplicated()df_clean = df.drop_duplicates()컬럼 처리# 컬럼 이름 변경df = df.rename(columns={ 'old_name': 'new_name', 'price': 'item_pric.. 2024. 11. 19.
[Python] NumPy 배열 연산 마스터하기 [Python] NumPy 배열 연산 마스터하기   NumPy는 Python의 과학 컴퓨팅 핵심 라이브러리로, 고성능 다차원 배열 연산을 제공한다.이 글에서는 NumPy의 핵심 기능과 최적화 방법을 알아본다.  벡터화 연산 (Vectorization)벡터화는 반복문을 사용하지 않고 배열 전체에 대해 연산을 수행하는 방법이다. 기본적인 반복문 vs 벡터화 연산import numpy as npimport time# 데이터 준비size = 1000000arr = np.random.rand(size)# 반복문 방식start = time.time()result_loop = [x * 2 for x in arr]print(f"반복문 시간: {time.time() - start}")# 벡터화 연산start = time.. 2024. 11. 18.
[JAVA] ThreadLocal 제대로 사용하기 [JAVA] ThreadLocal 제대로 사용하기ThreadLocal은 각 스레드가 독립적인 변수 복사본을 가질 수 있게 해주는 Java의 강력한 기능이다. 이를 통해 멀티스레드 환경에서 발생할 수 있는 동시성 문제를 해결할 수 있다.ThreadLocal 기본 개념ThreadLocal은 각 스레드마다 별도의 저장소를 제공하여 스레드 안전성을 보장한다.public class UserContext { private static final ThreadLocal userHolder = new ThreadLocal(); public static void setUser(User user) { userHolder.set(user); } public static User getUser.. 2024. 11. 17.
[JAVA] 효과적인 예외 처리 전략 [JAVA] 효과적인 예외 처리 전략Java에서 예외 처리는 프로그램의 안정성과 유지보수성에 큰 영향을 미친다.이 글에서는 효과적인 예외 처리 전략과 실제 적용 방법에 대해 알아본다.   체크 예외 vs 언체크 예외 체크 예외 (Checked Exception)컴파일 시점에 처리가 강제되는 예외복구가 가능한 상황에서 사용예: IOException, SQLExceptionpublic void readFile(String path) throws IOException { try (FileReader reader = new FileReader(path)) { // 파일 읽기 로직 } catch (IOException e) { // 구체적인 에러 처리 throw n.. 2024. 11. 16.
[JAVA] Java의 String Pool과 문자열 최적화 [JAVA] Java의 String Pool과 문자열 최적화  String Pool의 이해String Pool은 Java가 문자열을 저장하고 재사용하는 특별한 메모리 영역이다. 리터럴로 생성된 문자열은 자동으로 이 풀에 저장된다.String str1 = "hello"; // String Pool에 저장String str2 = "hello"; // 풀에서 재사용String str3 = new String("hello"); // 새로운 객체 생성System.out.println(str1 == str2); // trueSystem.out.println(str1 == str3); // false intern() 메서드 활용intern() 메서드를 사용하면 문자열을 명시적으로 String Pool에 저장.. 2024. 11. 15.
[JAVA] 가비지 컬렉션 동작 원리와 모니터링 방법 [JAVA] 가비지 컬렉션 동작 원리와 모니터링 방법 Java 애플리케이션의 성능을 최적화하기 위해서는 가비지 컬렉션(GC)의 동작 원리를 이해하고 적절히 모니터링하는 것이 중요하다.이 글에서는 GC의 기본 개념부터 실전 모니터링 방법까지 자세히 알아본다.   JVM 메모리 구조JVM 메모리는 크게 다음과 같이 구분된다: Heap 영역[Young Generation]- Eden Space- Survivor Space 0- Survivor Space 1[Old Generation]- Tenured Space Non-Heap 영역- Metaspace (Java 8+)- Code Cache- Thread Stacks 각 영역의 특징Young Generation새로 생성된 객체가 할당되는 영역Minor GC가 .. 2024. 11. 14.
[IntelliJ IDEA] 코드 리팩토링을 도와주는 플러그인 TOP 5 [IntelliJ IDEA] 코드 리팩토링을 도와주는 플러그인 TOP 5 IntelliJ IDEA에서 제공하는 기본 리팩토링 기능도 훌륭하지만, 몇 가지 플러그인을 추가하면 더욱 효율적인 리팩토링이 가능하다.자주 사용하고 검증된 리팩토링 플러그인 5가지를 소개한다.  1. SonarLint코드 품질과 버그를 실시간으로 감지하고 개선 방안을 제시하는 강력한 플러그인이다.  주요 기능실시간 코드 검사보안 취약점 감지코드 스멜 식별상세한 개선 방안 제시 설정 방법Settings → Plugins → Marketplace → "SonarLint" 검색 → Install 사용 팁// Before - SonarLint 경고if (someString != null && someString.length() > 0) {.. 2024. 11. 5.
[JAVA] try-with-resources와 AutoCloseable 인터페이스 [JAVA] try-with-resources와 AutoCloseable 인터페이스 자바 7에서 도입된 try-with-resources는 자원 관리를 훨씬 쉽고 안전하게 만들어주는 기능이다.기존의 try-finally 구문을 대체하며, 코드의 가독성과 안정성을 크게 향상시킨다.  기존 방식의 문제점전통적인 자원 관리 방식은 다음과 같은 문제가 있다:FileInputStream fis = null;try { fis = new FileInputStream("file.txt"); // 파일 처리 로직} catch (IOException e) { // 예외 처리} finally { if (fis != null) { try { fis.close(); .. 2024. 11. 4.
[JAVA] 직렬화(Serializable)와 역직렬화 [JAVA] 직렬화(Serializable)와 역직렬화  직렬화란?자바 직렬화는 객체를 바이트 스트림으로 변환하는 과정이다. 역직렬화는 그 반대로, 바이트 스트림을 객체로 복원하는 과정이다.주로 다음과 같은 상황에서 사용한다:객체를 파일로 저장할 때네트워크로 객체를 전송할 때캐시할 때클립보드에 복사할 때 기본 사용법직렬화 가능한 클래스 만들기public class User implements Serializable { private String name; private int age; private String email; // 생성자, getter, setter 생략} 객체 직렬화하기User user = new User("John", 30, "john@example.com");//.. 2024. 11. 3.
[JAVA] equals()와 hashCode() 메서드 [JAVA] equals()와 hashCode() 메서드  Java에서 equals()와 hashCode() 메서드는 객체의 동등성 비교와 해시 기반 컬렉션 사용에 매우 중요한 역할을 다. 이 두 메서드를 제대로 이해하고 구현하지 않으면 예상치 못한 버그가 발생할 수 있다.이번 글에서는 두 메서드의 올바른 구현 방법과 주의사항에 대해 알아보자.  equals() 메서드equals() 메서드의 기본 규칙equals() 메서드는 다음 다섯 가지 규칙을 만족해야 합니다:반사성: x.equals(x)는 항상 true대칭성: x.equals(y)가 true이면 y.equals(x)도 true추이성: x.equals(y)가 true이고 y.equals(z)가 true이면 x.equals(z)도 true일관성: x.. 2024. 11. 2.
[JAVA] Stream의 map과 flatMap 차이 [JAVA] Stream의 map과 flatMap 차이  Java Stream API를 사용하다 보면 자주 마주치게 되는 map()과 flatMap() 메서드.얼핏 비슷해 보이는 이 두 메서드의 차이점을 정확히 이해하기 위한 글입니다.. map() 메서드 이해하기map()은 스트림의 각 요소를 변환하여 새로운 요소로 매핑하는 중간 연산입니다. 1:1 매핑이라고 생각하면 됩니다. 기본적인 map() 사용 예제List names = Arrays.asList("john", "jane", "mike");// 모든 이름을 대문자로 변환List upperNames = names.stream() .map(String::toUpperCase) .collect(Collectors.toList());System.. 2024. 11. 1.