본문 바로가기

전체 글50

[Java] JVM의 구조, 동작 원리 ☝️ JVM (Java Virtual Machine)Java 바이트 코드를 실행하는 가상머신Java 코드가 OS 위에서 바로 실행되는 게 아니라 JVM 위에서 실행되기 때문에 OS에 종속되지 않고 실행 가능→ Write Once, Run Anywhere [Java Execution Flow].java ↓ (javac 컴파일).class (바이트코드) ↓JVM * ↓CPU 실행 🧱 JVM의 구조JVM은 크게 세 부분으로 나뉨1. Class Loader2. Runtime Data Areas (메모리 영역)3. Execution Engine [JVM Architecture] [JVM Execution Flow]1. javac → 바이트코드 생성2. JVM 실행3. Class Loader.. 2026. 3. 3.
시간 복잡도 (Time Complexity) / 공간 복잡도 (Space Complexity) ⏰ 시간 복잡도 (Time Complexity)입력 크기 n이 증가할 때, 연산 횟수가 얼마나 증가하는 지를 나타낸 지표연산 횟수 증가 비율을 나타내는 수치이며, 보통 Big-O 표기법 사용💡 Big-O 표기법 - 최악의 경우 기준으로 증가 속도를 표현하는 방식 - 상수는 무시 [EX.Big-O]O(1)O(n)O(n^2)O(log n)O(n log n)// 상수는 무시3n + 5 → O(n)5n^2 + 10n + 1 → O(n^2) ✔️ 시간 복잡도 성능 비교O(1) [Big-O Complexity] ✔️ 계산 방법🔹n번 실행 : O(n)반복문 횟수만큼 실행여러 개의 독립 루프도 여기에 해당 (ex. n+n+n → 3n → 상수는 무시되므로 결과는 O(n))단순 재귀 (n번 호출)//.. 2026. 2. 25.
[Java/백준] 1182번 : 부분수열의 합 👩‍🏫 문제 🚩 풀이 방법애초에 Brute Force 문제를 찾아서 풀었기 때문에 모든 경우의 수를 탐색해야 한다는 전제 하에, 모든 경우의 수(부분 수열)를 탐색하기 위해 DFS를 사용했다. 1️⃣ 풀이 1. (Stack 사용)처음에는 괜히 재귀를 안 쓰고 싶어서 Stack을 사용해 while문으로 구현을 했는데 메모리 사용량이 장난이 아니고 속도도 다른 사람들에 비해 매우 느렸다. - 소스코드private void getCases(int[] sequence, int N, int S) { Stack stack = new Stack(); int count = 0; stack.push(new int[]{0, -1}); // sum, index while(!stack... 2026. 2. 23.
AI 관련 용어 정리 🔹AI ApplicationAI 모델을 사용해 특정 기능이나 서비스를 제공하는 모든 소프트웨어ex. AI Agent, 챗봇 [AI Application Workflow]User↓Application↓AI Model↓Response 🔹AI Agent사용자 개입 없이 상황을 스스로 판단해 최적의 행동을 수행하는 s/w 시스템 (환경 인식, 판단, 행동)→ 즉, AI 모델을 사용해 단순 질의 응답을 넘어 특정 유저, 특정 task에 특화된 맞춤형 서비스를 제공하고, 필요시 스스로 상황을 판단해 적절한 외부 시스템이나 도구를 호출해 작업을 수행할 수 있는 s/w [AI Agent Workflow]User 요청↓LLM 판단↓Agent가 Tool/API 선택↓실제 작업 수행 🔹Human-In-The-loopA.. 2026. 2. 10.
Item6. 불필요한 객체 생성을 피하라 👎 불필요한 객체 생성기존 객체를 재사용해야 한다면 새로운 객체를 만들지 마라 [EX. 불필요한 객체 생성의 예]String s = new String("bikini");// 개선 예String s = "bikini"; [EX. 불필요한 객체 생성의 예2 - 오토박싱]private static long sum() { Long sum = 0L; for(long i = 0; i 👍 객체의 재사용대안1. 정적 팩터리 메서드생성자는 호출할 때마다 새로운 객체를 만들지만, 팩터리 메서드는 그렇지 않음불변 객체 뿐 아니라 가변 객체 중에서도 사용 중 변경되지 않을 것임을 안다면 재사용 가능 [EX. 불변 클래스에서 생성자 대신 제공하는 정적 팩터리 매서드]Boolean.valueOf(String)// Jav.. 2026. 1. 28.
Item5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 많은 클래스가 하나 이상의 자원에 의존사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않음 [EX.정적 유틸리티를 잘못 사용한 예 - 유연하지 않고 테스트하기 어려움]public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker() // 객체 생성 방지 public static boolean isValid(String word) { ... } public static List suggestions(String typo) { ... }} [EX.싱글턴을 잘못 사용한 예 - 유연하지 않고 테스트하기 어려움]public class SpellChec.. 2026. 1. 27.