All Posts
[Java 활용] 자원 반납의 정석: Try-With-Resources 완벽 가이드
앞서 예외 처리 기초에서 finally 구문은 ‘에러 발생 여부와 상관없이 무조건 마지막에 문을 닫고 나가는 역할’을 한다고 배웠다.
[Java 활용] 개발자가 가장 자주 만나는 자바 표준 예외 총정리
자바 개발자라면 콘솔 창을 빨갛게 물들이는 예외(에러) 메시지를 하루에도 수십 번씩 만나게 된다. 사용자 정의 예외를 만들기 전에, 자바가 기본적으로 제공하는 대표적인 표준 예외 클래스 4가지의 원인과 발생하는 코드를 숙지해 두면 트러블슈팅(에러 해결) 속도가 비...
[Java 기초] 예외 떠넘기기와 나만의 예외 만들기 (throws, 사용자 정의 예외)
앞선 포스트에서 try-catch를 이용해 내가 직접 예외를 처리하는 방법을 배웠다. 하지만 코드를 짜다 보면, “여기서 에러를 처리하지 말고, 나를 호출한 쪽에서 알아서 처리해!”라고 에러를 위로 넘겨버려야 할 때가 있다.
[Java 기초] 프로그램의 안전망: 예외 처리 (try-catch, finally, throw)
프로그램을 만들다 보면 숫자를 0으로 나누거나, 없는 파일을 읽으려고 하는 등 다양한 오류 상황이 발생한다. 자바는 에러가 발생하면 즉시 그 자리에 에러 메시지를 뱉으며 프로그램을 강제로 종료시켜버린다.
[Java 기초] [참조] 익명 클래스(Anonymous Class)는 도대체 어떤 '번거로움'을 피하게 해줄까?
자바의 람다식이나 익명 클래스를 공부하다 보면 “클래스를 새로 만드는 번거로움을 피하기 위해 등장했다”는 설명을 자주 보게 된다.
[Java 심화] 함수형 프로그래밍의 진화: 익명 클래스, 함수형 인터페이스, 람다식
자바는 철저한 객체 지향 언어다. 따라서 어떤 기능(메서드)을 실행하거나 다른 메서드의 파라미터로 전달하려면, 반드시 그 기능을 포함하는 ‘객체(클래스)’를 통째로 넘겨주어야 한다. 단순히 “주어진 숫자가 짝수인지 확인”하는 로직 하나를 전달하고 싶을 뿐인데, 매...
[Java 활용] HashSet 핵심 메서드(API) 총정리
앞선 포스트에서 순서를 보장하지 않고 데이터의 중복을 원천 차단하는 Set의 특징과 해시 알고리즘에 대해 알아보았다.
[Java 활용] LinkedList 핵심 메서드(API) 총정리
이전 포스트에서 노드(Node)들의 연결로 이루어진 LinkedList의 구조적 특징을 알아보았다.
[Java 활용] ArrayList 핵심 메서드(API) 총정리
앞선 포스트에서 동적 배열인 ArrayList의 구조적 특징에 대해 알아보았다.
[Java 기초] [참조] Wrapper 클래스는 왜 '포장지'라고 불릴까? (Auto-boxing)
자바 코드를 작성하다 보면 아래와 같은 코드를 마주하게 된다.
[Java 활용] HashMap 핵심 메서드(API) 총정리
이전 포스트에서 키(Key)와 값(Value)을 한 쌍으로 묶어서 저장하는 Map 인터페이스와 HashMap의 해시 알고리즘 특징에 대해 알아보았다.
[Java 기초] 컬렉션 데이터 순회하기: Iterator와 향상된 for문
ArrayList처럼 인덱스(번호표)가 있는 자료구조는 일반적인 for(int i = 0; i < size; i++) 문법을 사용해 get(i)로 데이터를 하나씩 꺼내볼 수 있다.
[Java 기초] Map 인터페이스와 HashMap 구조
지금까지 살펴본 List와 Set은 데이터(Value)를 하나씩 나열해서 저장하는 구조였다. 하지만 현실에서는 “홍길동의 점수는 90점”, “apple의 뜻은 사과”처럼 두 개의 데이터가 짝을 이루는 구조가 훨씬 많이 쓰인다.
[Java 기초] [참조] new Integer()에 취소선이 그어지는 이유 (자바의 메모리 최적화)
인텔리제이(IntelliJ)나 이클립스(Eclipse) 같은 최신 IDE에서 자바 코드를 작성하다 보면, new Integer(10)과 같은 코드를 작성했을 때 컴파일러가 코드에 쫙 취소선을 그어버리며 경고를 띄우는 것을 볼 수 있다.
[Java 활용] 표준라이브러리 클래스 ArrayList
자바를 배우다 보면 이름에 ‘Array(배열)’가 들어간 ArrayList를 마주하게 된다. 이것은 배열의 일종일까, 아니면 자바에 내장된 특수한 기본 기능일까?
[Java 기초] 컬렉션 프레임워크 (List, Set): 무한확장
배열(Array)은 크기가 고정되어 있다는 단점이 있었다. 자바는 이를 해결하기 위해 데이터를 무한히 담고, 쉽게 지울 수 있는 마법의 바구니 세트인 컬렉션 프레임워크(Collection Framework)를 제공한다.
[Java 기초] [참조] 기본형(Primitive) 데이터는 왜 컬렉션에 들어갈 수 없을까?
자바의 컬렉션 프레임워크(ArrayList, HashMap 등)를 처음 다루다 보면 <int> 대신 <Integer>라는 Wrapper 클래스를 강제로 사용해야 하는 상황을 마주하게 된다.
[Java 기초] Generics 활용: 제네릭 메소드, 제네릭 클래스
앞선 포스트에서 ArrayList<Integer>처럼 제네릭스를 ‘사용’하여 컬렉션의 타입 안정성을 확보하는 기본 방법을 알아보았다. 이번에는 자바 개발진이 제네릭을 만든 방식 그대로, 우리도 특정 타입에 얽매이지 않는 나만의 범용 제네릭 구조(클래스,...
[Java 기초] Wrapper 클래스와 제네릭스(Generics)
앞선 포스트에서 고정된 크기를 갖는 배열의 단점을 극복하기 위해, 크기가 무한히 늘어나는 마법의 바구니인 컬렉션(Collection) 자료구조가 등장했다고 정리했다.
[Java 기초] [참조] 배열의 한계와 컬렉션 프레임워크(Collection Framework)
자바에서 다수의 데이터를 다룰 때, 가장 먼저 떠오르는 자료구조는 배열(Array)이다. 하지만 실무에서는 배열보다 컬렉션 프레임워크(Collection Framework)를 압도적으로 많이 사용한다.
[Java 기초] 자바에서 여러 데이터를 한번에 관리하기: Array, Collection, Wrapper, Generics
자바에서 여러 데이터를 한번에 저장하기 위해서는 배열이나 제네릭스(Generics)를 사용한다. 그런데 제네릭스를 공부하다보면 중간에 컬렉션(Collection)과 컬렉션 프레임워크라는 개념이 나오는데 이 때부터 개념들이 헷갈리기 시작한다.
[Java 기초] [참조] 패키지(Package) 기본개념, 생성, import
파이썬의 import as, 자바에는 왜 없을까? 파이썬이나 자바스크립트 등에서는 이름이 너무 길거나 다른 라이브러리와 이름이 충돌할 때, as 키워드를 써서 내 입맛대로 간편하게 별명을 지어줍니다.
[Java 기초] [참조] takeExam을 인터페이스로 분리해 보자 (Is-A vs Can-Do)
이전 예제에서 우리는 takeExam()(시험 보기) 기능을 Student 추상 클래스 안에 넣었다. “학생이라면 응당 시험을 봐야 한다”는 논리였다. 이를 객체 지향에서는 Is-A 관계(~은 ~이다)라고 부른다.
[Java 기초] [참조] 다형성에서 참조(Reference)를 알아야하는 이유 (다형성과 참조의 연관성)
자바를 처음 배울 때 ‘참조(Reference)’는 그저 메모리(Heap)에 있는 객체의 ‘주소를 가리키는 포인터’ 정도로 배운다. 그런데 상속과 다형성을 배울 때쯤 갑자기 이 ‘참조’라는 단어가 다시 등장한다. 원래 주소를 가리키는 기능일 뿐인 참조가, 상속에...
[Java 기초] 인터페이스(Interface): 다중 상속과 규약
추상 클래스가 공통 뼈대를 제공하는 ‘미완성 설계도’라면, 인터페이스(Interface)는 그보다 한발 더 나아간 ‘밑그림조차 없는 순수한 규약(Contract)’이다.
[Java 기초] 추상 클래스(Abstract Class)와 추상 메소드(Abstract Method)
상속을 배울 때, 부모 클래스는 자식 클래스들에게 공통적인 기능과 변수를 물려주는 역할을 했다. 하지만 부모 입장에서는 “이 기능은 무조건 있어야 하는데, 구체적으로 어떻게 동작할지는 자식들마다 다르니까 너희가 알아서 만들어라!”라고 강제하고 싶을 때가 있다.
[Java 기초] [참조] 패키지(Package) 기본개념, 생성, import
자바 프로그램을 개발하다 보면 수십, 수백 개의 클래스 파일이 생겨난다. 이 수많은 클래스들을 아무렇게나 흩어두면 관리가 불가능해진다.
[Java 기초] [참조] 접근 제어자: private, default, protected, public
객체 지향 프로그래밍(OOP)의 핵심 중 하나는 ‘은닉화(캡슐화)’다. 외부에서 함부로 내 객체의 데이터를 조작하거나 훔쳐보지 못하게 막아야하기 때문이다.
[Java 기초] Final과 열거형(Enum): 변경 불가능하도록 고정해놓기
개발을 하다 보면, “이 데이터는 절대 바뀌면 안 돼!”, 혹은 “이 기능은 자식 클래스에서 마음대로 뜯어고치면 안 돼!”라고 강제해야 할 때가 있다. 자바에서는 코드의 안정성을 높이기 위해 변경을 엄격하게 차단하는 final 키워드와, 고정된 상수들의 집합인 e...
[Java 기초] 상속, 다형성, 그리고 참조
기존 코드를 재사용하여 새로운 클래스를 만들고, 이들을 하나의 타입으로 묶어서 유연하게 관리하는 자바의 강력한 기능들이다.
[Java 기초] 객체의 탄생과 캡슐화 (생성자, Getter/Setter, 패키지)
설계도(클래스)를 바탕으로 실제 학생을 메모리에 등록할 때, 개인정보를 안전하게 보호하고 초기값을 세팅하는 방법들을 알아본다.
[정보처리기사 실기]
❗️ Life-Journey님의 티스토리 족보를 참고해서 모르는 개념을 다시 정리한 내용입니다. https://chobopark.tistory.com/193
[Network] cURL이란? 개념부터 자주 쓰는 핵심 명령어까지 완벽 정리
백엔드 개발자나 API 통신을 다루는 사람이라면 터미널에서 자주 사용하는 도구 cURL(Client URL)에 대해 정리했다.
[Java 기초] [참조] this. 키워드: 인스턴스 변수 구분
this 키워드
[Java 기초] [참조] 자바에는 전역 변수(Global Variable)가 없을까? (feat. static)
C언어나 파이썬에는 파일 밖 최상단에 변수를 띡 선언해 두면 어디서든 쓸 수 있는 ‘전역 변수’가 있다.
[Java 기초] 11. 클래스와 메소드: 객체지향의 시작
자바는 모든 것을 ‘객체(Object)’로 바라본다. 이 객체를 만들기 위한 설계도가 바로 클래스다.
[Java 기초] 10. 메소드 오버로딩(Overloading)과 스코프(Scope)
메소드의 기초를 다졌다면, 객체 지향 프로그래밍(OOP)의 다형성을 구현하는 핵심 기술인 오버로딩(Overloading)과 오버라이딩(Overriding), 그리고 스코프(Scope)에 대해 정리한다.
[Java 기초] 3. 문자열(String)
1. 문자열 기본 (String Basics)
[Java 기초] [참조] long과 float에 접미사(L, f)를 안 붙이면 어떻게 될까?
자바 컴파일러는 접미사가 없는 숫자(리터럴)를 무조건 다음 기본 타입으로 인식한다
[Java 기초] 9. 메소드(Method)의 기초
코드를 작성하다 보면 똑같은 로직을 여러 번 반복해서 써야 할 때가 있다.
[Java 기초] 8. 다차원 배열: 표(Table) 형태의 데이터 다루기
1차원 배열이 직선 형태의 데이터라면, 2차원 배열은 행(Row)과 열(Column)로 이루어진 표(Matrix) 구조다. 내부적으로는 ‘배열 안에 또 다른 배열이 들어있는 형태’로 관리된다.
[Java 기초] 7. 배열(Array)과 순회
수십 개의 데이터를 다루기 위해 변수를 수십 개 선언하는 것은 비효율적이다.
[Java 기초] 6. 반복문과 제어 키워드 (for, while)
1. 횟수가 명확할 땐 for문
[Java 기초] 5. 조건문 (if, switch)
작성된 코드는 기본적으로 위에서 아래로 순차 실행되지만, 특정 조건에 따라 실행되는 코드를 다르게 분기해야 할 때가 있다. 특히 정보처리기사 실기 시험의 알고리즘 문제에서 가장 기초이자 핵심으로 등장하는 제어문 중 조건문을 먼저 정리한다.
[Java 기초] 4. 아스키(ASCII) 코드
컴퓨터는 ‘A’나 ‘a’ 같은 문자를 있는 그대로 이해하지 못한다. 모든 문자는 내부적으로 고유한 정수 숫자로 매핑되어 저장되는데, 이 매핑 규칙의 표준이 바로 아스키(ASCII) 코드다.
[Java 기초] [참조] 문자를 더했는데 왜 숫자가 나올까? (char vs String 덧셈의 함정)
자바 기초를 공부하다 보면 누구나 한 번쯤 겪는 황당한 에러가 있다. 바로 문자 '1'과 문자 '2'를 더해서 "12"를 만들고 싶었는데, 뜬금없이 숫자 99가 튀어나오거나 타입 에러가 발생하는 현상이다.
[Java 기초] 2. 연산자 ( 산술, 대입, 비교, 논리, 삼항 )
1. 산술 및 증감 연산자
[Java 기초] 1. 자료형과 형변환
1-1. 기본 자료형 (Primitive Data Types)
[Java 기초] 0. 자바(Java)란 무엇이고, 언제 어떻게 쓰일까?
1. Java, 언제 어떻게 쓰일까? (주요 활용 분야)
[CS 기초] Java vs Python vs C, 출력 말고 또 뭐가 다를까?
여러 언어를 넘나들며 공부하다 보면 문법이 섞여서 에러가 나는 경우가 많다. 특히 정보처리기사 실기 시험에서는 세 언어의 코드가 모두 출제되기 때문에, 각 언어의 고유한 특징을 명확히 구분해 두는 것이 필수적이다.
[CS 기초] 출력(Print) 비교: Python, Java, C
알고리즘 문제를 풀거나 다른 언어를 쓰다가 자바로 넘어올 때 가장 먼저 당황하는 부분이 바로 ‘콘솔 출력’이다.
[CS 기초] Python vs Java vs C: 용어 차이와 네이밍룰
똑같은 기능인데 언어마다 부르는 이름이 다르거나, 변수 이름을 짓는 방식이 달라서 당황한 적이 있을 것이다.
[CS 기초] 헷갈리기 쉬운 언어별 문법 규칙 (세미콜론, 블록, 변수)
코드의 논리가 아무리 완벽해도, 언어마다 요구하는 사소한 기호나 선언 방식을 틀리면 매정하게 빨간 줄(에러)이 그어진다. 가장 빈번하게 헷갈리는 문법적 차이 3가지를 정리했다.
[HTML/CSS] div는 줄을 바꾸고, span은 옆에 붙는다? (Block vs Inline)
HTML 태그는 태어날 때부터 “자리를 차지하는 성격”이 정해져 있다. 어떤 태그는 화면 전체를 혼자 쓰려 하고(Block), 어떤 태그는 콘텐츠 크기만큼만 살짝 자리를 잡는다(Inline).
[HTML/CSS] ID와 Class
HTML/CSS를 처음 접할 때 가장 헷갈리는 것이 바로 ID(#)와 Class(.)의 차이다. color: red;를 주면 둘 다 빨간색으로 변하고, 겉보기엔 똑같이 작동하는 것처럼 보인다.
[Git] 좋은 Commit Message 작성하기
개발을 하다 보면 과거의 내가 짠 코드를 보며 “도대체 왜 이렇게 짰지?” 라고 생각할 때가 있다.
[Git 기초] add, commit, push, pull 완벽 이해하기
Git을 처음 접할 때 가장 헷갈리는 부분은 ‘파일 저장(Ctrl+S)’과 ‘Git 저장(Commit)’의 차이이다.
정보처리기사: 소프트웨어 공학 핵심 요약
[BE] Java 백엔드를 Python(FastAPI)으로 마이그레이션하기
[DevLOG 2] Java 백엔드를 Python으로 마이그레이션하는 이유
진행 중이던 프로젝트에서 백엔드 개발자가 탈주(ㅜㅜ)하게 되었다. 팀원이 빠질 때마다 새로운 사람을 구하고, 다시 인수인계를 하며 프로젝트가 지연되는 상황을 지켜보는 것은 큰 스트레스였다. 결국 결단을 내렸다.
[DevLOG 1] AI 서비스 기획: 모델 최적화보다 사용자 가치에 집중하기
처음 프로젝트를 시작했을 때는 창업 경험을 화려한 스펙으로 만들고 싶었다. 그래서 “우리만의 데이터로, 우리만의 모델을 직접 학습시켜 운영하겠다”는 목표를 세웠다. 이를 위해 데이터를 모으고, 학습시키고, 1%의 정확도를 더 높이기 위해 몇 달의 시간을 쏟아부었다...
[앱 개발]뜨개 기록 통합 관리 앱
Instruct korea Meetup: 포스터 발표 후기
12월 20일, 누티드 익선에서 열린 Instruct Korea 12월 Meetup에 다녀왔다. 내가 속한 가짜연구소 7기 ‘깃헙에 nlp 잔디심기’ 팀은 이번 행사에서 [Cherry in the Haystack] 프로젝트로 포스터 발표를 진행했다.
python 이름 규칙
1. 이름 스타일 구분
Docker 실행하기
실행방법: build → run
dockerfile name error, -f flag
Docker는 기본 파일명으로 Dockerfile만 인식한다.
MCP-Agent를 사용한 LLM Agent 추천챗봇
인공지능 기반 식물 관리 앱 POZ
RFP-Agent: LangGraph와 RAG로 만든 제안서 작성 AI 에이전트
해커톤에 나가거나 새로운 프로젝트를 기획할 때, 가장 막막한 순간은 언제인가요? 혁신적인 아이디어는 머릿속에 가득한데, 정작 이를 문서화하는 제안서(RFP) 작성 단계에서 멈칫하거나, 포맷팅에 시간을 뺏겨 본질적인 솔루션에 집중하지 못했던 경험, 다들 한 번쯤 있...
Langchain: PromptTemplate
주요 함수 & 메서드 정리:
MCP 기본 이해
MCP (Multi-Message Prompt / Chat Prompt)
LangChain 1. 기본 이해
LangChain의 목적
LLM Engineering 2. LLM에 지식 주입하기
이전 포스트에서 LLM은 “똑똑하지만 기억력이 없는 연산 장치”라고 정의했다. [🔗 LLM 구동 방법] LLM을 활용하기 위해서는 지식을 넣어줘야하는데 지식을 넣는 방법은 크게 4가지가 있다.
LLM Engineering 1. LLM 앱의 5가지 기본 요소
LLM(Large Language Model) 애플리케이션 개발은 단순히 API를 호출하여 텍스트를 받아오는 것이 전부가 아니다. 이 개념을 어떻게 바라보느냐에 따라 설계가 달라진다.
Long Short-Term Memory
Time-Series Data 시계열 데이터
REALM: Retrieval-Augmented Language Model Pre-Training
Two stage : Retriever-Reader approach = question - answering 두개로 decompose
Dense Passage Retrieval for Open-Domain Question Answering
Open-Domain Question Answering
SWITCH(SW/AI 연합 창업 공모전): 지능형 CCTV 서비스
Oracle SQL 급여관리 프로그램
X-Ray 위험물 탐지 프로젝트
24-1 졸업프로젝트: Verlans Dictionary
[Python 기초] 데이터 타입 2: 문자형
" "따옴표로 둘러싸서 표현한다. 파이썬에서는 숫자 123은 숫자형이지만, 따옴표로 감싼 "123"은 문자열로 인식되어 다른 타입으로 취급된다.
[Python 기초] 데이터 타입 1: 숫자형
프로그래밍을 할 때 쓰이는 숫자, 문자열 등의 자료 형태를 데이터 타입(Data Type)이라고 한다. 이는 프로그램의 기본이자 핵심적인 단위가 되며, 파이썬에서는 ‘자료형’ 또는 ‘수형’이라고도 불린다.