math717의 등록된 링크

키자드에 등록된 총 126개의 포스트를 확인하실 수 있습니다.

Naver Blog

[입문자를 위한] 자바스크립트는 브라우저 vs Node.js 어디서 실행될까? 완벽 정리

① 자바스크립트는 어디서 실행될까? 1 코드를 "쓴다"와 "실행한다"는 다르다 → 코드를 "쓴다"는 건 그냥 명령어를 적어놓는 것이지만, 이걸 실제로 읽고 실행을 해줄 무언가가 있어야 하는데, 없기 때문에 적어놓기만 하면 아무 일도 일어나지 않음 → 예를 들어, 자바스크립트 코드를 메모장에 저장을 해도, 이 코드를 실행해주는 프로그램(실행 환경)이 없기 때문에, 자체로는 아무 일도 일어나지 않음 → 실행해주는 프로그램이 없으면, 마치 요리사가 없는 레시피처럼 자바스크립트 코드는 그냥 의미 없는 텍스트일 뿐임 2 비유로 이해해보자 - "레시피 vs 요리사" → 자바스크립트 코드는 요리 레시피처럼, 실행 방법만 적어둔 문서이고, 자바스크립트를 실행해주는 실행 환경은 요리사와 같음 → 아무리 맛있는 요리 레시피가 있어도, 요리사가 없다면 요리는 만들어지지 않는 것처럼, 자바스크립트도 코드를 아무리 잘 적어놔도, 그걸 실제로 실행해주는 '실행 환경(요리사)'이 없으면 작동하지 않음 3 같은

Naver Blog

JavaScript 개발 환경 설정 완벽 가이드 (브라우저 콘솔부터 VSCode까지) - 1

① JavaScript는 어떤 언어인가요? 1 JavaScript란? → 웹페이지에 움직임과 반응을 더하는 언어임 → 우리가 자주 사용하는 대부분의 웹사이트에도 JavaScript가 들어가 있음 → 만약 JavaScript가 없다면, 웹은 그냥 눌러도 반응 없는 종이 문서처럼 가만히 있음 2 웹을 구성하는 3가지 언어의 역할 언어 하는 일 비유로 설명하면 HTML 구조 만들기 (내용 배치) 뼈대 CSS 스타일 꾸미기 (색, 폰트, 여백 등) 옷, 헤어스타일, 화장 JavaScript 동작과 반응 처리 (버튼 클릭, 입력 확인 등) 뇌, 근육, 신경 3 예시로 이해해 볼까요? → 버튼을 클릭했더니 팝업 창이 뜨고, 로그인 창에 아이디와 비밀번호를 입력하면 바로 확인해주고, 숫자를 입력하면 자동으로 계산해주는 계산기, 페이지를 스크롤할 때 이미지가 부드럽게 움직이는 효과들이 있음 → 이런 사용자와의 상호작용이 필요한 동작들은 전부 JavaScript 덕분에 가능한 일임 → 즉, 웹사이트

Naver Blog

JavaScript 개발 환경 설정 완벽 가이드 (브라우저 콘솔부터 VSCode까지) - 2

① VSCode 확장 프로그램 추천 1 확장(Extension)이란? → 자동완성, 오류 검사, 코드 정리 등 필요한 기능을 플러그인처럼 추가해서 VSCode를 더 똑똑하게 만들어주는 도구임 → 설치 위치는 Ctrl + Shift + X를 누른 후 원하는 기능을 검색하여 Install을 클릭하기 2 필수 5종 (설치 순서 = 사용 빈도) 1) Live Server → VSCode에서 HTML을 저장하면 브라우저에 자동으로 반영해주는 확장 기능임 → HTML 파일을 우클릭하여 "Open with Live Server"를 클릭하기 2) Prettier → Ctrl + S만 누르면 코드를 자동으로 정리해주는 확장 기능임 → File에서 Auto Save랑 Format On Save 체크만 하면 끝임 3) ESLint → JavaScript 코드를 실시간으로 검색해서 문법 오류나 스타일 문제를 실시간으로 표시해주는 확장 기능임 → 설치 후 "Enable ESLint" 버튼을 누르기 4) A

Naver Blog

C# ObservableCollection 정리: 사용법부터 주의사항까지 한눈에

① 개념 1 컬렉션(Collection) 정의 → 여러 데이터를 그룹으로 담는 자료구조 2 특별한 컬렉션이 필요한 이유 → 기존 컬렉션은 내부 데이터가 바뀌어도 외부에 알리지 못함 → 데이터 변경 시 화면(UI)나 시스템에 자동 반영되지 않아 수동 처리 필요 3 ObservableCollection<T> 정의 → 내부 데이터가 바뀌면 자동으로 알림을 주는 제네릭 리스트 → 이름 그대로 관찰 가능한 컬렉션이라는 뜻 4 감지하는 컬렉션 구조 변화 → 항목 추가(Add) → 항목 삭제(Remove) → 특정 위치에 삽입(Insert) → 항목의 순서 변경(Move) 5 감지하지 않는 것 → 컬렉션 안의 항목이 가진 속성 값 변경 6 가능한 타입들 → 제네릭 클래스이므로 어떤 타입이든 사용 가능 7 동작화는 과정을 개념으로 이해 → 내부에서 변화가 생기면 이벤트(Event)를 통해 외부에 알림 → 외부에서 이 알림을 구독하고 있다면 그 변화를 인지할 수 있음 → 실제 이벤트 처리나 구독 방

Naver Blog

C# NameValueCollection 정리 – 개념부터 사용법, 예제까지 쉽게 배우기

① 개념 1) 정의 → C#에서 제공하는 특수한 컬렉션 → 하나의 키(Key, 문자열)에 여러 개의 값(Value, 문자열)을 저장할 수 있도록 설계된 자료구조 2) 목적 → 하나의 이름에 여러 개의 값이 필요한 상황, 즉 멀티맵(Multi-map) 용도 3) 위치와 사용 준비 → 네임스페이스는 System.Collections.Specialized → 어셈블리는 System.dll using System.Collections.Specialized; 4) 상속 및 구현 구조 → 클래스는 NameValueCollection → 상속은 NameObjectCollectionBase의 Object → 구현 인터페이스는 ICollection과 IEnumerable → foreach로 순회는 가능하지만 LINQ는 직접 지원하지 않음 5) 특징 항목 설명 키 타입 string 값 타입 중복 키 하나의 키에 여러 개의 값을 저장하는 것을 허용 키 순서 보장되지 않음 null 키 예외가 발생하므로

Naver Blog

블로그의 내용을 수정하겠습니다!

지금까지 블로그를 적다보니 빠진 부분이나 뭔가 미흡한 부분들이 많이 보였습니다. 그래서 하나씩 차례대로 수정을 하겠습니다. 다만 제가 정보를 찾으면서 하기도 하고, 새로운 정보도 같이 올리고 하다 보니 시간이 걸릴 수 있다는 점을 알아두시기 바랍니다. 수정한 것들은 아래에 하나씩 추가해나가겠습니다!!! 4차 산업혁명 수정 완료 https://m.blog.naver.com/math717/223605462649 개발 환경 수정 완료 https://m.blog.naver.com/math717/223608965405 VSCode 수정 완료 https://m.blog.naver.com/math717/223610498621 버전 수정 완료 https://m.blog.naver.com/math717/223638247507 제어 구조 수정 완료 https://m.blog.naver.com/math717/223649341985 코딩 수정 완료 https://m.blog.naver.com/

Naver Blog

C# StringCollection 정복: 기초 사용법부터 정렬, 반복, 주의사항까지 한눈에

① 개념 1) 기본 개념 → 문자열(String)만 저장할 수 있는 특별한 컬렉션 → 여러 개의 문자열을 저장하고 관리하는 데 사용 → 쉽게 말해 문자열 전용 상자 또는 책장 같은 역할 2) 만들어진 배경 → .NET Framework 1.0 시절에 만들어짐 → 당시에는 제네릭(Generic) 기능이 없어, 특정 타입만 안전하게 다룰 수 있는 컬렉션이 필요 → 그래서 문자열만 담을 수 있는 컬렉션인 StringCollection이 탄생 3) 내부 구조 개념 → 내부적으로는 모든 타입을 담을 수 있는 ArrayList를 사용 → 외부에서는 오직 문자열만 추가/삭제할 수 있도록 제한되어 있어 타입 안전성을 확보 → 즉, 내부는 유연하고 외부는 안전한 구조 4) COM 호환 목적 → 마이크로소프트의 오래된 기술인 COM(Component Object Model)과 잘 연동되도록 설계됨 → COM과 데이터 교환을 할 때 문자열 배열보다 다루기 쉬운 형태로 사용 5) 참조 타입 클래스 → 어

Naver Blog

C# StringDictionary 정리 – 기초 사용법부터 반복문 예제까지 쉽게 배우기

① 개념 1) 정의 → .NET에서 제공하는 문자열(string) 전용 키-값 쌍 컬렉션 → 이름 그대로 키와 값 모두 문자열만 저장할 수 있도록 설계 → 구조가 단순하고 의도가 명확 3) 속하는 네임스페이스 → 이 클래스는 System.Collections.Specialized 네임스페이스에 포함되어 있음 4) 언제부터 존재하였는가? → .NET Framework 1.1부터 제공된 오래된 컬렉션 → 제네릭이 도입되기 전, Dictionary<TKey, TValue>가 없던 시절에 문자열 데이터를 저장하기 위해 만들어짐 5) 알아두어야 하는 이유 → 오래된 .NET 프로젝트(윈폼, 웹폼 등)를 유지보수할 때 → 레거시 코드나 설정 정보를 다루는 코드에서 종종 등장 → 문자열만 다루는 간단한 데이터 구조를 원할 때 구조가 직관적 6) 특징 → 문자열만 저장 가능하므로 타입이 고정되어 있어 실수 가능성이 적음 → 비교적 단순한 구조라 빠르게 이해하고 사용할 수 있음 → 키는 대소문자를

Naver Blog

C# HybridDictionary 완벽 정리 – 개념부터 사용법, 반복문 탐색과 예외까지 쉽게 설명

① 도입 → 프로그래밍을 하다 보면 사용자 이름과 권한, 설정 이름과 값, 제품 코드와 가격 등 우리가 다루는 수많은 정보들이 키(key)와 값(value) 형태로 저장하고 관리해야 할 때가 많음 → C#에서는 이런 데이터 구조를 다룰 수 있도록 다양한 컬렉션 클래스를 제공 → 처음 C#을 배우면 대부분 Dictionary<TKey, TValue> 하나만 써도 충분하다고 느낄 수 있지만, .NET에는 여러 가지 Dictionary 계열 클래스가 존재 → HybridDictionary는 그중에서도 다소 생소할 수 있지만, 작은 데이터는 가볍고 빠르게, 데이터가 많아지면 자동으로 빠른 구조로 전환되는 특징이 있는 자료구조 → 이런 성질 덕분에 데이터 수가 유동적인 상황에서 성능과 메모리 사용량의 균형을 맞추는 데 유용 → 실무에서도 Dictionary<string, string>만 계속 쓰다 보면, 데이터가 늘어나면서 성능 문제나 메모리 낭비 이슈가 발생하는 경우가 많음 → 이런 상황을

Naver Blog

C# OrderedDictionary 완전 정복 — 사용법, 메서드, 주의할 점까지 총정리

① 개념 1) 정의 → 키-값 쌍을 저장하면서 삽입된 순서를 유지해주는 특별한 컬렉션 → 일반 Dictionary처럼 key를 기준으로 데이터를 관리 → 중요한 차이점은 데이터를 넣은 순서 그대로 유지 2) 정의 위치 및 버전별 존재 여부 → System.Collections.Specialized 네임스페이스 안에 속함 → .NET Framework는 System.dll, .NET Core/5+는 System.Collections.Specialized.dll 어셈블리에 속함 3) 비제네릭 컬렉션 → 제네릭(Generic) 자료형이 아님 → Key와 Value 모두 object 타입으로 저장되며, 사용 시 형 변환이 필요할 수 있음 4) 내부 구조 및 작동 방식 (간단한 이해) → 키를 빠르게 찾기 위한 목적으로 Hashtable, 삽입 순서를 유지하기 위한 목적으로 ArrayList 이 두가지 자료구조를 내부적으로 조합해 동작 → 이 구조 덕분에 OrderedDictionary는 K

Naver Blog

JavaScript 완전 정리: 개념부터 역사, 역할, HTML·CSS 관계까지 한눈에!

① 왜 JavaScript를 알아야 하나? 1 우리가 웹사이트를 사용할 때 겪는 자연스러운 순간들 → 웹사이트를 사용할 때, 버튼을 누르자마자 화면이 바로 바뀌고, 검색창에 글자를 쓰기만 했는데 추천 단어가 자동으로 뜨고, 아래로 스크롤했더니 새로운 글들이 계속해서 나타나고, 마우스를 올렸더니 이미지가 살짝 반응하면서 바뀌는 이런 경험을 해본 적이 있음 → 이런 경험들을 너무 당연하게 느껴지지만, 사실은 그 안에 '어떤 기술'이 숨어 있기 때문에 가능한 일 → 우리가 편하게 누르고, 쓰고, 내리고, 움직이는 그 순간들에도 보이지 않는 '작동 원리'가 있음 2 웹사이트는 원래 이렇게 '살아 있는 공간'이 아님 → 우리가 지금 쓰는 웹사이트처럼 버튼을 누르면 반응하고, 화면이 움직이고, 입력창이 살아 있는 듯한 모습은 처음부터 있었던 게 아님 → 예전 웹은 그냥 글이 적혀 있고, 이미지가 한두 개 있고, 링크를 누르면 새로운 페이지로 '넘어가기만' 했음 → 무언가를 눌러도 즉시 반응하지

Naver Blog

C# HashSet&lt;T&gt;

① 개념 1 정의 → .NET에서 제공하는 중복 없는 데이터 집합을 표현하는 컬렉션 클래스 → 수학에서의 집합(Set) 개념을 프로그래밍으로 구현한 구조 2 핵심 → 중복을 허용하지 않기 때문에 동일한 값은 HashSet에 한 번만 저장 → 데이터가 저장된 순서, 정렬된 순서를 유지하지 않음 → 데이터의 존재 여부를 확인할 때 해시 테이블을 기반으로 동작하여 빠름 3 설계 목적 → 중복 없는 값의 집합을 관리하고, 특정 값이 존재하는지 빠르게 확인하는 상황을 위해 만들어진 자료구조 4 이해하기 쉬운 비유 → 값이 이미 있다면 또 추가되지 않으며, 순서도 상관없이 "있다 / 없다"를 판단하는 구조 → 체크리스트 또는 도장 스탬프를 생각 ② 기본 사용법 1 HashSet<T> 선언 1-1 코드 HashSet<T> 변수명 = new HashSet<T>(); → HashSet<T>는 제네릭 컬렉션 → 원하는 자료형을 <T>에 지정하여 선언 2 값 추가 → Add() 메서드로 값을 추가 →

Naver Blog

C# SortedSet&lt;T&gt;

① 개요 1 정의 → C#에서 제공하는 제네릭 컬렉션 클래스 → 정렬된 구조로, 중복되지 않는 데이터들의 집합 → 집합의 특성을 가지면서도, 항상 정렬된 상태를 유지하는 컬렉션 2 사용하는 상황 → 중복을 허용하지 않으면서, 항상 정렬된 형태로 데이터가 유지되어야 할 때 사용 3 내부 작동 방식 → 내부적으로 이진 탐색 트리(Balanced Binary Search Tree), 정확히는 Red-Black Tree 기반으로 작동 → Red-Black Tree는 https://m.blog.naver.com/math717/223832794291에 정리해놨으니 참고 4 포함되는 네임스페이스 using System.Collections.Generic; 5 .NET Framework 지원 버전 → .NET Framework 4.0 이상에서 사용 가능 → .NET Core, .NET 5 이상에서도 모두 지원 ② 기본 구조 및 선언 1 기본 선언 방식 → SortedSet<T>는 제네릭(Gener

Naver Blog

C# ConcurrentBag&lt;T&gt;

① 개념 1 정의 → C#의 System.Collections.Concurrent 네임스페이스에 포함된 제네릭 컬렉션 클래스 → 데이터를 순서에 상관없이 담고 꺼낼 수 있는 구조를 가지고 있음 2 이름 의미 Concurrent → 여러 스레드가 동시에 작업해도 문제없이 작동한다는 의미 Bag → 담을 때나 꺼낼 때 특정 순서를 따지지 않는 구조를 의미 3 기본 성격 → 순서가 중요하지 않은 데이터를 다루기 위해 설계 → 데이터를 추가하거나 꺼낼 때 순서를 보장하지 않음 → 모으는 데 초점을 맞춘 컬렉션 4 포함된 네임스페이스 및 사용 가능한 버전 네임스페이스 System.Collections.Concurrent 사용 가능한 버전 → .NET Framework 4.0 이상 → .NET Core → .NET 5 이상 모든 버전 5 스레드 안전(Thread-Safe) → 설계 자체가 스레드 안전 → 여러 스레드가 동시에 접근하고 수정해도 데이터 무결성이 보장 ② 사용 목적 1 다수

Naver Blog

C# ConcurrentQueue&lt;T&gt; 정리: 멀티스레드 안전 큐 사용법, 예제, 주의사항까지!

① 멀티스레드 환경과 동기화 문제 1 멀티스레드 정의 → 멀티스레딩(Multithreading)은 하나의 프로그램에서 동시에 여러 작업을 처리하는 기술 → 마트에서 물건을 사고 나서 계산대 줄을 보면 사람들이 여러 계산대에 나눠서 줄이 분산되어 계산이 더 빨라지는 것을 생각하면 이해하기가 쉬움 2 동기화 문제(synchronization issue) 혹은 경쟁 상태(race condition) → 멀티스레드 환경에서 공유 자원에 여러 스레드가 동시에 접근하면서 문제가 발생 → 해결하기 위해서는 연산을 원자적으로 처리 1-1 코드 using System; using System.Threading; class Program { // 공유 자원 (모든 스레드가 접근) static int count = 0; static void Main() { // 1만 번씩 count를 증가시키는 두 스레드 Thread t1 = new Thread(Increment); Thread t2 = new Thr

Naver Blog

C# ConcurrentStack&lt;T&gt; 정리 초보도 이해하는 쓰레드 안전 스택 사용법 & 예제

① 알아야 하는 이유 1 동시에 처리되는 세상 속 프로그래밍 → 요즘 우리가 사용하는 프로그램은 대부분 여러 작업을 동시에 처리 → 스마트폰에서 음악을 들으면서 사진을 편집하고, 알림도 받는 상황을 생각하면 이해가 쉬움 → 프로그램 내부에서도 여러 작업이 동시에 실행되며, 이를 멀티테스킹 혹은 동시성(Concurrency)라고 부름 2 동시에 처리되면 생기는 문제 → 여러 작업이 동시에 같은 데이터를 건드릴 때 발생 → 두 개의 작업이 동시에 데이터를 꺼내거나 넣는다면, 순서가 꼬이거나 데이터가 손상될 수도 있음 → 이런 현상을 동기화 문제라고 부르며, 실제로 프로그램이 잘못 작동하는 주요 원인 중 하나 ② 기본 개념 1 스택(Stack) → 데이터를 쌓는 자료구조 → 마지막에 넣은 데이터가 가장 먼저 나오는 LIFO(Last-In, First-Out) 구조를 가짐 → 급식 시간에 쌓여진 식판을 사람들이 맨 위에서부터 하나씩 가져가는 것을 생각하면 이해가 쉬움 → 스택에 대해 더 많

Naver Blog

C# BitArray

이번에는 C#의 BitArray에 대해 정리하겠다. ① 비트(bit) 정의 → 참/거짓 (true/false) 또는 1/0 중 하나의 값을 가지는 가장 작은 데이터 단위 → 두 가지상태 중 하나만 표현 가능 ② 개념 → 여러 개의 비트를 순서대로 저장하는 특수한 배열 → 각각의 위치(인덱스)에 있는 값은 켜짐(true) 또는 꺼짐(false) 상태를 가질 수 있음 ③ 사용 목적 1) 대량의 이진 상태를 저장하고 관리할 필요가 있을 때 → 수많은 항목에 대해 두 가지 상태(예/아니오, 적용/미적용, 활성/비활성 등)를 간결하게 기록 가능 2) 논리적 상태의 변화를 시간이나 순서에 따라 추적할 때 → 특정 이벤트가 발생했는지 여부를 시간 순으로 기록 → 항목별로 상태 변화 기록이 필요 3) 상태 기반으로 대상을 구별하거나 필터링할 때 → 항목들이 어떤 조건을 만족하는지 여부를 빠르게 구별하거나 필터링할 수 있음 → 복잡한 조건 없이도 간단한 상태 비교로 처리가 가능 4) 시스템 리소스를

Naver Blog

C# LinkedList&lt;T&gt;

이번에는 C#의 LinkedList<T>에 대해 정리하겠다. ① 개념 1) 정의 → .NET에서 제공하는 컬렉션 클래스 중 하나 → 노드(Node)들이 서로 연결된 형태로 데이터를 저장 ※ 노드 정의 → 하나의 Value와 링크를 함께 가지고 있는 단위 Value : 실제 값 링크 : 다음 노드(또는 이전 노드)를 가리키는 연결 정보 노드(Node)를 그림으로 표현한 것 ※ 원래는 Previous가 이전 노드를 가리키는 참조인데, 편하게 볼려고 Prev로 적음 2) 연결 구조 → 양방향 연결 리스트(Doubly Linked List) → 노드들은 양쪽으로 연결되어 있어 앞으로, 뒤로 이동 가능 노드의 연결 구조 3) 제네릭 <T> → 저장할 값의 데이터 타입을 의미 4) 사용 이유 리스트의 앞이나 중간에 자주 삽입하거나 삭제할 때 유리 → 노드 단위로 연결되어 있어 중간에 데이터를 끼워 넣거나 빼는 작업이 빠르게 이루어짐 → 자리 이동 없이도 구조 변경이 가능 요소 간의 순서

Naver Blog

C# Dictionary&lt;TKey, TValue&gt;

이번에는 C#의 Dictionary<TKey, TValue>에 대해 정리하겠다. ① 개념 1) 키-값 쌍으로 데이터를 저장하는 컬렉션 → 데이터를 Key와 Value의 쌍으로 저장하는 자료구조 → Key는 고유(중복 불가)하며, 해당 키를 통해 연결된 Value(값)에 접근 가능 2) 제네릭(Generic) 컬렉션 → 키와 값의 데이터 타입을 직접 지정 가능 3) 해시 테이블 기반의 내부 구조 → 내부적으로 해시 테이블(hash table)을 사용하여 데이터를 저장 → 키를 기준으로 매우 빠른 검색 속도(O(1))를 제공 4) 요소의 순서를 보장하지 않음 → 데이터를 저장한 순서를 보장하지 않음 → .NET 5.0 이후에는 순서가 유지되는 경향은 있지만, 공식적으로 보장되지 않음 5) 키는 변경 불가능한(immutable) 타입 사용이 권장 → 값이 변경되지 않는 타입을 사용하는 것이 안전 → 변경 가능한 타입을 키로 사용하면 내부 해시값이 달라져 예기치 않은 동작이 발생 가능 6)

Naver Blog

C# SortedDictionary&lt;TKey, TValue&gt;

이번에는 C# SortedDictionary<TKey, TValue>에 대해 정리하겠다. ① 개념 1) 정의 → C#에서 제공하는 제너릭 컬렉션 클래스 → 데이터를 키(Key)와 값(Value) 쌍으로 저장하는 자료구조 2) 이름의 의미 Sorted : 정렬된 상태를 유지 Dictionary : 키-값 쌍으로 데이터를 저장 3) 저장 규칙 → 키는 중복될 수 없음 → 값은 중복될 수 있음 → 저장 시 Key를 기준으로 정렬된 상태를 유지 4) 구현 인터페이스 IDictionary<TKey, TValue> ICollection<KeyValuePair<TKey, TValue>> IEnumerable<KeyValuePair<TKey, TValue>> IReadOnlyDictionary<TKey, TValue> IReadOnlyCollection<KeyValuePair<TKey, TValue>> IEnumerable ② 구조 1) 내부 구조 → Red-Black Tree 기반

Naver Blog

C# ConcurrentDictionary&lt;TKey, TValue&gt;

이번에는 C# ConcurrentDictionary<TKey, TValue>에 대해 정리하겠다. ① Dictionary(TKey, TValue) 개념 1) 정의 → 키(Key)와 값(Value) 쌍으로 데이터를 저장하는 자료구조 → 키를 사용해 값을 빠르고 직접적으로 검색 가능 2) 키와 값 → 키는 고유해야 하며 중복 저장이 불가 → 값은 중복 가능 → 키를 기준으로 값을 저장하거나 찾음 3) 데이터 검색 → 키를 이용해 값을 바로 가져올 수 있음 4) 키 존재 여부 확인 → 없는 키를 접근하면 예외가 발생 → ContainsKey로 키 존재 여부를 확인하는 습관이 필요 5) 순서 없음 → 데이터를 저장한 순서대로 꺼내지 않음 → foreach로 순회할 때는 순서를 예측할 수 없음 6) 제네릭 기반 → 타입 안전성을 보장하고 컴파일 시점에 오류를 막음 ※ Dictionary<TKey, TValue>에 대해 더 알고 싶으면 아래 링크로 접속 https://m.blog.naver.co

Naver Blog

프로그래밍 언어 정리 링크 모음

내 블로그를 많은 사람들이 네이버를 중심으로 많이 찾고 있다. 하지만 내가 작성하고 있는 글이 점점 많아지다 보니 차라리 링크 모음을 만들어서 조금이라도 사람들이 쉽게 찾을 수 있게 할려고 한다. ① 공통 DB(데이터베이스) : https://m.blog.naver.com/math717/223797267286 VSCode : https://m.blog.naver.com/math717/223610498621 개발 환경 : https://m.blog.naver.com/math717/223608965405 버전 : https://m.blog.naver.com/math717/223638247507 백엔드 : https://m.blog.naver.com/math717/223681047381 백엔드 라이브러리 : https://m.blog.naver.com/math717/223782190362 백엔드 프레임워크 : https://m.blog.naver.com/math717/22370100364

Naver Blog

C# ArrayList

이번에는 C#의 ArrayList에 대해 정리하겠다. ① 개념 → C#에서 제공하는 동적 배열(Dynamic Array) 자료구조 → 요소를 추가하거나 삭제할 때 크기가 자동으로 조정 → System.Collections 네임스페이스에 포함 → 일반 배열(Array)의 한계를 보완하기 위해 사용 → 내부적으로 object 타입을 기반으로 동작 → 여러 가지 타입의 데이터를 저장 가능 ② 필요성 1) 배열의 크기 제한 문제 해결 → 데이터 추가 및 삭제가 빈번한 경우에도 효율적으로 관리 가능 2) 유연한 데이터 저장 → 숫자, 문자열, 객체 등 다양한 타입을 한 리스트에 저장 가능 3) 컬렉션 기능 활용 가능 → 코드의 가독성과 유지보수성을 향상 ③ 사용법 1) 네임스페이스 추가 → ArrayList는 System.Collections 네임스페이스에 포함 → 사용하려면 먼저 추가 using System.Collections; 2) 선언 및 초기화 기본 선언 1-1 코드 using S

Naver Blog

C# List&lt;T&gt;

이번에는 C#의 List<T>에 대해 정리하겠다. ① 개념 1) 정의 → 제네릭(Generic) 기반의 동적 배열 → 배열의 한계를 극복하고 데이터를 보다 쉽게 추가/삭제할 수 있도록 설계 2) 주요 특징 동적 크기 조정 가능 → 필요에 따라 자동으로 크기가 조정 삽입 및 삭제 용이 → 배열보다 편리하게 요소를 추가/삭제 가능 제네릭(Generic) 지원 → 다양한 타입의 데이터를 타입 안정성을 유지하면서 저장 가능 다양한 메서드 제공 → 요소 검색, 정렬, 변환 등의 기능 제공 3) 동작 방식 내부적으로 배열을 사용 → 배열을 기반으로 동작 → 크기가 자동으로 조정 → 새로운 요소를 추가하면 내부 배열의 크기가 일정 비율로 증가하여 성능을 최적화 제네릭(Generic) 활용 → 제네릭 컬렉션이므로, 특정 타입을 지정하여 사용 가능 → 타입 안정성을 유지하면서 컴파일 타임에 오류를 방지 가능 List<데이터_타입> 리스트명 = new List<데이터_타입>(); ② 선언과

Naver Blog

C# Hashtable

이번에는 C#의 Hashtable에 대해 정리하겠다. ① 개요 1) 정의 → 키(Key)와 값(Value) 쌍을 저장하는 컬렉션 클래스 → 키를 사용하여 값을 빠르게 검색 가능 → 내부적으로 해시 함수를 이용하여 데이터를 저장하고 검색 2) 특징 키(Key)와 값(Value)으로 구성 → 키를 사용하여 값을 저장 → 동일한 키를 사용해 값을 검색하거나 삭제 가능 중복된 키를 허용하지 않음 → 동일한 키를 가진 요소를 추가하려고 하면 예외(ArgumentException)가 발생 순서가 보장되지 않음 → Hashtable은 데이터가 추가된 순서를 유지하지 않음 다양한 데이터 타입 저장 가능 → 키와 값 모두 object 타입이므로 다양한 타입의 데이터를 저장 가능 3) 필요한 이유 → 키(Key)를 사용하여 데이터를 검색하므로 빠른 조회(O(1))가 가능 ② 선언과 초기화 1) 선언 → C#에서 Hashtable은 System.Collections 네임스페이스에 포함 → 객체를

Naver Blog

C# Queue&lt;T&gt;

이번에는 C#의 Queue에 대해 정리하겠다. ① 개념 1) 정의 → 먼저 들어간 데이터가 먼저 나오는 FIFO (First-In-First-Out) 방식의 자료구조 → 데이터를 순서대로 처리해야 하는 상황에서 사용 2) 동작 원리 → 두 개의 끝(front, rear)을 사용하여 데이터를 관리 Enqueue(입력) → 데이터를 뒤(rear) 에 추가 Dequeue(출력) → 가장 먼저 들어온 데이터를 앞(front) 에서 제거 ② Queue<T> 선언과 초기화 1) Queue<T> 개념 → 제네릭(Generics)을 사용한 큐 자료구조 → 특정 데이터 타입을 저장하고 관리 가능 → C#에서는 System.Collections.Generic 네임스페이스에서 제공하는 제네릭 컬렉션 클래스 2) 선언 방법 → 큐를 사용하려면 먼저 Queue<T> 객체를 선언 3) 초기화 빈 Queue 생성 1-1 코드 using System.Collections.Generic; // Queue<T

Naver Blog

C# Stack&lt;T&gt;

이번에는 C# Stack에 대해 정리하겠다. ① 개념 1) 정의 → 후입선출(LIFO, Last In First Out) 방식으로 동작하는 자료구조 → 나중에 들어온 데이터가 먼저 나가는 구조 2) 작동 방식 데이터 추가 → Stack의 맨 위(top) 에 데이터를 추가 데이터 제거 → Stack의 맨 위(top) 요소를 제거하고 반환 3) 장점 → 데이터 저장 및 관리가 단순하고 빠름 → 메모리를 필요한 만큼만 사용 가능 → 특정 알고리즘(재귀 호출, 되돌리기 기능 등)에 최적화 4) 단점 → 중간 데이터를 검색하거나 수정하기 어려움 → 후입선출 구조로 인해, 데이터 접근이 제한적임 → 크기가 커지면 Stack Overflow 발생 가능 5) 사용되는 주요 알고리즘 재귀 함수(Recursion) 처리 → 함수 호출 시 스택을 사용하여 실행 상태 저장 괄호 검사(Valid Parentheses) → 여는 괄호는 Push() → 닫는 괄호는 Pop() DFS(깊이 우선 탐색)

Naver Blog

C# SortedList&lt;TKey, TValue&gt;

① 개념 1) 정의 → C#에서 제공하는 키(Key)-값(Value) 쌍을 저장하는 컬렉션 타입 → 항상 키를 기준으로 자동 정렬된 상태로 데이터를 저장 2) 목적과 용도 → 항상 정렬된 상태로 데이터를 유지하고 싶을 때 → 키로 빠르게 검색하거나, 정렬된 키 순서대로 데이터를 순회하고 싶을 때 → 인덱스 기반 접근이 필요한 경우 3) 제네릭 vs 비제네릭 → .NET에서는 두 가지 버전의 SortedList가 존재 → 일반적으로는 SortedList<TKey, TValue> 사용이 권장 버전 네임스페이스 특징 SortedList<TKey, TValue> System.Collections.Generic 제네릭 버전 타입 안정성 제공 가장 널리 사용 SortedList System.Collections 비제네릭 버전 박싱/언박싱 발생 현재는 거의 사용하지 않음 4) 내부 구조 및 정렬 방식 → 내부적으로는 배열 기반 자료구조로 관리 → 항목을 추가하거나 제거할 때, 항상 키 기준으로

Naver Blog

DB

이번에는 데이터베이스(DB : Database)에 대해 정리하겠다. ① 개념 1) 정의 → 데이터를 효율적으로 저장하고 관리하는 시스템 → 데이터를 체계적으로 저장하고 쉽게 검색, 수정, 삭제 가능 2) 데이터베이스 관리 시스템(DBMS : Database Management System) 정의 데이터베이스를 관리하는 소프트웨어 사용자가 데이터를 저장하고 처리할 수 있도록 돕는 도구 주요 기능 데이터 저장, 검색, 수정, 삭제 데이터 일관성 및 무결성 보장 보안 관리 및 접근 제어 데이터 백업과 복구 3) 데이터의 조직화 정의 → 데이터를 테이블 형태로 조직 → 테이블은 행(Row)과 열(Column)로 구성 행(row) → 하나의 데이터 단위 열(Column) → 데이터 항목 4) 데이터베이스의 주요 특징 일관성(Consistency) → 데이터베이스 내 데이터는 항상 규칙에 맞게 저장되고 처리 정합성(Integrity) → 데이터는 정확하고 신뢰할 수 있어야 함 → 비즈

Naver Blog

C# for문

이번에는 C#의 for문에 대해서 정리하겠다. ① 반복문 개념 → 특정 코드 블록을 여러 번 실행할 때 사용 → 같은 작업을 반복할 때 코드를 간결하게 작성 가능 → 반복문이 없으면 같은 코드를 여러 번 복사 & 붙여넣기 해야 하므로 유지보수가 어려워짐 ② for문 개념 → 반복문의 한 종류 → 정해진 횟수만큼 반복 실행할 때 사용 → 반복 횟수를 쉽게 제어할 수 있어 반복 횟수가 명확할 때 적합 ③ for문 기본 구조 1) 형식 for (초기식; 조건식; 증감식) { // 반복 실행할 코드 } 2) 구성 요소 초기식 반복을 시작할 때 한 번만 실행 보통 반복 횟수를 제어할 변수를 선언하고 초기값을 설정 조건식 반복을 계속할지 여부를 결정하는 논리 표현식 true이면 반복 실행 false이면 반복 종료 증감식 반복이 한 번 실행된 후 변수의 값을 변경하여 조건식에 영향을 줌 보통 변수 값을 증가 또는 감소 3) 실행 순서 (1) 초기식 실행 (반복 변수 초기화) (2) 조건식 평가

Naver Blog

C# foreach문

이번에는 C#의 foreach문에 대해 정리하겠다. ① 개념 1) 정의 → 컬렉션(배열, 리스트 등)의 요소를 하나씩 순회하면서 반복 작업을 수행하는 제어문 2) 역할 컬렉션 내 요소를 자동으로 순회 → 컬렉션의 크기를 직접 확인할 필요 없이 내부 요소를 하나씩 가져와 반복 실행 가능 코드를 간결하게 작성 → for문처럼 인덱스를 관리할 필요 없이, 직관적인 코드 작성이 가능 읽기 전용 방식으로 안전한 반복 처리 → 컬렉션을 수정할 수 없도록 동작하여, 실수로 데이터를 변경하는 것을 방지 가능 3) 사용 목적 → 배열이나 리스트의 모든 요소를 순차적으로 처리할 때 → 인덱스를 직접 다루지 않고 간단한 반복문을 작성하고 싶을 때 → 반복문에서 인덱스 초과 오류를 방지하고 싶을 때 ② 기본 구조 1) 기본 문법 foreach (데이터_타입 변수 in 컬렉션) { // 반복 실행할 코드 } 데이터_타입 → 컬렉션의 요소 타입과 일치 변수 → 컬렉션에서 가져온 요소를 저장하는 변수

Naver Blog

C# while문

이번에는 C#의 while문에 대해 정리하겠다. ① 기본 개념 1) 반복문의 필요성 → 프로그램에서 같은 작업을 여러 번 반복해야 할 때, 코드를 여러 번 복사해서 쓰는 것은 비효율적 → 반복문을 사용하면 같은 작업을 간결한 코드로 반복 실행 가능 2) while문의 역할 → while문은 특정 조건이 충족되는 동안(조건이 true인 동안) 코드 블록을 실행 → 조건이 false가 되면 while문 실행이 종료 3) while문을 사용하면 좋은 경우 → 반복 횟수를 미리 알 수 없는 경우 → 조건을 만족할 때까지 실행할 때 4) while문의 특징 → 조건이 처음부터 false라면 한 번도 실행되지 않을 수 있음 → 특정 조건을 만족하는 동안 계속 실행되므로, 조건이 false가 되는 로직이 중요 ② 기본 구조 1) 기본 형태 while (조건식) { // 반복 실행할 코드 } 2) 구성 요소 while → 반복문의 키워드 조건식 → true인 동안 {} 내부 코드 실행 { }

Naver Blog

C# do-while문

이번에는 C#의 do-while문에 대해 정리하겠다. ① 개념 소개 1) 반복문의 필요성 → 프로그램에서 같은 동작을 여러 번 실행하려면 반복문이 필요 → 반복문을 사용하면 같은 코드를 여러 번 작성하는 대신, 간결하고 효율적인 코드로 반복 작업을 수행 가능 2) do-while문의 개념 → 조건을 검사하기 전에 한 번은 무조건 실행되는 반복문 → 최소 한 번은 실행된다는 특징을 가짐 3) 실행 순서 (1) do 블록의 코드가 실행 (2) while의 조건을 검사 (3) 조건이 true이면 다시 do 블록을 실행하고 (2)번 과정으로 돌아감 (4) 조건이 false이면 반복문 종료 ② 기본 구조 1) 기본 형식 do { // 반복 실행할 코드 } while (조건); 2) 각 요소의 역할 do → 실행할 코드 블록을 시작 { } → 반복 실행할 코드를 감쌈 while (조건); → 조건이 true이면 do 블록을 다시 실행 → 조건이 false이면 반복을 종료 3) 기본 예제

Naver Blog

C# OOP

이번에는 C#의 객체 지향 프로그래밍(OOP)에 대해 정리하겠다. ① 개념 소개 1) 정의 → 프로그램을 객체 단위로 구성하여 개발하는 방식 → 객체는 속성(데이터) 과 메서드(동작) 를 포함 → 객체 간의 관계를 통해 프로그램이 동작 2) 캡슐화(Encapsulation) → 객체의 데이터를 보호하고, 외부에서 직접 접근하지 못하도록 제한하는 개념 → 필요에 따라 getter/setter 또는 속성(Property) 을 통해 데이터를 제어 3) 추상화(Abstraction) → 복잡한 시스템에서 핵심적인 부분만 남기고 단순화하는 과정 → 중요한 정보만 공개 → 불필요한 부분은 숨김 4) 속성(Property) → 객체의 상태(데이터)를 표시 → C#에서는 get 및 set을 사용하여 속성을 정의 가능 1-1 코드 public class Person { // 속성(Property): Name 값을 저장하고 가져올 수 있음 // 자동 구현 속성을 사용하여 간결하게 작성 public s

Naver Blog

C# 배열

이번에는 C#의 배열에 대해 정리하겠다. ① 개념 1) 정의 → 같은 타입의 데이터를 여러 개 저장할 수 있는 자료구조 → 여러 개의 값을 하나의 변수로 관리 가능 2) 필요성 코드의 간결성 → 배열을 사용하면 한 번의 선언으로 여러 개의 데이터를 다룰 수 있어 코드가 훨씬 간결 반복문과 함께 사용 가능 → 배열을 사용하면 for 문과 같은 반복문을 활용하여 데이터 처리를 쉽게 할 수 있음 메모리 효율성 → 배열은 연속된 메모리 공간을 할당받아 데이터를 저장하므로 메모리 접근 속도가 빠름 ② 선언과 초기화 1) 선언 → 선언만 하면 배열을 사용할 수 없는 상태 → 초기화를 해야 사용이 가능 → 형식 타입[] 배열이름; 2) 초기화 (메모리 할당) new 키워드를 사용한 초기화 → 배열의 크기를 지정하여 초기화 1-1 코드 // [정수형 배열] 선언 및 초기화 (기본값: 0) // 정수형 배열을 선언하고 크기를 5로 초기화하면 모든 요소가 0으로 설정됨. int[] number

Naver Blog

C# 데이터 타입

이번에는 C#의 데이터 타입에 대해 정리하겠다. ① 개요 1) 개념 → 변수에 저장할 값의 종류를 결정하는 요소 2) 사용하는 이유 메모리 사용 최적화 → 데이터 크기를 고려하여 적절한 타입을 선택하면 메모리를 효율적으로 사용할 수 있음 타입 안정성(Type Safety) 보장 → 잘못된 데이터 타입을 사용하면 컴파일 오류가 발생하여 버그를 예방할 수 있음 코드 가독성 및 유지보수성 향상 → 변수의 데이터 타입이 명확하면 코드의 의미를 쉽게 파악할 수 있음 3) 분류 값 형식(Value Type) → 변수 자체가 값을 저장 참조 형식(Reference Type) → 변수에 값이 저장된 메모리 주소를 저장 ② 값 형식 (Value Types) 1) 개념 → 변수 자체가 값을 직접 저장하는 데이터 타입 2) 특징 스택(Stack) 메모리에 저장 → 블록({})이 끝나면 자동으로 메모리에서 제거 값이 복사됨 (Call by Value) → 변수에 다른 변수를 대입하면 값이 복

Naver Blog

C# 연산자

이번에는 C#의 연산자(Operator)에 대해 정리하겠다. ① 개념과 종류 1) 개념 → 하나 이상의 피연산자(Operand)에 대해 특정한 연산을 수행하는 기호 또는 키워드 → 데이터를 처리하고 변형하는 데 필수적인 요소이며, 다양한 종류가 존재 2) 종류 연산의 개수에 따른 분류 → 단항 연산자 (Unary Operators) 피연산자가 하나 → 이항 연산자 (Binary Operators) 피연산자가 두 개 → 삼항 연산자 (Ternary Operator) 피연산자가 세 개 연산의 기능에 따른 분류 → 기본 연산자 연산자 종류 설명 산술 연산자 사칙연산 수행 할당 연산자 변수에 값을 할당 비교 연산자 두 값을 비교 논리 연산자 논리 연산 수행 증감 연산자 값을 증가 또는 감소 비트 연산자 비트 단위 연산 수행 조건(삼항) 연산자 조건에 따라 값을 선택 형 변환 연산자 데이터 타입 변환 Null 병합 연산자 Null 값을 처리 ※ 기본 연산자를 세부적으로 설명하는 것은 ②부

Naver Blog

C# if문

이번에는 C#의 if문에 대해 정리하겠다. ① 개념 1) 정의 → 특정 조건이 참(true)일 때만 코드 블록을 실행하는 제어문 → 프로그램이 상황에 따라 다르게 동작하도록 만들 때 사용 2) 필요한 이유 → 프로그램이 단순히 위에서 아래로 실행되는 것이 아니라, 조건에 따라 실행 흐름이 달라질 필요가 있음 → 필요한 경우에만 특정 작업을 수행하도록 제어 가능 3) 실행 흐름 → 주어진 조건식을 평가 → 조건식이 true이면 코드 블록이 실행 → 조건식이 false이면 실행되지 않음 1-1 코드 int number = 10; // if문: number가 5보다 큰 경우 실행됨 if (number > 5) { Console.WriteLine("number는 5보다 큽니다."); // 조건이 참(true)이므로 실행됨 } // if문: number가 5보다 작은 경우 실행됨 if (number < 5) { Console.WriteLine("number는 5보다 작습니다."); // 조건

Naver Blog

C# switch문

이번에는 C#의 switch문에 대해 정리하겠다. ① 개념 1) 정의 → 하나의 변수 값을 여러 개의 경우(case)와 비교하여 실행할 코드를 결정하는 조건문 → if~else if~else 문과 유사 → 특정 값과의 비교를 다룰 때 더 간결하고 가독성이 좋음 2) 필요성 가독성 향상 → if~else if~else 문보다 구조가 명확하고 직관적임 코드 유지보수 용이 → 여러 개의 경우를 비교할 때 더 체계적으로 관리 가능 일부 경우 실행 속도 향상 → 컴파일러 최적화로 인해 switch문이 if~else if~else 보다 빠를 수 있음 3) 적절한 경우와 적절하지 않은 경우 적절한 경우 → 특정한 값(정수, 문자, 열거형 등)에 따라 실행할 코드가 달라질 때 → if~else if~else 문이 너무 길어지는 경우 적절하지 않은 경우 → 범위 조건이 필요한 경우 → 복잡한 논리 연산이 필요한 경우 4) 비교할 수 있는 데이터 유형 사용 가능 → int, char, st

Naver Blog

C# 소개

이번에는 C#의 소개에 대해 정리하겠다. ① 개발한 회사 → 마이크로소프트(Microsoft)에서 개발한 프로그래밍 언어 ② 탄생 배경 → 2000년대 초, 마이크로소프트가 .NET 프레임워크와 함께 발표 → 앤더스 헤일스버그(Anders Hejlsberg)가 주도하여 개발 → 기존 C, C++은 성능이 뛰어났으나 코드가 복잡했음 → Java는 썬 마이크로시스템즈(Sun Microsystems, 현재 Oracle)가 소유하고 있어, 마이크로소프트가 독자적인 플랫폼을 구축하기 어려웠음 → 마이크로소프트는 쉽고 강력하며, 개발 생산성이 높은 새로운 언어를 만들 필요가 있었음 → .NET 프레임워크의 핵심 언어로 등장하며 Java의 대항마 역할 → ECMA-334 및 ISO/IEC 23270 표준으로 등록되어 표준화된 언어 ③ 주요 특징 1) 객체 지향 프로그래밍(OOP) 언어 객체(Object) 단위로 프로그래밍하는 객체 지향 언어 코드의 재사용이 쉽고 유지보수가 편리 핵심 개념

Naver Blog

.NET과 C#의 관계

이번에는 .NET과 C#의 관계에 대해 정리하겠다. ① C#과 .NET 개념 소개 1) C# → 마이크로소프트가 개발한 객체 지향 프로그래밍 언어 → C#은 .NET을 기반으로 실행되는 대표적인 언어 → 자세한 내용은 아래 사이트를 참고 https://blog.naver.com/math717/223766809892 C# 소개 이번에는 C#의 소개에 대해 정리하겠다. ① 개발한 회사 → 마이크로소프트(Microsoft)에서 개발한 프로... blog.naver.com 2) .NET 정의 → 마이크로소프트가 개발한 애플리케이션 실행 및 개발을 위한 플랫폼 → 다양한 언어(C#, VB.NET, F# 등)와 기술을 지원하는 통합 개발 환경 역할 → 프로그램 실행을 위한 런타임 환경 제공 .NET이 운영체제와 프로그램 사이에서 실행을 관리 → 공통 라이브러리 제공 파일 입출력, 네트워크, 데이터베이스 연결 등 기본 기능을 쉽게 활용 가능 → 여러 프로그래밍 언어 지원 같은 .NET 플랫폼

Naver Blog

Visual Studio로 C# 사용 설정

이번에는 C#을 Visual Studio로 실행하기 위한 설정 준비랑 간단한 예시를 한 번 해보겠다. ※ Visual Studio가 설치되어 있다면 ②로 넘어가기 ① Visual Studio 설치 1) Visual Studio 사이트 접속 Visual Studio Tools 다운로드 - Windows, Mac, Linux용 무료 설치 Visual Studio Tools 다운로드 - Windows, Mac, Linux용 무료 설치 Visual Studio IDE 또는 VS Code를 무료로 다운로드하세요. Windows 또는 Mac에서 Visual Studio Professional 또는 Enterprise Edition을 사용해 보세요. visualstudio.microsoft.com → 위의 링크로 접속 2) 다운로드 클릭 → 커뮤니티의 무료 다운로드를 클릭 3) 다운로드 완료되면 파일 열기 클릭 4) 계속 클릭 5) 설치 → 위의 이미지에 나온 순서대로 체크하고 설치 6) 설치

Naver Blog

C# 입출력

이번에는 C#의 입출력에 대해 정리하겠다. ① 출력 1) 기본 Console.WriteLine() → 각각 출력 후 자동으로 줄을 바꿈 → C# 9 이하 (또는 기존 프로젝트)에서는 using System;이 반드시 필요 → C# 10(.NET 6)부터는 새로운 .NET 프로젝트 템플릿에서는 global using System;이 자동으로 포함 1-1 코드 : C# 10(.NET 6) 이후 버전 // Console.WriteLine()은 화면에 메시지를 출력한 후 자동으로 줄을 바꿈 Console.WriteLine("Hello, World!"); // "Hello, World!"를 출력하고 줄을 바꿈 Console.WriteLine("Welcome to C#."); // "Welcome to C#"를 출력하고 줄을 바꿈 1-1 결과 1-2 코드 : C# 9 이하 버전 using System; // Console 클래스를 사용하기 위해 필요 // C# 9버전 이하에서 Console을

Naver Blog

C# 변수

이번에는 C# 변수에 대해 정리하겠다. ① 개념과 역할 1) 개념 → 프로그래밍에서 데이터를 저장하는 이름이 붙은 공간 → 변수를 통해 값을 저장하고, 필요할 때 가져와 사용 가능 2) 사용하는 이유 데이터 저장과 재사용 → 데이터를 저장하면 프로그램에서 여러 번 사용 가능 유지보수 편리함 → 변수 값을 변경하면 코드 전체에 반영됨 1-1-1 코드 : 변수를 사용하지 않음 Console.WriteLine("학생 A의 점수: " + (80 + 5)); // 학생 A의 기본 점수(80)에 추가 점수(5)를 더함 Console.WriteLine("학생 B의 점수: " + (90 + 5)); // 학생 B의 기본 점수(90)에 추가 점수(5)를 더함 Console.WriteLine("학생 C의 점수: " + (70 + 5)); // 학생 C의 기본 점수(70)에 추가 점수(5)를 더함 // 문제점: 추가 점수(5)가 여러 곳에서 반복됨 → 만약 변경해야 한다면 모든 코드를 수정해야 함

Naver Blog

백엔드 라이브러리

이번에는 백엔드 라이브러리에 대해 정리하겠다. ① 개요 1) 정의 → 서버 측 애플리케이션에서 특정 기능을 쉽게 구현할 수 있도록 제공되는 코드 모음 → 웹 요청 처리, 데이터베이스 연동, 인증, 로깅 등 다양한 기능을 지원하여 개발자의 작업을 효율적으로 도움 2) 프레임워크랑 라이브러리의 차이 구분 프레임워크 라이브러리 역할 애플리케이션의 구조와 흐름을 제공 특정 기능을 수행하는 코드 모음 제어 흐름 프레임워크가 개발자의 코드를 호출 (제어 역전, IoC) 개발자가 직접 호출하여 사용 3) 중요한 이유 기능 구현 간소화 → 기본적인 기능을 직접 구현할 필요 없이 빠르게 개발 가능 검증된 코드 사용 → 많은 개발자가 검증한 코드로 안정성이 높음 유지보수 용이 → 표준화된 코드와 문서를 제공하여 유지보수 및 확장이 쉬움 ② 사용 이유 개발 생산성 향상 → 기본적인 기능을 직접 개발할 필요 없이 효율적으로 구현 가능 유지보수 용이 → 표준화된 코드와 지속적인 업데이트 및 보안

Naver Blog

C++ 예외 처리

이번에는 C++의 예외 처리에 대해 정리하겠다. ① 예외(Exception) 개념 이해 1) 정의 → 프로그램 실행 중에 발생하는 예상치 못한 오류를 의미 2) 오류와 예외의 차이 오류(Error) → 코드의 문법적 실수 또는 시스템이 복구할 수 없는 문제 예외(Exception) → 실행 도중에 발생 → 적절한 처리를 통해 프로그램이 계속 실행될 수 있는 문제 3) 필요한 이유 프로그램의 비정상적인 종료 방지 → 예외를 처리하지 않으면 프로그램이 강제 종료될 수 있음 문제 발생 시 적절한 대처 가능 → 오류 발생 시 사용자에게 의미 있는 메시지를 제공하거나 대체 동작을 수행 가능 가독성과 유지보수성 향상 → 코드에서 오류 처리 로직을 명확하게 분리 가능 → 코드가 더 깔끔 4) 예외가 발생할 수 있는 대표적인 상황 연산 오류 → 0으로 나누기 → 오버플로우 또는 언더플로우 잘못된 메모리 접근 → 널 포인터 역참조 → 배열의 범위를 벗어난 접근 파일 입출력 오류 → 존

Naver Blog

C++ 템플릿

이번에는 C++ 템플릿에 대해 정리하겠다. ① 기본 개념 1) 정의 → C++에서 일반화 프로그래밍(Generic Programming)을 가능하게 하는 기능 → 특정 타입에 의존하지 않고, 여러 타입에서 재사용할 수 있는 코드를 작성 가능 → 중복된 코드를 줄이고, 타입 안전성을 유지하면서도 유연한 코드 작성이 가능 2) 필요한 이유 → 같은 기능을 하는 함수를 여러 타입(int, double 등)으로 중복 작성하면 비효율적 → 한 번의 코드 작성으로 여러 타입을 처리할 수 있어 코드 재사용성이 증가 3) 동작 방식 → 컴파일 타임에 타입을 결정하고, 해당 타입에 맞는 코드를 생성(인스턴스화) → 실제 타입이 정해지기 전까지는 완전한 코드가 아니며, 사용할 때마다 해당 타입에 맞는 코드가 생성 4) 장점 코드 재사용성 증가 → 여러 타입에서 동일한 코드를 사용 가능 타입 안전성 제공 → void* 같은 타입 불안전성을 피함 → 컴파일러가 타입 검사를 수행 성능 손실 없음 →

Naver Blog

C++ 스마트포인터

이번에는 C++ 스마트포인터에 대해 정리하겠다. ① 개요 1) 정의 → C++에서 동적 메모리를 안전하게 관리하기 위해 제공하는 포인터 래퍼(wrapper) 클래스 → 기존의 원시 포인터(raw pointer, T*)는 동적으로 할당된 메모리를 수동으로 해제 → 자동으로 메모리를 관리하여 메모리 누수를 방지 가능 2) 필요한 이유 메모리 누수(Memory Leak) → new로 할당한 메모리를 delete로 해제하지 않으면 누적되며, 프로그램이 종료될 때까지 반환되지 않음 예외 안전성(Exception Safety) 문제 → 동적 메모리를 할당한 후 예외가 발생하면 delete가 호출되지 않을 수 있음 중복 해제(Double Free) 문제 → 같은 포인터를 여러 번 delete하면 정의되지 않은 동작(UB, Undefined Behavior)이 발생 가능 댕글링 포인터(Dangling Pointer) → delete 후에도 해당 포인터를 사용하면 메모리 접근 오류가 발생 가

Naver Blog

C++ 멀티스레딩

이번에는 C++ 멀티스레딩(Multithreading)에 대해 정리하겠다. ① 개요 1) 정의 → 하나의 프로그램 내에서 여러 개의 스레드(Thread)가 동시에 실행되는 개념 → 일반적으로 프로그램은 하나의 흐름(메인 스레드)에서 실행 → 멀티스레딩을 사용하면 여러 개의 작업을 동시에 수행 가능 2) 장점 성능 향상 → CPU의 여러 코어를 활용하여 병렬 처리 가능 → 연산 속도가 빨라질 수 있음 응답성 개선 → GUI 애플리케이션에서 UI 스레드와 작업 스레드를 분리하면 사용자 인터페이스가 멈추지 않고 부드럽게 동작 가능 자원 공유 → 같은 프로세스 내에서 여러 스레드가 메모리와 자원을 공유 가능 → 데이터 교환이 용이 3) 단점 경쟁 상태(Race Condition) → 여러 스레드가 동시에 같은 데이터에 접근하면 예기치 않은 동작이 발생 가능 데드락(Deadlock) → 두 개 이상의 스레드가 서로의 자원을 기다리며 영원히 멈추는 상태가 발생 가능 디버깅 어려움 →

Naver Blog

C++ 파일 입출력

이번에는 C++ 파일 입출력에 대해 정리하겠다. ① 개요 1) 필요성 → 프로그래밍에서 데이터를 다루는 방식은 크게 메모리에서 처리하는 방식과 파일을 활용하는 방식으로 나뉨 메모리 기반 처리 방식 → 프로그램이 실행되는 동안에만 데이터를 유지 → 프로그램이 종료되면 데이터가 사라짐 파일 기반 처리 → 데이터를 영구적으로 저장 가능 → 프로그램이 종료되어도 데이터를 보존 가능 2) 유용한 상황 → 데이터를 저장하고 나중에 다시 불러와야 할 때 → 실행 결과를 로그 파일로 기록해야 할 때 → 대량의 데이터를 다뤄야 할 때 → 네트워크와 연계하여 데이터를 저장하고 공유해야 할 때 3) iostream과 fstream의 차이 헤더 파일 역할 #include <iostream> 표준 입출력 (콘솔 입력 및 출력) 콘솔(화면)과 키보드를 통해 데이터를 주고받을 때 사용 #include <fstream> 파일 입출력 파일을 통해 데이터를 주고받을 때 사용 4) 텍스트 파일 (Text File

Naver Blog

C++ 참조자

이번에는 C++ 참조자(Reference)에 대해 정리하겠다. ① 기본 개념 1) 정의 → 기존 변수에 대한 또 다른 이름(별칭, alias)으로 사용할 수 있는 기능 → 원본 변수와 동일한 값을 공유 가능 1-1 코드 #include <iostream> using namespace std; int main(void) { int num = 10; // 변수 num을 선언하고 10으로 초기화 int& ref = num; // 참조자 ref를 선언하고 num을 참조하도록 설정 (ref는 num의 또 다른 이름) cout << num << endl; // num의 값을 출력 (10) cout << ref << endl; // ref의 값을 출력 (num을 참조하므로 10) return 0; } 1-1 결과 ② 특징 1) 변수의 별칭(Alias) → 참조자는 특정 변수를 가리키는 또 다른 이름 → 참조자를 사용하면 원본 변수를 직접 조작 가능 2-1 코드 #include <iostream>

Naver Blog

C++ 객체 지향 프로그래밍

이번에는 C++ 객체지향 프로그래밍 (Object-Oriented Programming)에 대해 정리하겠다. ① 절차지향 프로그래밍 vs 객체지향 프로그래밍 1) 절차지향 프로그래밍 (Procedural Programming) → C 언어 같은 언어에서 주로 사용 → 프로그램이 순차적인 절차(함수의 호출 순서) 에 따라 실행 → 데이터와 함수를 별개로 관리 → 함수가 데이터를 처리하는 방식 1-1 코드 #include <iostream> // 입출력을 위한 라이브러리 using namespace std; // std 네임스페이스 사용 (cout, endl 등을 편리하게 사용하기 위해) // 절차지향 프로그래밍 방식에서는 데이터를 따로 선언하고 // 데이터를 처리하는 함수(절차)를 따로 정의하여 사용함 // 사각형의 너비와 높이를 출력하는 함수 void printRectangle(int width, int height) { cout << "Width: " << width << ", H

Naver Blog

C++ STL

이번에는 C++의 표준 템플릿 라이브러리(STL, Standard Template Library)에 대해 정리하겠다. ① 개요 1) 정의 → 자료구조와 알고리즘을 템플릿으로 제공하는 라이브러리 → 효율적이고 재사용 가능한 코드를 작성 가능 2) 구성요소 구성요소 설명 예시 컨테이너(Container) 데이터를 저장하는 구조 vector, list, map 등 알고리즘(Algorithm) 컨테이너에서 데이터를 처리하는 함수 sort(), find(), for_each() 등 반복자(Iterator) 컨테이너의 요소를 순회(Traversal)하는 객체 begin(), end() 등 3) 특징 범용성(Generic Programming) → 템플릿 기반으로 작성 → 다양한 데이터 타입을 하나의 코드로 처리 1-1 코드 #include <iostream> #include <vector> // 벡터(vector) 컨테이너를 사용하기 위한 헤더 포함 using namespace std; in

Naver Blog

C++ 포인터

이번에는 C++ 포인터에 대해 정리하겠다. ① 기본 개념 1) 메모리 주소 → 컴퓨터에서 모든 변수는 메모리에 저장 → 각 변수는 고유한 메모리 주소를 가짐 → 메모리 주소는 16진수로 표현 → 변수에 할당된 위치를 나타냄 1-1 코드 #include <iostream> using namespace std; int main() { int num = 10; // 정수형 변수 num을 선언하고 10을 저장 // num의 값을 출력 (변수에 저장된 실제 값) cout << "num의 값: " << num << endl; // num의 메모리 주소를 출력 // &num은 'num 변수의 메모리 주소'를 의미함 // 주소 값은 실행할 때마다 다를 수 있음 cout << "num의 메모리 주소: " << &num << endl; return 0; } 1-1 결과 2) 변수와 메모리 주소 관계 → 변수는 특정 메모리 공간을 차지 → 그 공간에는 데이터가 저장 → 컴퓨터는 변수명을 직접 이해하지

Naver Blog

C++ 함수

이번에는 C++의 함수에 대해 정리하겠다. ① 기본 개념 1) 정의 → 특정 작업을 수행하는 코드의 블록 → 프로그램에서 반복되는 코드 감소 → 코드의 가독성과 재사용성을 높이는 데 사용 2) 필요성 → 코드의 재사용 가능 → 프로그램 구조의 개선 → 유지보수의 용이성 3) 구성 요소 반환형 → 함수가 작업을 끝낸 후 반환하는 값의 데이터 타입 함수 이름 → 함수를 호출할 때 사용하는 이름 매개변수(인수) → 함수에 전달되는 입력값 → 함수 정의의 괄호 안에 선언 함수 본문 → 함수가 실행하는 작업을 포함한 코드 블록 4) 함수의 동작 과정 → 프로그램이 함수 호출을 만나면 제어가 함수 정의로 이동 → 매개변수에 인수가 복사 → 함수 본문의 코드가 실행 → return 문을 만나면, 결과를 호출한 위치로 반환하고 함수가 종료 5) 함수 호출 → 함수를 사용하려면 호출 → 호출 시, 함수의 이름과 괄호 안에 필요한 값을 전달 6) 메인 함수 (main) → C++ 프로그램은 반

Naver Blog

C++ 배열

이번에는 C++의 배열에 대해 정리하겠다. ① 개념과 필요성 1) 정의 → 같은 자료형(데이터 타입)의 여러 개의 값을 하나의 변수 이름으로 저장할 수 있는 자료구조 → 같은 유형의 데이터를 연속된 메모리 공간에 저장하여 관리하는 방식 2) 필요 이유 → 일반적인 변수로 여러 개의 데이터를 저장하려면, 각각의 변수를 선언하여 변수를 늘릴 때마다 새로운 이름을 만들어야 하고, 코드가 길어지며 관리가 어려움 → 배열을 사용하면 하나의 변수 이름으로 여러 개의 값을 관리 1-1 코드 : 일반적인 변수로 여러 개의 데이터 저장 #include <iostream> using namespace std; int main(void) { // 각각의 변수를 사용하여 여러 개의 데이터를 저장 // 하지만 변수가 많아질수록 관리가 어렵고, 반복적인 코드가 필요함 int score1 = 85; int score2 = 90; int score3 = 78; int score4 = 88; int score5

Naver Blog

C++ 문자열

이번에는 C++ 문자열에 대해 정리하겠다. ① C-스타일 문자열(char 배열) 1) 기본 개념 → 문자들이 나열된 것 → C++에서 기본적으로 char 배열을 사용하여 문자열을 저장 2) 특징 → 널 문자('\0')로 종료 → 문자열 리터럴로 초기화하면, 컴파일러가 자동으로 '\0'을 추가 → 문자 단위로 저장할 경우, 직접 '\0'를 작성 1-1 코드 #include<iostream> using namespace std; int main(void) { // str : 문자들의 배열 // "Hello" : 문자열 리터럴 (문자들의 집합을 나타내는 값) // char str[] = "Hello"; : 문자열 리터럴 "Hello"를 문자 배열 str에 저장하는 코드 // 문자열 리터럴은 끝에 자동으로 '\0'을 추가하여 문자열 끝을 표시 // 따라서 str은 실제로 {'H', 'e', 'l', 'l', 'o', '\0'}와 같은 형태로 저장된다. char str[] = "Hello";

Naver Blog

C++ 데이터 타입

우리가 코딩을 하게 되면 어떤 언어를 선택하든지 그 언어에 대한 변수와 데이터 타입이 존재한다. 이번에는 C++의 변수와 데이터 타입 중 먼저 데이터 타입에 대해 정리하겠다. ① 기본 데이터 타입 (Primitive Data Types) 1) 정수형 (Integer Types) 타입 설명 크기(보통) 범위 int 기본 정수 타입 4바이트 -2,147,483,648 ~ 2,147,483,647 short 작은 범위의 정수 2바이트 -32,768 ~ 32,767 long 큰 범위의 정수 4바이트 혹은 8바이트 플랫폼에 따라 다름 long long 매우 큰 범위의 정수 8바이트 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 unsigned int 음수가 없는 정수 4바이트 0 ~ 양수 범위 1-1 코드 : 정수형 크기 계산 #include <iostream> using namespace std; int main(void) { // siz

Naver Blog

C++ 변수

우리가 어떤 언어로 코딩을 하든지 먼저 기본을 확실히 배우고 한다. 그래서 이번에는 변수와 데이터 타입 중 변수에 대해 정리하겠다. ① 기초 개념 1) 정의 → 데이터를 저장하기 위한 메모리 공간 → 각 변수는 이름(식별자)을 가짐 → 이 이름을 통해 해당 메모리 공간에 접근 → 값을 저장하거나 변경 가능 2) 역할 → 데이터를 저장 → 데이터를 재사용 가능 → 코드의 가독성과 유지보수성 3) 이름 규칙 (식별자 규칙) → 영문자(A-Z, a-z), 숫자(0-9), 밑줄(_)만 사용 → 숫자로 시작 불가능 → C++ 예약어는 사용 불가 → 변수 이름은 대소문자를 구분 → 이름은 의미를 담도록 작성 4) 메모리 공간 → 변수를 선언하면 해당 변수는 메모리의 특정 위치에 저장 → 변수의 크기와 메모리 사용은 데이터 타입에 따라 다름 5) 주의사항 → 선언하지 않은 변수는 사용 불가 → 초기화되지 않은 변수는 예측할 수 없는 값을 가질 수 있음 → 변수의 타입에 맞는 값만 저장 → 범위를

Naver Blog

C++ 연산자

우리가 어떤 언어로 코딩을 하든 배우는 순서는 거의 비슷하다. 기본부터 해서 심화로 나아가는 것처럼 기본에도 먼저 알아야 할 것들이 존재한다. 이번에는 그 중 C++ 연산자에 대해 정리하겠다. ① 산술 연산자 (Arithmetic Operators) 1) 정의 → 기본 연산자라고도 불림 → 수학적 계산을 수행할 때 사용 2) 종류 연산자 설명 예시 결과 + 덧셈 a + b a와 b를 더함 - 뺄셈 a - b a에서 b를 뺌 * 곱셈 a * b a와 b를 곱함 / 나눗셈 a / b a를 b로 나눔 % 나머지 연산 a % b a를 b로 나눈 나머지 3) 기본 예제 1-1 코드 #include<iostream> using namespace std; int main(void) { int num1 = 10, num2 = 3; // 1. + 연산자 (덧셈) // 두 값을 더함 cout << "num1 + num2 = " << num1 + num2 << "\n"; // 출력: 13 // 2. -

Naver Blog

C++ 조건문

우리가 코딩을 하면 기초적인 것들을 하고 나면 배우는 것은 대부분 조건문과 반복문이다. 이번에는 C++의 조건문에 대해 정리하겠다. ① 기초 개념 조건문 → "참(True)" 또는 "거짓(False)"을 판단하는 구조 참(true) → C++에서 1로 표현 거짓(false) → C++에서 0으로 표현 ② 기본 if문 1) 정의 → 조건이 참일 때 특정 코드를 실행하도록 하는 가장 기본적인 조건문 → if문은 프로그래밍에서 가장 많이 사용하는 구조 중 하나 → 이해하면 프로그램의 흐름 제어를 시작 가능 2) 기본 구조 if (조건식) { // 조건식이 참일 때 실행될 코드 } → if 뒤에는 반드시 소괄호(())가 따라오며, 조건식을 작성 → 조건식이 참(true)이면 {} 내부의 코드가 실행 → 조건식이 거짓(false)이면 {} 내부의 코드는 실행되지 않음 ※ 조건식 → 참(true)과 거짓(false)을 반환하는 식 ↓ 자주 사용하는 조건식 연산자 설명 예제 결과 == 같다

Naver Blog

C++ 반복문

우리가 코딩을 할 때 언어를 선택하고 조건문을 하고 나면 반복문을 보통 배우게 된다. 그래서 이번에는 C++ 반복문에 대해 정리하겠다. ① 기본 개념 1) 목적 → 동일한 코드를 여러 번 실행해야 하는 경우에 사용 → 코드를 간결하고 효율적으로 만듦 2) 종류 for 반복문 → 반복 횟수가 명확할 때 사용 while 반복문 → 조건을 만족하는 동안 계속 반복 do-while 반복문 → 최소 한 번은 실행되어야 할 때 사용 3) 기본 흐름 초기화 → 반복문이 시작되기 전, 필요한 변수나 상태를 설정 조건식 → 반복을 계속할지 결정 → 참일 경우 반복 → 거짓일 경우 종료 본문 실행 → 조건식이 참일 때 실행되는 코드 블록 증감 또는 업데이트 → 다음 반복을 준비하기 위해 값 변경 4) 중요한 이유 효율성 → 코드를 짧고 간결하게 작성 가독성 → 반복 작업의 의도를 명확히 표현 유지보수성 → 코드 수정이 쉽고 확장성이 높음 5) 무한 루프의 위험 → 반복문을 사용할 때

Naver Blog

C언어 &lt;limits.h&gt;

우리가 C언어를 사용하다가 보면 간혹 범위를 넘어서서 예상치 못한 값을 나오게 하는 경우가 생긴다. 그리고, 오버플로우가 발생될 수 있다. 그래서 이런 것들을 방지하기 위해 사용되는 C언어 표준 라이브러리는 <limits.h>이다. 그러므로, 이번에는 <limits.h>에 대해 정리하겠다. ① 기본 개념 1) 정의 → C 언어 표준 라이브러리에 포함된 헤더 파일 → 정수형 자료형(char, int, short, long 등)이 가질 수 있는 최소값(MIN)과 최대값(MAX)을 매크로로 정의해 둔 파일 2) 사용하는 이유 오버플로우(Overflow) 방지 → 변수가 최대값을 초과할 경우, 원치 않는 동작이 발생 가능 자료형 선택 시 도움 → 메모리 사용을 최적화하기 위해 적절한 자료형 선택 가능 이식성(Portability) → 다른 시스템(32비트, 64비트)에서도 일관된 코드를 작성 가능 3) 주의할 점 범위를 벗어나는 값 사용 금지 → 값이 범위를 벗어나면 오버플로우 또는

Naver Blog

C언어 &lt;float.h&gt;

우리가 C언어를 사용하다가 보면 다양한 데이터 타입을 사용하게 된다. 그 중 실수형에서 2가지인 float형과 double형 이렇게 2가지가 있다. 이 2가지를 사용할 때 우리는 관련된 표준 라이브러리인 <float.h>를 사용하지 않는다. 그래서 이번에는 <float.h>에 대해 정리하겠다. ① 부동 소수점 (Floating-point) 1) 개념 → 소수점이 움직일 수 있는 숫자 표현 방식 → 실수를 표현하고 계산하기 위해 사용 2) 필요한 이유 → 매우 큰 숫자나 작은 숫자를 표현할 때 유리 → 정수형(int)만으로는 소수점 이하를 표현 불가 → 과학적 계산, 엔지니어링, 그래픽 연산 등에서 필수적 3) C언어에서 사용되는 부동 소수점 자료형 메모리 크기 유효 숫자(정밀도) 범위 float 4바이트 약 7자리 ±1.2 × 10⁻³⁸ ~ ±3.4 × 10³⁸ double 8바이트 약 15자리 ±2.2 × 10⁻³⁰⁸ ~ ±1.8 × 10³⁰⁸ long double 16바이트 약

Naver Blog

C언어 &lt;errno.h&gt;

우리가 코딩을 작성하다 보면 오류 코드를 작성해야 하는 경우도 발생한다. 하지만 오류 코드를 작성할 때 보면 어떤 오류가 발생하고, 어떤 오류 코드를 작성해야 하는지 모르는 경우가 많이 있다. 그래서 이번에는 오류 관련한 표준 라이브러리인 <errno.h>에 대해 정리하겠다. ① 개요 1) 설명 → C 표준 라이브러리에 포함된 오류 코드(Error Code) 관련 헤더 파일 → 주로 시스템 호출이나 라이브러리 함수에서 오류가 발생했을 때, 오류의 원인을 확인하기 위해 사용 2) 핵심 개념 오류 감지 및 확인 → 프로그램이 실행되는 동안 오류가 발생하면 해당 오류에 대한 오류 코드가 저장 → 이 오류 코드는 errno라는 전역 변수에 저장 오류 코드 매크로 제공 → <errno.h>는 다양한 오류 코드를 매크로 상수로 정의 오류 메시지 제공 → 오류 코드는 숫자일 뿐이므로 사람이 이해하기 어려움 → strerror() 또는 perror() 함수로 오류 메시지를 확인 가능 3) 작

Naver Blog

C언어 &lt;assert.h&gt;

우리는 C언어를 사용할 때 다양한 표준 라이브러리를 사용한다. 하지만 우리가 보기에도 생소한 것들이 있다. 그 중 하나인 assert.h에 대해 정리하겠다. ① 기본 개념 1) 정의 → 디버깅과 오류 검출을 돕기 위한 C 표준 라이브러리의 헤더 파일 → 조건이 참인지 검사하는 디버깅용 매크로(assert)를 제공 2) 기능 → 프로그램이 예상하지 못한 상태로 실행되지 않도록 중간에 검증 3) 용도 → 프로그램이 예상한 조건을 만족하는지 검사하기 위해 사용 → 개발 및 테스트 단계에서 논리적 오류를 발견하기 위해 사용 ② assert 매크로 1) 개념 → 디버깅 도구 → 프로그램의 특정 조건이 참(TRUE)인지 확인하는 역할 → 조건이 거짓(FALSE)일 경우 프로그램을 강제로 종료시키고, 오류 메시지를 출력 → 개발 및 테스트 단계에서 사용 → 런타임 오류를 조기에 발견하는 데 유용 2) 문법 #include <assert.h> assert(조건); 조건이 참(TRUE) → 아무런

Naver Blog

C++ 개요

우리가 C언어를 사용하다가 보면 C언어가 절차적 프로그래밍 언어다 보니 불편한 경험을 한 적도 여러 번 있을 것이라고 생각한다. 그래서 절차적 프로그래밍과 객체 지향 프로그래밍(OOP : Object-Oriented Programming)을 모두 지원하는 강력한 언어인 C++이 등장했다. 그럼 C++의 기본 개요에 대해서 정리하겠다. ① 탄생 배경 개발자 → Bjarne Stroustrup (비야네 스트롭스트룹) 출시 연도 → 1983년 목적 → C 언어의 강력한 성능은 유지 → 객체지향적 설계를 도입해 대규모 소프트웨어 개발을 더욱 효율적으로 만들기 위해 개발 초기 이름 → C with Classes (클래스를 추가한 C 언어) ② 특징 1) 다양한 프로그래밍 패러다임 지원 절차적 프로그래밍 → C 언어의 절차적 접근 방식 지원 객체지향 프로그래밍(OOP) → 캡슐화, 상속, 다형성 등 지원 제네릭 프로그래밍 → 템플릿을 통해 코드 재사용성 극대화 함수형 프로그래밍

Naver Blog

C++ 사용환경 설정

우리가 코딩을 할 때 보면 먼저 언어를 선택하고 나서, 사용할 환경을 결정한다고 볼 수 있다. 하지만 먼저 C언어를 했다면, C++ 환경 설정은 크게 손 볼 필요가 없어진다. 그래서 Visual Studio로 C++언어를 사용할 수 있게 할려고 한다. ※ Visual Studio 설치 및 프로젝트 생성은 아래 사이트 참고 https://blog.naver.com/math717/223668305269 C언어 사용 환경 설정 C언어는 원래는 VSCode에서 사용할 예정이었다. 하지만 VSCode로 만들려고 하면 좀 복잡해서 초보자... blog.naver.com ① C++ 파일 생성 1) Visual Studio 클릭 2) 자신이 만들어 놓은 프로젝트 접속 → 접속하여 위의 화면처럼 나오면 성공 ※ 프로젝트를 생성하지 않았으면 위의 사이트에 들어가서 순서대로 프로젝트 생성 후 접 3) 아래 화면처럼 클릭 → 소스 파일 → 추가 → 새 항목 순서로 클릭 4) 아래 화면처럼 파일명 작성하고

Naver Blog

C++ 입출력

우리가 어떤 언어를 사용하든지 항상 먼저 배우는 것 중 하나는 그 언어의 입력과 출력에 대한 것이다. 그래서 이번에는 C++ 언어의 입출력에 대해 정리하겠다. ① 입출력 스트림 1) 개념 → C++에서는 스트림을 통해 입력과 출력을 처리 ※ 스트림 → 데이터를 입력하거나 출력하는 흐름을 의미 2) 주요 스트림 cin : 표준 입력 (키보드) cout : 표준 출력 (모니터) cerr : 표준 오류 출력 (모니터, 버퍼링 없음) clog : 표준 로그 출력 (모니터, 버퍼링 있음) ② cout (Console Output) 1) 기본 개념 정의 → C++ 표준 출력 스트림 객체 역할 → 데이터를 콘솔(표준 출력 장치)에 출력 헤더 파일 → <iostream> 네임스페이스 → std → std::cout으로 사용 → using namespace std;로 선언 후 cout 사용 연산자 → << (삽입 연산자) 2) 기본 사용법 단일 값 출력 1-1 코드 : using

Naver Blog

C언어 &lt;stdlib.h&gt;

C언어에는 다양한 표준 라이브러리가 존재한다. 그 중 대표적으로 사용되는 것이 stdio.h였다면, 그 다음으로 많이 사용된다고 할 수 있는 것 중 하나는 stdlib.h이다. 그러므로 stdlib.h에 대해서 정리하겠다. ① 기본 개념 및 역할 1) 기본 개념 → C 표준 라이브러리의 일부 → 프로그램 실행 중 필요한 다양한 기본 기능을 제공 → 메모리 관리, 수학적 계산, 프로그램 종료, 데이터 변환 등 다양한 범용 작업을 수행할 수 있도록 도와줌 2) 주요 역할 및 기능 주요 역할 설명 예시 프로그램 제어 프로그램 실행 상태를 조정하거나 종료하는 기능을 제공 exit() 동적 메모리 관리 프로그램 실행 중 메모리를 동적으로 할당하거나 해제할 수 있는 기능을 제공 malloc() free() calloc() realloc() 문자열과 숫자 간의 변환 문자열 데이터를 정수 또는 실수로 변환 atoi() atof() strtol() 난수 생성 프로그램에서 임의의 숫자를 생성하는 기능

Naver Blog

C언어 &lt;math.h&gt;

C언어에서는 다양한 표준 라이브러리 헤더가 존재한다. 그 중 대표적으로 사용되는 것이 stdio.h이다. 그 나머지는 필요한 경우에는 쓰고, 필요하지 않은 경우에는 쓰지 않아서 모르는 경우도 있다. 그래서 이번에는 수학적 계산을 수행하는 표준 라이브러리 헤더인 math.h에 대해 정리하겠다. ① 기본 개념 1) 정의 → 수학적 계산을 수행하는 함수들을 제공하는 표준 라이브러리 헤더 파일 2) 역할 → 수학 계산을 위한 함수들을 모아둔 헤더 파일 3) 사용법 #include<math.h> 4) 링크 옵션 → 대부분의 컴파일러에서 <math.h>를 사용할 때는 수학 라이브러리를 명시적으로 링크 1-1 코드 : gcc 컴파일 gcc program.c -lm 5) 장점 → 복잡한 수학 계산을 간단하게 처리 → 하드웨어적으로 최적화된 빠른 계산이 가능 → 대부분의 시스템에서 지원하므로 호환성이 뛰어남 6) 주의사항 수학 함수의 반환값 → 대부분의 함수는 double형 값을 반환 → 변수도

Naver Blog

C언어 &lt;string.h&gt;

우리가 C언어를 사용할 때 <stdio.h>를 필두로 해서 다양한 표준 라이브러리 헤더를 사용한다. 그 중 이번에 정리할 표준 라이브러리 헤더는 문자열 사용과 관련한 헤더인 <string.h>에 대한 것이다. ① 문자열과 <string.h>의 기본 이해 1) 문자열 → 문자(character)들의 연속적인 배열로 표현 → C언어에서 문자열은 문자 배열(char[])에 저장 → 항상 '\0' (null 문자)로 끝 ※ '\0' → 문자열의 끝을 나타내는 특별한 문자 → 문자열의 길이를 계산하거나 문자열을 처리할 때 필수적 2) 문자열의 표현 문자 배열로 선언 1-1 코드 #include<stdio.h> int main(void) { // 문자 배열에 문자열 초기화 // 문자 배열 이름 : str // 문자 배열 크기 : 10 // 배열 크기는 최소한 문자 수 + 1(끝에 '\0' 포함) char str[10] = "hello"; printf("%s\n", str); return 0;

Naver Blog

C언어 &lt;ctype.h&gt;

우리가 C언어를 배울 때 사용하는 표준 라이브러리는 여러개가 있다. 그 중 이번에 정리할 것은 ctype.h이다. ① 기본 소개 1) 기본 개념 → C 표준 라이브러리 → 문자(character)를 다루는 데 유용한 다양한 함수들을 제공 → 주로 문자의 유형을 확인하거나 변환할 때 사용 2) 주요 목적 문자의 타입 판별 → 문자가 숫자인지, 알파벳인지, 공백인지 등 문자의 성격을 확인 문자의 대소문자 변환 → 알파벳 대소문자를 손쉽게 변환 가능 3) 사용 이유 → C에서는 문자를 다룰 때 아스키 코드(ASCII Code)를 직접 처리해야 하는 경우가 많음 → 이를 추상화하여 코드를 더 간단하고 읽기 쉽게 만듦 4) 포함 방법 #include <ctype.h> 5) 사용 가능한 함수들 → 대체로 두 가지 주요 기능 기능 함수 설명 문자의 속성을 확인 isdigit(c) 문자가 숫자인지 확인 isalpha(c) 문자가 알파벳인지 확인 문자를 변환 toupper(c) 소문자를 대문자로

Naver Blog

백엔드 프레임워크

우리가 개발을 하게 되면 옛날에 비해 기술이 좋아지면서 프레임워크랑 라이브러리를 많이 사용하게 된다. 하지만 프레임워크랑 라이브러리는 비슷하면서도 다르고, 프레임워크랑 라이브러리 각각 프론트엔드 전용과 백엔드 전용으로 나뉘어져있다. 그래서 이번에는 백엔드의 프레임워크를 공부하면서 정리하겠다. ① 프레임워크 정의 → 애플리케이션의 구조와 흐름을 관리하는 틀 → 개발자가 그 안에서 코드를 작성하여 작업을 수행하지만, 프레임워크가 전체적인 제어권을 가지고 있음 ② 프레임워크의 특징 제어의 역전(Inversion of Control) → 코드의 흐름을 제어 → 개발자가 프레임워크에 맞춰 코드를 작성하고, 프레임워크가 그 코드를 실행하는 방식 구조 제공 → 애플리케이션을 어떻게 설계하고, 데이터가 어떻게 이동해야 하는지에 대한 가이드라인을 제공 ③ 백엔드 프레임워크 정의 → 웹 애플리케이션의 서버 측 개발을 쉽게 하고, 더 효율적으로 유지보수할 수 있도록 도와주는 도구와 라이브러리의 모음

Naver Blog

C언어 &lt;time.h&gt;

우리가 코딩을 할 때 보면 시간을 다루는 예제를 본 적이 있다. 하지만 시간을 다루는 표준 라이브러리는 언어마다 다르다. 그래서 이번에는 C언어에서 시간을 다루는 데 사용되는 라이브러리인 time.h에 대해 정리하겠다. ① 기본 개념 1) 사용 이유 → 컴퓨터 프로그램에서 시간과 날짜를 다루는 것은 매우 흔한 작업 → 이런 작업을 쉽게 처리할 수 있도록 도와줌 2) 주요 기능 현재 시간 가져오기 → 시스템의 현재 날짜와 시간을 얻음 시간 변환 → 시스템 시간(초 단위)을 사람이 읽을 수 있는 형식으로 변환 시간 서식 지정 → 날짜와 시간을 특정 형식으로 출력 경과 시간 계산 → 두 시간의 차이를 계산 시간 측정 → 프로그램 실행 시간 측정 시간 딜레이 → 지정된 시간만큼 작업을 지연 3) 동작 원리 → 컴퓨터 시스템에서 시간은 "1970년 1월 1일 00:00:00 UTC"(유닉스 에폭)부터 초 단위로 계산 → time() 함수는 현재 시간을 초 단위로 반환 → local

Naver Blog

C언어 포인터

C언어를 통하여 지금까지 몇 번이나 포인터를 간단하게 틈틈히 사용하여 코드나 설명을 한 적이 있다. 하지만 그것에 대해서 제대로 설명한 적은 한 번도 없다. 그리고 포인터라는 것이 은근히 많이 헷갈리는 부분이 있기도 해서 이번에는 포인터에 대해 정리하겠다. ① 포인터를 배우기 전에 알아둬야 할 개념 1) 변수와 메모리 변수 → 데이터를 저장하기 위한 이름 있는 공간 → 기본 구조 데이터 타입 변수 = 값; ※ 데이터 타입에 대해 더 알고 싶다면? https://blog.naver.com/math717/223671409529 C언어 변수와 데이터 C언어의 기본 구조에 대해서 어느 정도 파악을 하고 알게 되었으면, 이제는 변수, 데이터, 입출력에 대해... blog.naver.com 메모리 → 데이터를 저장하기 위한 공간 → 작은 셀(cell)로 나뉘어져 있음 → 각각 고유한 주소를 가짐 2) 메모리 주소 → 메모리 셀의 고유한 위치를 나타내는 값 → 주소는 데이터를 저장하고 조작하

Naver Blog

C언어 구조체

우리가 C언어를 사용할 때 틈틈히 구조체를 사용한 적이 있다. 하지만 거기서는 어디까지나 기본적인 것들을 가볍게 사용한 것이고, 세부적으로 상세하게 설명한 적은 한 번도 없다. 그래서 이번에는 구조체에 대해서 정리할려고 한다. ① 개념 1) 정의 → 여러 데이터를 하나로 묶어서 효율적으로 관리하기 위한 사용자 정의 데이터 타입 2) 사용하는 이유 → 데이터를 따로따로 관리하는 대신, 관련 있는 데이터를 한 덩어리로 묶어서 관리 가능 → 구조체가 없다면, 각각의 데이터를 별도의 변수로 관리해야 하는데, 변수가 많아질수록 관리도 어려움 3) 구조체란 무엇 → 다양한 데이터 타입을 하나로 묶을 수 있는 도구 → 하나의 데이터 타입처럼 사용 가능 4) 사용 방법 → 구조체를 정의한 뒤에는 구조체 변수를 선언해서 사용 → 구조체 멤버(필드)에 값을 저장하거나 읽으려면 . 연산자를 사용 5) 장점 여러 데이터를 하나로 묶을 수 있음 → 구조체는 서로 관련 있는 데이터를 하나로 묶어서 관리 가

Naver Blog

C언어 파일입출력

우리가 C언어를 사용하여 구조체까지 할 수 있게 된다면 이제 할 것은 다른 파일에 있는 데이터를 불러와서 사용하는 것이다. 구조체까지는 자신이 코드를 짜고 실행하면 직접 원하는 값을 넣어서 사용하는 방법이라면 파일입출력은 다른 파일에 저장되어 있는 데이터를 이용하는 것이다. 그러므로 파일입출력에 대해서 정리하겠다. ① 기본 개념 1) 개념 → 컴퓨터의 저장 장치에 있는 파일을 읽거나 수정하거나 새로 생성하는 작업 2) 필요한 이유 → 프로그램은 메모리에서 실행되며, 프로그램이 종료되면 메모리의 데이터는 사라짐 → 데이터가 영구적으로 저장되어야 할 때 파일을 사용 → 파일은 프로그램 외부의 저장소(하드디스크 등)에 데이터를 저장할 수 있는 공간 3) 파일과 스트림의 개념 파일(file) → 프로그램이 읽고 쓸 수 있는 데이터 저장소 → 파일을 사용하려면 스트림(stream) 이라는 다리를 통해 데이터를 주고 받기 스트림(stream) → 프로그램과 파일 사이에 데이터를 읽고 쓰는 통

Naver Blog

C언어 &lt;stdio.h&gt;

우리가 C언어를 사용할 때 항상 사용하는 코드 중 하나가 #include <stdio.h>이다. 하지만 우리는 이것을 C언어에서 입출력으로만 사용된다 이렇게 이해하는 경우가 많다. 그래서 이번에는 <stdio.h>에 대해서 정리하겠다. ① 기본 개념 → Standard Input/Output Header의 약자 → C에서 입출력 기능을 제공하는 표준 라이브러리 → 프로그램에서 데이터를 입력받거나 출력하는 기능을 수행 → 입출력(input/output, I/O)과 관련된 함수들을 모아놓은 헤더 파일 ※ 헤더 파일 역할 → 함수 선언과 관련된 정보를 포함 → 컴파일러가 입출력 함수를 사용할 수 있도록 제공하는 표준 라이브러리 ② 주요 기능 printf() 함수 → 표준 출력 함수 → 데이터를 화면에 출력 → 가장 자주 사용하는 출력 함수 → 출력 형식 지정 가능 scanf() 함수 → 표준 입력 함수 → 사용자로부터 데이터를 입력받음 → 입력된 값을 변수에 저장 → 변수의 주소를 전

Naver Blog

C언어 함수

우리가 C언어로 배열과 문자열까지 배웠다면 슬슬 코드가 많아지거나, 중복되는 코드들이 생겨나기 시작할 것이다. 그럼에도 익숙한 사람은 그 상태로도 사용할 수 있지만, 그게 안되는 사람들은 특정 코드들만 따로 분류해서 사용해야 한다. 그래서 이번에는 함수라는 것에 대해서 정리하겠다. ① 개념 → 특정 작업을 수행하는 코드 블록 → 프로그램을 더 구조적이고 재사용 가능하게 만드는 데 중요한 역할 ② 사용하는 이유 재사용 가능 → 같은 코드를 여러 번 작성할 필요 없음 가독성 증가 → 프로그램이 더 깔끔하고 읽기 쉬워짐 수정 편리 → 한 곳만 고치면 끝 문제 분할 → 큰 문제를 작게 나눌 수 있음 ③ 기본 구조 반환형 함수이름(매개변수) { // 함수 본문 return 반환값; } 반환형 → 함수가 작업을 끝내고 돌려주는 결과값의 데이터 타입 ※ 반환형에 사용될 수 있는 데이터 타입 1) 기본 데이터 타입 1-1 코드 : 정수형 #include<stdio.h> // 반환형 : 정

Naver Blog

C언어 문자열

우리가 C언어로 배열과 문자열 중 먼저 배운다면 배열을 배우고 나서 문자열을 배우게 된다. 이러는 이유가 문자열이 배열과 밀접하게 연관되어 있기 때문에 문자열은 배열을 배우고 난 후 배우게 된다. 그래서 이번에는 문자열에 대해서 정리하겠다. ① 개념 문자열은 문자 배열 → char 타입 배열에 문자를 순서대로 저장한 것 → 문자열은 항상 '\0'(널 문자)로 끝남 ※ '\0'은 문자열의 끝을 나타내기 때문에, C언어에서 문자열을 다룰 때 필수 1-1 코드 #include<stdio.h> int main(void) { // str1과 str2는 같은 내용을 가진 문자열 // 그러나 선언 방식이 다름 // 문자 배열로 문자열 선언 : 각 문자를 명시적으로 배열에 저장 // str1은 문자 배열에 하나씩 문자를 직접 초기화 // 마지막에는 반드시 문자열 끝을 나타내는 '\0' (널 문자)을 추가 char str1[6] = { 'h', 'e', 'l', 'l', 'o', '\0' }; /

Naver Blog

C언어 do-while문

우리가 C언어를 사용하여 반복문에 대해서 공부를 하다가 보면 while문 안에 do-while문이라고 하는 걸 볼 수 있다. 하지만 실제로는 do-while문은 while문과 같은 반복문이지만 사용되는 상황과 동작 방식이 다르기 때문에 따로 봐야 한다. 그래서 이번에는 do-while문에 대해서 정리하겠다. ① 개념 → 조건이 참인지 검사하기 전에 본문을 먼저 실행하는 반복문 → 조건이 거짓이더라도 반드시 한 번은 본문이 실행 ② 기본 구조 do{ // 반복될 내용 } while (조건); → do 블록: 실행될 코드 → while(조건): 실행 후 반복 여부를 결정 → 세미콜론(;): while 뒤에 반드시 작성 ③ while문과의 차이 1-1 코드 : while문 #include<stdio.h> int main(void) { // 1) 0은 거짓으로 인식 // 2) while(0)은 거짓으로 인식됨으로 실행되지 않음 // 3) while(0)로 실행되지 않으니 while문 안에

Naver Blog

C언어 배열

우리가 C언어를 통하여 조건문과 반복문에 대해서 공부를 끝냈으면, 다음으로 배우는 것은 배열과 문자열이다. 하지만 배열과 문자열 중에서 문자열은 배열에서 기초를 배우면 이해하기가 쉽다. 그래서 이번에는 C언어의 배열에 대해서 정리하겠다. ① 개념 → 같은 데이터 타입의 값들을 연속적인 메모리 공간에 저장하고 관리하는 데이터 구조 → 여러 데이터를 하나의 이름으로 묶어서 관리 가능 → 데이터를 인덱스(index)를 통해 접근 ② 특징 같은 데이터 타입 → 배열은 동일한 데이터 타입의 요소만 저장 가능 연속된 메모리 공간 → 배열의 요소들은 메모리에서 연속적으로 저장 고정 크기 → 배열의 크기는 선언 시 결정 → 실행 중에는 변경 불가능 인덱스를 사용한 접근 → 배열의 첫 번째 요소는 0번 인덱스부터 시작 → 마지막 요소는 (크기 - 1)번 인덱스로 접근 ③ 기본 구조 데이터_타입 배열_이름[크기]; 데이터_타입 : 배열에 저장될 데이터의 타입 배열_이름 : 배열을 참조할 이

Naver Blog

C언어 연산자

우리가 c언어로 변수, 데이터, 입출력을 배우고 나면 생각을 해야 하는 것이 값을 하나만 받고 출력하는 것으로 생각할 수 있다. 하지만 코딩을 한다면 값을 이용하여 연산을 다룰 수 있어야 한다. 그래서 이번에는 C언어에서 사용되는 연산자에 대해서 정리하겠다. ① 개념 → 프로그램에서 데이터를 처리하고 조작하기 위해 사용 → 기능에 따라 여러 종류로 나뉘며, 각 연산자마다 특정한 용도와 우선순위를 가짐 ② 산술 연산자 (Arithmetic Operators) → 숫자를 계산하는 데 사용되는 연산자 → 정수, 실수, 그리고 문자 외에 다른 데이터 타입은 직접적으로 사용 불가 → 간접적으로 산술 연산을 지원할 수 있는 특별한 데이터 타입이나 확장된 연산 활용 방식이 존재 연산자 설명 구조 + 덧셈 a + b - 뺄셈 a - b * 곱셈 a * b / 나눗셈 (몫) a / b % 나머지 a % b 1-1 코드 : 정수형 #include<stdio.h> int main(void) { int

Naver Blog

C언어 if문

우리가 C언어로 기초를 어느 정도 습득하고 나면 이제 조건문과 반복문을 배우기 시작할 것이다. 여기서 우리는 먼저 조건문을 배운다. 하지만 C언어에는 조건문이 2개가 있다. 그래서 그 중 먼저 if문을 정리하겠다. ① 개념 → 조건을 평가하고, 조건이 참(true)일 경우 특정 코드를 실행하는 제어문 → 프로그램이 상황에 따라 다른 행동을 할 수 있도록 해주는 기본적인 도구 ② 장단점 1) 장점 단순하고 직관적 → 코드 흐름을 조건에 따라 제어하는 가장 기본적인 방법으로, 이해하고 사용하기 쉬움 → 조건식이 참일 때만 실행하므로 직관적 다양한 조건 처리 가능 → 단순 비교부터 복잡한 논리 연산까지 모든 조건을 처리 가능 → 복합 조건(&&, ||, !)을 자유롭게 사용하여 복잡한 논리도 구현 가능 유연성 → if~else, if~else if~else, 중첩 if문 등으로 확장 가능 → 특정 조건이 참일 때만 실행되는 로직을 쉽게 추가 가능 모든 데이터 타입과 연동 가능 →

Naver Blog

C언어 switch문

우리가 C언어를 사용하여 조건문과 반복문에 대해서 공부할 때, 먼저 if문에 대해서 공부를 한다. 그리고 if문에 대한 공부가 끝났으면 조건문 중 나머지 하나인 switch문에 대해서 공부를 하게 된다. 그래서 이번에는 switch문에 대해서 정리하겠다. ① 개념 → 조건에 따라 여러 가지 코드 블록 중 하나를 실행할 수 있게 해주는 다중 선택 제어문 → 주로 여러 값을 비교해야 할 때 if-else보다 코드가 더 간결하고 가독성이 좋음 ② 장단점 1) 장점 가독성 (Readability) → 여러 조건을 비교해야 할 때, if-else 문보다 코드가 깔끔하고 구조적으로 이해하기 쉬움 → 여러 if-else 문을 중첩해서 쓰는 대신 각 경우를 case로 나누어 보기 쉽게 작성 가능 빠른 실행 속도 (Performance) → 많은 경우를 처리할 때 if-else보다 실행 속도가 빠를 수 있음 → 비교 대상이 많고 값이 간격이 적은 정수형 데이터일 때 유리 쉽게 확장 가능 (Sc

Naver Blog

백엔드

우리가 코딩을 하게 되면 프로그래밍 언어랑 어떤 개발 환경을 사용할 지 생각을 하게 된다. 하지만 프로그래밍 언어를 선택할 때 자신이 프론트엔드 쪽 언어인지 아니면 백엔드 쪽 언어인지 궁금해하는 경우가 있다. 그래서 이번에는 백엔드에 대해서 간단하게 정리하겠다. ※ 프론트엔드, 백엔드, 풀스텍 관련해서 자주 나올 용어 정리 정의 목표 UI (User Interface) 사용자가 웹사이트나 애플리케이션을 사용할 때 직접 상호작용하는 화면의 시각적 요소 버튼, 아이콘, 메뉴, 입력 폼, 색상, 타이포그래피 등 디자인적인 측면에 초점이 맞춰짐 사용자가 웹 페이지나 앱을 쉽게 이해하고 사용할 수 있도록 직관적이고 시각적으로 매력적인 디자인을 제공 UX (User eXperience) 사용자가 웹사이트나 앱을 사용하는 전체 과정에서 느끼는 총체적인 경험 편리함, 직관성, 사용의 용이성 등과 관련이 있음 용자가 웹사이트나 앱을 사용할 때 효율적이고 즐거운 경험을 제공하는 것 정보의 구조, 기능

Naver Blog

C언어 for문

우리가 C언어로 조건문을 다 배우게 되면 다음으로 배우는 것은 반복문이다. 여기서 C언어는 반복문이 for문과 while문 이렇게 2가지로 먼저 나눌 수 있다. 그래서 이번에는 먼저 for문에 대해서 정리하겠다. ① 개념 → 특정 조건이 만족될 때까지 코드를 반복 실행하기 위해 사용 ② 장단점 1) 장점 초기화, 조건, 증감식의 명확한 구조 → 초기화, 조건식, 증감식을 한 줄에 작성 → 반복 구조를 한눈에 파악하기 쉬움 코드 가독성 향상 → 반복 횟수가 정해진 경우, for 문은 다른 반복문보다 가독성이 좋음 초기화 변수의 범위 제한 가능 → C99 이후부터는 for 문에서 선언된 변수가 반복문 외부에서 사용 불가 → 코드가 더 안전해짐 중첩 반복문 사용에 유리 → 중첩 반복문 구조를 명확하게 작성 가능 → 다차원 배열이나 테이블 데이터를 처리하기 적합 반복 제어 용이 → 반복문 내에서 break, continue를 사용해 흐름을 쉽게 제어 가능 2) 단점 복잡한 조건식

Naver Blog

C언어 while문

우리가 C언어를 사용하여 for문을 통하여 반복횟수가 명확한 반복문을 구성하는 것에 익숙해져 있다면, 이제는 반복문 중에서 반복횟수가 명확하지 않을 경우 사용하는 while문에 대해서 정리하겠다. ① 개념 → 조건이 참인 동안 특정 코드를 반복 실행하는 반복문 → 반복 횟수가 명확하지 않거나 조건에 따라 반복 여부를 결정해야 할 때 유용 ② 기본 구조 while(조건식){ // 조건식이 참일 동안 실행될 내용 } 조건식 → 반복 여부를 결정하는 논리식 → 참(true)이면 반복이 계속 → 거짓(false)이면 반복이 종료 ③ for문과의 차이 1-1 코드 : for문 #include<stdio.h> int main(void) { // 초기화 : int i = 0 // 조건식 : i < 5 // 증감식 : i++ for (int i = 0; i < 5; i++) { printf("%d\n", i); } return 0; } 1-1 결과 1-2 코드 : while 문 #include<

Naver Blog

4차 산업혁명

현재 우리 사회는 4차 산업혁명이 진행되고 있다는 말을 많이 사용한다. 그리고 코딩을 할 때 책을 보면 4차 산업혁명이라는 단어를 자주 볼 수 있다. 하지만 우리는 이 4차 산업혁명이 정확하게 뭘 의미하고, 이것이 코딩하는 것과 어떠한 연관이 있는지 상세하게 알 수는 없다. 그래서 먼저 4차 산업혁명에 대해서, 그리고 4차 산업혁명과 코딩의 관계성에 대해서 정리하겠다. ※ 4차 산업혁명에서 자주 사용될 것으로 보이는 단어와 뜻 단어 뜻 정보통신기술 ICT : Information and Communication Technology 정보를 처리하고 전달하는 데 사용되는 모든 기술 데이터를 저장하고 처리하며 사람들 간의 소통을 돕는 기술 현재 거의 모든 산업과 사회에 기반이 되는 중요한 요소 인공지능 AI : Artificial Intelligence 컴퓨터나 기계가 인간의 지능을 모방하거나 구현하는 기술 인간의 인지능력을 모방하는 시스템을 의미 사물인터넷 IoT : Internet o

Naver Blog

코딩

우리가 컴퓨터, 노트북, 휴대폰 등으로 사이트를 접속하거나 게임을 할 때 보면 보통 이것이 원래 있었다고 생각을 할 수 있다. 하지만 이 생각은 잘못된 것이다. 현대적인 컴퓨터의 개념으로 볼 수 있는 기계가 1946년에 ENIAC(Electronic Numerical Integrator and Computer)에 나왔다. 그러나 이 당시에는 3차 산업혁명 전이었다. 이 때는 코딩이라는 개념이 지금 사용하는 것과는 상당히 달랐지만 초기 프로그래밍이 존재했다. 그럼 현재 코딩에 대한 개념부터 하기 전에 옛날의 코딩을 잠시 정리하겠다. ① 옛날 코딩의 개념과 특징 기계어 수준 기계어는 이진수(0과 1)로 이루어진 명령어 컴퓨터가 직접 이해할 수 있는 가장 기본적인 수준의 언어 프로그래머는 특정 연산을 수행하기 위해 이진수나 16진수로 된 명령어를 입력 4비트 단위로 데이터를 처리하는 컴퓨터 상 8진수보다 16진수를 사용 각 명령어는 특정 하드웨어 연산에 대응 물리적 설정 초기 컴퓨터에서는

Naver Blog

개발 환경

우리가 코딩을 하게 되면 먼저 생각을 하는 것이 어떠한 프로그래밍 언어를 사용하고 어떤 개발 환경에서 작업을 하는 것인가로 볼 수 있다. 그래서 먼저 어떤 개발 환경이 존재하고 있고, 그 개발환경에는 어떠한 차이가 있는지 정리하겠다. ① 개발 환경(Development Environment) 정의 → 소프트웨어 개발을 효율적으로 수행하기 위한 도구, 소프트웨어, 하드웨어, 구성 요소의 집합 → 개발환경은 코드 작성, 실행, 디버깅, 테스트, 배포 등 소프트웨어 개발의 모든 단계에서 필요한 지원을 제공 → 프로그래밍 언어, 운영체제, 코드 편집 도구, 버전 관리 시스템, 라이브러리, 그리고 빌드 도구 등으로 구성 ② 개발 환경의 분류 → 통합 개발 환경(IDE)과 텍스트 에디터(Text Editor)를 기준으로 구분 → 둘은 개발에 사용되는 도구라는 점에서는 비슷 → 기능의 복잡성, 자동화, 통합된 도구 제공 여부 등의 차이로 구분 ③ 통합 개발 환경(IDE, Integrated De

Naver Blog

VSCode

나는 오늘 VSCode를 설치할 것이다. 하지만 나는 VSCode라는 것이 존재한다는 것만 알고 있고, 그것이 어떻게 존재하게 되었는지 잘 몰라서 찾으면서 계속 정리를 할 것이다. ① VSCode(Visual Studio Code) 탄생 계기 웹 개발 확산 2000년대 후반과 2010년대 초반, 웹 개발이 폭발적으로 성장 많은개발자들에게 맞춤화된 경량의 코드 편집 도구가 필요 기존의 IDE는 웹 개발자들이 가볍고 유연하게 사용할 수 있는 도구가 아니므로 마이크로소프트는 이런 요구에 맞는 도구를 개발 클라우드, 멀티플랫폼 개발 중요성 증가 마이크로소프트는 2010년대 초반부터 클라우드 서비스인 Azure에 많은 투자를 해왔고, 동시에 개발자들이 여러 플랫폼에서 일할 수 있도록 지원할 필요성 느낌 VSCode는 멀티플랫폼 지원을 염두에 두고 설계 다양한 운영체제에서 동일한 개발 환경을 제공하는 것을 목표 경량 에디터 필요성 기존의 Visual Studio IDE는 매우 강력했지만, 시스

Naver Blog

Python 필수 정보

코딩을 처음 하는 사람들이 보통 먼저 하게 되는 언어 중 하나는 Python이라고 할 수 있다. 하지만 python에 대해서 잘 모르는 상태로 공부를 하기에도 그래서 공부하면서 Python에 대해서 간단하게 정리하겠다. ① Python이란? → 간결하고 읽기 쉬운 문법을 가진 고수준의 프로그래밍 언어 → 데이터 과학, 웹 개발, 인공지능, 자동화, 소프트웨어 개발 등 다양한 분야에서 광범위하게 사용 ② Python 주요 특징 및 장점 간결하고 가독성 높은 문법 코드가 간결하고 이해하기 쉬워 초보자에게 적합 들여쓰기를 사용하여 블록을 구분하는 방식으로, 코드의 가독성을 높임 대형 표준 라이브러리 다양한 작업을 쉽게 처리할 수 있는 표준 라이브러리를 제공 파일 I/O, 네트워킹, 데이터베이스 연결, 웹 서비스 등 다양한 기능 구현 가능 다양한 패키지와 커뮤니티 지원 수많은 오픈소스 라이브러리와 프레임워크를 사용 가능 확장성이 뛰어남 인터프리터 언어 Python은 인터프리터 방식으로 실행

Naver Blog

VSCode, 터미널에서 Python 작동 및 종료

저번에 VSCode를 설치하는 것까지는 완료하였고, Python 확장을 하지 않아서 오늘은 VSCode에 Python을 확장하는 것을 정리할 것이다. 먼저 VSCode를 설치했으면 바로 코드를 작성해도 되지 않을까? 라는 것을 품는 경우가 있다. 하지만 이것은 잘못된 생각이다. VSCode가 기본적으로 Python 지원이 되지 않기 때문에 확장 기능을 사용해서 Python을 확장시켜야 한다. 그럼 VSCode에서 Python을 사용할 수 있도록 확장을 해보도록 하겠다. ① python 다운로드 사이트 접속 Welcome to Python.org Welcome to Python.org The official home of the Python Programming Language www.python.org → 위의 링크로 접속을 하면 된다. ② Downloads에서 자신의 컴퓨터 운영체제에 맞는 것을 클릭한다. → 위의 사진에서 보면 Downloads에 마우스를 올리니 나오는데 거기서

Naver Blog

프론트엔드

우리가 코딩을 하게 되면 프로그래밍 언어랑 어떤 개발 환경을 사용할 지 생각을 하게 된다. 하지만 프로그래밍 언어를 선택할 때 자신이 프론트엔드 쪽 언어인지 아니면 백엔드 쪽 언어인지 궁금해하는 경우가 있다. 그래서 이번에는 프론트엔드에 대해서 간단하게 정리하겠다. ※ 프론트엔드, 백엔드, 풀스텍 관련해서 자주 나올 용어 정리 정의 목표 UI (User Interface) 사용자가 웹사이트나 애플리케이션을 사용할 때 직접 상호작용하는 화면의 시각적 요소 버튼, 아이콘, 메뉴, 입력 폼, 색상, 타이포그래피 등 디자인적인 측면에 초점이 맞춰짐 사용자가 웹 페이지나 앱을 쉽게 이해하고 사용할 수 있도록 직관적이고 시각적으로 매력적인 디자인을 제공 UX (User eXperience) 사용자가 웹사이트나 앱을 사용하는 전체 과정에서 느끼는 총체적인 경험 편리함, 직관성, 사용의 용이성 등과 관련이 있음 용자가 웹사이트나 앱을 사용할 때 효율적이고 즐거운 경험을 제공하는 것 정보의 구조,

Naver Blog

프론트엔드 프레임워크

우리가 개발을 하게 되면 옛날에 비해 기술이 좋아지면서 프레임워크랑 라이브러리를 많이 사용하게 된다. 하지만 프레임워크랑 라이브러리는 비슷하면서도 다르고, 프레임워크랑 라이브러리 각각 프론트엔드 전용과 백엔드 전용으로 나뉘어져있다. 그래서 이번에는 프론트엔드의 프레임워크를 공부하면서 정리하겠다. ① 프레임워크 정의 → 애플리케이션의 구조와 흐름을 관리하는 틀 → 개발자가 그 안에서 코드를 작성하여 작업을 수행하지만, 프레임워크가 전체적인 제어권을 가지고 있음 ② 프레임워크의 특징 제어의 역전(Inversion of Control) → 코드의 흐름을 제어 → 개발자가 프레임워크에 맞춰 코드를 작성하고, 프레임워크가 그 코드를 실행하는 방식 구조 제공 → 애플리케이션을 어떻게 설계하고, 데이터가 어떻게 이동해야 하는지에 대한 가이드라인을 제공 ③ 프론트엔드 프레임워크 정의 → 웹에서 실행되는 사용자 인터페이스(UI)를 만들기 위한 구조와 도구를 제공하는 소프트웨어 프레임워크 → 사용

Naver Blog

프론트엔드 라이브러리

오늘 날, 우리가 코딩으로 개발을 하게 되면 프레임워크랑 라이브러리를 사용하게 된다. 하지만 우리는 프레임워크나 라이브러리를 구분하는 것이 쉽지는 않다. 왜냐하면 프레임워크랑 라이브러리에 대한 것이 일치하는 부분이 있고, 일치하지 않는 부분이 있기 때문이다. 그래서 이번에는 라이브러리에 대해서 공부하면서 간단하게 정리하고, 라이브러리 또한 프론트엔드랑 백엔드로 나누기 때문에 프론트엔드쪽의 라이브러리에 대해서 정리하겠다. ① 라이브러리 정의 → 개발에서는 이미 만들어진 코드의 집합 → 특정 기능을 쉽게 구현할 수 있도록 돕는 도구 → 개발자가 반복적으로 작성해야 할 기능이나 복잡한 작업을 쉽게 처리할 수 있도록 준비된 코드 모음 ② 라이브러리 주요 특징 재사용성 → 이미 검증된 코드를 재사용 → 시간 절약 → 오류 발생 감소 추상화 → 복잡한 작업을 단순화하여 제공 → 내부 구현을 신경 쓰지 않고도 필요한 기능 사용 가능 효율성 → 성능이 최적화된 라이브러리는 더 빠르고 효율적인

Naver Blog

터틀 그래픽

우리가 파이썬을 사용하는 이유를 생각하면 보통 변수의 타입을 정하지 않고도 사용이 가능하기 때문에 코드가 훨씬 간결해진다고 할 수 있다. 하지만 파이썬에선 잘 알려진 것 중 하나가 바로 터틀 그래픽(turtle graphic)이다. 그럼 터틀 그래픽에 대해서 이번에 공부하면서 정리하겠다. ① 터틀 그래픽이란? → 간단한 그래픽을 그리는 방법을 제공하는 프로그래밍 기법 → 주로 교육용으로 사용 ② 터틀 그래픽이 파이썬에서 잘 알려져 있는 이유는? → 파이썬의 코드가 가장 간결하기 때문 → 파이썬의 장점 중 하나가 화면에 그림을 그리기 쉬움 ※ 그래픽이라고 하지 않고 터틀 그래픽이라고 불리는 이유는? → 터틀 그래픽이라고 불리는 이유를 알려면 터틀 그래픽의 기원을 알아야 한다. 터틀 그래픽은 1960년대에 시모어 페이퍼트(Seymour Papert)가 개발한 Logo라는 교육용 프로그래밍 언어에서 시작되었다. Logo 언어는 주로 어린이들에게 프로그래밍과 수학의 기초를 쉽게 가르치기 위

Naver Blog

Python 자료형

Python으로 코딩을 할 경우 보통 int나 str같은 자료형(data type)을 적지 않고 사용한다. 그래서 초보자들이 코딩을 처음 하게 될 경우 Python을 추천하는 경우가 많다. 하지만 이럴 경우의 장단점이나 Python 자료형에 대해서 잘 모르는 경우가 있다. 그래서 이번에는 Python 자료형에 대해서 공부하면서 정리하겠다. ① 자료형의 정의 → 각각의 값이 어떤 종류의 데이터인지를 표시 → 변수에 저장된 값이 정수인지 문자열인지에 따라 자료형이 결정 ② Python 자료형 특징 1) 다른 프로그래밍 언어들과의 차이 동적 타이핑 (Dynamic Typing) : 변수의 자료형을 컴파일 시점이 아닌 실행 시점(run-time)에 결정하는 방식 → 변수를 선언할 때 자료형을 명시할 필요가 없음 → 값이 할당될 때 자료형이 자동으로 결정 → 타입 관련 오류를 방지하기 위해 타입을 추적하는 데 신경을 써야 할 필요가 있음 강타입(strong typing) → 서로 다른 자

1 2