Computer Science 11

보수(부호-크기, 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은 _Byte Order Mark_의 줄임말이에요.📎 "이 파일은 어떤 인코딩이고, 바이트는 이렇게 읽어주세요!"라고 맨 앞에 붙어있는 작은 쪽지입니다.📦 BOM이 왜 필요할까요?예: 문자 'A'를 2바이트로 저장해야 할 때UTF-16에선 'A'가 00 41로 저장되기도 하고반대로 41 00일 수도 있어요!✅ 순서를 바꾸면 다른 문자로 잘못 읽힐 수 있죠.그래서 이때 “나는 Big Endian이에요!” 또는“Little Endian이에요!” 라고 말해주는 게 바로 BOM이에요.🔍 BOM, 직접 보면 이렇게 생겼어요인코딩BOM 값 (Hex)의미UTF-8 with BOMEF BB BF굳이 말하자면 “나 UTF-8이야~”UTF-16 BEFE FF큰 바이트가 먼저UTF-16 LEF..

변수 섀도잉(Shadowing)

겉에 있는 줄 알았는데, 안에 또 있다?👇👇🏼👇🏻그래서 우리는 this를 써요🧠 변수 섀도잉이란?같은 이름의 변수가 중첩된 범위(scope)에 다시 선언되어 바깥 변수를 가리는 현상즉, 밖에 선언한 변수와 안쪽(함수나 블럭 등)에 선언한 변수 이름이 같을 때,가까운(안쪽) 변수가 우선시되어 바깥 변수는 "섀도잉" 당합니다.⁉️ 왜 섀도잉이 문제일까?문제 상황설명🤯 값이 잘못 들어감의도한 바깥 변수가 아니라 안쪽 지역 변수에 값이 들어감🧪 디버깅 어려움"값을 설정했는데 왜 적용이 안 되지?" 하는 상황 발생👀 가독성 저하같은 이름이 중복되면 읽는 사람도 혼란✨ 섀도잉 in 4개 언어 + 해결 방법 정리🟨 Java: this 키워드로 해결public class User { String..

함수형 프로그래밍

🌱 함수형 프로그래밍이란?“함수처럼 생각하고, 수학처럼 코딩하자”함수형 프로그래밍(Functional Programming, FP)은 함수(function)를 중심으로 사고하는 프로그래밍 패러다임이에요.💡 핵심 개념 요약함수는 값처럼 다룬다 (일급 객체)상태를 바꾸지 않는다 (불변성)순수 함수만 사용한다함수를 조합해서 새로운 함수를 만든다 (합성)🧠 왜 함수형 프로그래밍을 써?이유설명✅ 가독성이 높다함수 자체가 의미 있는 단위가 됨✅ 테스트가 쉽다같은 입력 → 같은 출력 (순수함수)✅ 병렬 처리에 강하다상태를 바꾸지 않으니까 충돌 없음✅ 오류가 줄어든다부작용(side effect)을 없애니까🔍 대표적인 함수형 언어들언어특징JavaScript일급 함수 지원, 함수형 기법 많이 씀Pythonmap, ..

Computer Science 2025.04.01

유니코드(Unicode)와 아스키 코드(ASCII)

🔤 문자 인코딩이란? (Character Encoding)컴퓨터는 문자를 직접 이해하지 못합니다.따라서 우리가 쓰는 글자(A, 가, 😊) 를 숫자(코드)로 바꿔 저장하는 방식이 필요하죠.이걸 문자 인코딩이라고 해요!📌 문자 인코딩의 필요성컴퓨터는 0과 1 (이진수) 밖에 모릅니다.우리가 쓰는 문자(예: A, 가, 😊)는 기계가 이해할 수 없는 상징이에요.따라서 문자를 숫자로 매핑해서 저장하는 표가 필요합니다.🧮 ASCII (아스키 코드)✅ ASCII란?ASCII (American Standard Code for Information Interchange)1960년대에 만들어진 영문자 기반 문자 인코딩 표준이에요.특징설명비트 수7비트 (0~127)포함 문자영어 대/소문자, 숫자, 특수기호확장성한글..