Computer Science 14

빌더 패턴(Builder)

🏗️ Inner Class로 빌더 패턴 만들기생성자 파라미터가 너무 많아지면 코드가 점점 읽기 어려워집니다.공부하다가 Inner Class로 구현하는 빌더 패턴이 인상적이어서 정리해 봤습니다 😅🤔 빌더 패턴이란?빌더 패턴은 복잡한 객체를 단계별로 생성할 수 있도록 하는 생성 디자인 패턴입니다.같은 생성 코드로 다양한 형태의 객체를 만들 수 있다는 게 핵심이에요.😱 어떤 문제를 해결할까요?⚠️ 점층적 생성자 문제// 필드가 늘어날수록 생성자가 폭발합니다User(String name) { ... }User(String name, int age) { ... }User(String name, int age, String address) { ... }User(String name, int age, Stri..

해시 테이블(Hash Table)

🗂️ 해시 테이블 (Hash Table)자료구조를 공부하다 보면 "탐색 시간 O(1)"이라는 표현을 자주 만납니다.그게 어떻게 가능한지 궁금해서 한번 정리해 봤습니다 😅🤔 해시 테이블이란?해시 테이블은 키(Key)와 값(Value)을 쌍으로 저장하는 자료구조입니다.데이터를 저장할 위치를 해시 함수(Hash Function) 로 계산하기 때문에, 평균적으로 O(1) 의 시간복잡도로 데이터를 저장하고 찾을 수 있습니다.쉽게 생각해볼게요..🧐도서관에서 책을 찾는다고 생각해보죠.만약 책이 아무 규칙 없이 꽂혀있다면 전부 뒤져야 하지만, 책마다 청구기호(숫자)가 붙어 있다면 해당 번호 서가로 바로 가면 됩니다.해시 테이블에서 해시 함수가 바로 그 청구기호를 만들어주는 역할을 합니다.키를 넣으면 → 번호가 ..

버블 정렬(Bubble Sort)

🫧 거품처럼 숫자가 떠오르는, 버블 정렬(Bubble Sort)데이터를 순서대로 나열하는 정렬 알고리즘 중 가장 기초적이면서 직관적인 버블 정렬(Bubble Sort)에 대해 공부한 내용을 정리해 보았습니다!!🧠 버블 정렬이란?버블 정렬은 인접한 두 원소를 비교하며 조건에 맞지 않을 경우 자리를 교체하는 방식이예요.마치 여러 사람이 줄을 서 있을 때,맨 앞사람부터 시작해 오직 바로 옆 사람과만 키를 비교하며 더 큰 사람이 계속 뒤로 이동하는 밀어내기 방식과 같습니다.🎨 그림으로 보는 정렬 원리버블 정렬의 핵심은 가장 큰 값을 뒤로 밀어내는 것!!💻 자바(Java) 구현 및 최적화버블 정렬은 구현이 간단하지만, 기본적으로 $O(n^2)$의 시간 복잡도를 가집니다.아래 코드는 이미 정렬이 완료된 경..

보수(부호-크기, 1의 보수, 2의 보수)

🧮 보수컴퓨터는 0과 1만 사용하기 때문에, 뺄셈 연산을 직접 처리하는 데 한계가 있었습니다.그래서 컴퓨터에서는 뺄셈을 덧셈으로 바꾸기 위한 방법이 필요했고,그 과정에서 등장한 개념이 바로 보수입니다.초기의 디지털 컴퓨터에서는 a - b처럼 뺄셈을 직접 수행하는 회로가 존재했지만,회로 구조가 복잡하고 연산 속도도 느렸기 때문에, 더 단순하고 빠른 연산 방식이 필요했어요.그 해답이 바로 a - b 👉 a + (-b)로 바꾸는 방식이었고,이때 필요한 -b를 만들어내기 위해 보수 개념이 도입되었습니다.즉, 보수는 뺄셈을 효율적으로 처리하기 위해 고안된 개념이며,그 과정에서 자연스럽게 음수를 표현할 수 있게 된 것이죠!보수의 개념을 처음 접하시는 분들 중 자세한 설명이 보고 싶다면,🚀 보수 설명 보기 👈..

High-Level Language 사용 이유

💡 우리가 왜 High-Level Language(고급 언어)를 사용할까?"왜 굳이 자바, 파이썬 같은 언어를 배우는 걸까요?"사실 이 질문은 컴퓨터와 인간의 대화 방식을 이해하는 데 핵심이에요!🧠 컴퓨터는 인간의 언어를 이해하지 못해요컴퓨터는 전기 신호로 동작해요.형광등을 생각하면 쉬워요! 두가지 경우만 존재하는거죠, 켜짐과 꺼짐 😐 🫥이 신호는 오직 두 가지 숫자 — 0과 1만으로 표현됩니다.그래서 컴퓨터가 직접 이해하는 언어는 기계어 입니다.🤖 기계어(Machine Language)란? 10110100 01100001 이런 이진수로 된 명령어들😨 하지만 이건 너무 복잡한데...?우리가 코드를 작성하려면 CPU 구조, 레지스터 위치, 메모리 주소까지 다 알아야 해요..😅게다가 각 CPU마..

SOLID란?

💡 SOLID란?객체지향 설계의 5가지 핵심 원칙소프트웨어를 더 유연하고 유지보수하기 쉽게 만들기 위한 가이드예요.이 원칙을 따르면 확장에 강하고, 수정이 쉬운 코드를 만들 수 있습니다.📦 SOLID 5대 원칙 요약표원칙이름 (풀네임)핵심 개념SSRP (Single Responsibility Principle)클래스는 하나의 책임만 가져야 함OOCP (Open/Closed Principle)확장에는 열려 있고, 수정에는 닫혀야 함LLSP (Liskov Substitution Principle)자식 클래스는 부모를 대체할 수 있어야 함IISP (Interface Segregation Principle)인터페이스는 작고 구체적으로 분리해야 함DDIP (Dependency Inversion Principl..

Singleton(싱글턴 패턴)

🧸 싱글턴 패턴이 뭐예요?“단 하나만 있어야 해!” 라고 정해진 친구가 있어요.그게 바로 싱글턴 패턴이에요.💡 쉽게 생각해서...싱글턴 패턴을 공용 화장실과 비유해 볼게요! 🚻우리 회사엔 화장실이 딱 하나 있어요.누가 먼저 들어가든,모두 그 하나뿐인 화장실을 차례차례 써야 해요.‼️ 각자 자기 전용 화장실을 만들면?👉 화장실이 너무 많아져서 복잡하고, 공간도 낭비되겠죠?그래서 회사 규칙엔 이렇게 써 있어요“화장실은 하나만! 전 직원이 함께 씁니다!”이게 바로 프로그래밍에서 말하는 싱글턴 패턴이에요.필요할 때마다 객체를 새로 만드는 게 아니라, 하나만 만들고 그걸 공유해서 사용하는 구조죠!🔧 프로그래밍에서는?컴퓨터 프로그램에도"이건 하나만 있으면 되고, 모두가 함께 써야 해!"하는 친구들이 있어요..

무한 루프(Infinite Loop)의 위험성

🌀 무한 반복문, 진짜 괜찮은 걸까?"while(true) 뭐 어때요, 그냥 계속 돌리면 되는 거 아닌가요?"단순히 계속 반복한다는 건 쉽지만,컴퓨터 입장에서는 어마어마한 자원 소모가 될 수 있어요!지금부터 무한 루프의 위험성과 똑똑한 사용법을 함께 정리해볼게요 😊⚠️ 무한 루프가 시스템에 미치는 영향항목설명CPU 폭주조건 없이 계속 반복되면 CPU가 100%를 향해 달립니다. 다른 작업은 버벅이고, 팬이 미친 듯이 돌아가요.메모리 누수반복문 안에서 객체를 계속 만들거나 리스트에 값을 추가하면, GC가 처리할 틈도 없이 메모리가 가득 찹니다. 결국 OutOfMemoryError가 터질 수도!앱/시스템 멈춤UI가 무한 루프에 묶이면? 사용자는 아무것도 못합니다. 입력도 클릭도 안 먹혀요. (응답 없음!..

자료구조 - 스택(Stack)

🎁 스택(Stack) 완전 정복"책을 한 권씩 쌓았다가, 위에서부터 하나씩 꺼내본 적 있죠?"스택은 바로 그런 구조예요.📌 스택이란?스택(Stack)은 데이터를 한쪽 방향으로만 넣고 꺼내는선형 자료구조(linear data structure) 입니다. 가장 마지막에 넣은 데이터가 가장 먼저 나오는 구조🔁 LIFO 구조용어뜻LIFOLast In, First Out – 나중에 들어온 게 먼저 나감🎯 이렇게 생각하면 쉬워요🥔 프링글스 통👀 프링글스 과자 아시나요? 원통 모양의 뚜껑이 있는 통이랍니다 🥫과자는 한 방향(위에서)으로만 꺼낼 수 있어요가장 나중에 넣은 과자가 제일 먼저 나와요통 아래에 있는 과자를 꺼내려면? 👉 윗 과자들을 먼저 다 먹어야 해요!🍟 그래서 프링글스는 스택이에요:..

BOM이 뭔가요?

📎 BOM이 뭘까?파일 앞에 붙은 자기소개 쪽지! 🏷️파일 인코딩 공부하다가 BOM이라는 게 나왔는데, 처음엔 뭔지 몰라서 한참 찾아봤습니다.알고 나니 꽤 단순한 개념이라 정리해봤어요 😊🧠 BOM이란?BOM은 Byte Order Mark의 줄임말입니다.파일 맨 앞에 붙어서 "이 파일은 어떤 인코딩이고, 바이트는 이렇게 읽어주세요!" 라고 알려주는 작은 쪽지입니다.📦 BOM이 왜 필요할까요?컴퓨터는 문자를 바이트로 저장합니다.그런데 같은 문자도 바이트를 어떤 순서로 저장하느냐에 따라 전혀 다른 값이 될 수 있어요.예: 문자 'A'를 UTF-16으로 저장할 때Big Endian: 00 41 → 큰 자리 바이트(00)가 먼저Little Endian: 41 00 → 작은 자리 바이트(41)가 먼저순서가..