C# 비동기 프로그래밍 - async/await
·
C#
C#에서 비동기 프로그래밍은 현대에서 필수적인 기술웹 서비스, 데이터베이스 연결, 파일 I/O와 같이 시간이 많이 소요되는 작업을 효율적으로 처리하기 위해 비동기 프로그래밍을 사용 동기 방식: 한 작업이 끝나야 다음 작업을 할 수 있음비동기 방식: 한 작업이 진행중이더라도 다른 작업도 동시에 수행할 수 있음 async 함수는 Task를 반환하는 것이 일반적이므로, void 반환 메서드를 async로 만들려면 반환 타입을 Task로 변경해야함
허니웰 바코드 통신 (C# Winform) - Honeywell Xenon 1950
·
C#
⚙️ 스캐너 모드🔸 HID 키보드 모드 (기본)“키보드”나 “휴먼 인터페이스 장치(HID)” 아래에 표시COM 포트가 없음 → 시리얼 통신 불가🔸 USB Serial (CDC) 모드“포트 (COM & LPT)” 아래에 “USB Serial Port (COM3)” 같은 장치 표시SerialPort 코드로 통신 가능 ⚙️ “USB Serial (CDC)” 모드로 전환설정 매뉴얼(Quick Start Guide) 뒤쪽에 보면 “USB Serial Emulation (CDC)”이라는 바코드가 있음.그걸 스캔하면 스캐너가 시리얼 모드로 바뀜절차매뉴얼에서 “USB Serial Emulation” 바코드를 찾는다.(이 바코드가 모델에 따라 "USB COM Port Emulation"으로도 표시됨) 그 바코드를 한..
두번째 과제 후기
·
C#
[실행 시간] 2025.11.06 - 2025.11.07[학습 내용]1. Timer 객체를 사용한 객체 자동 생성 기능Timer 객체를 생성하여 원하는 간격으로,간격마다 실행되는 이벤트를 설정하여 타이머 객체를 시작하도록 설계2. [타이머 기능] 외부 서비스 분리Timer.cs 클래스를 생성하여타이머 시작/정지 등 타이머와 관련된 기능만 따로 관리할 수 있도록 분리메인 View에서 [시작]버튼을 누르면Timers 클래스의 TimerStart 함수가 실행.TimerStart는 OnStudentTimer함수 실행.OnStudentTimer는 timer 설정값 세팅 후 타이머 시작해당 타이머의 Tick은 timer_Tick 함수 실행timer_Tick은 timerD 델리게이트로 invoke를 일으킴timerD..
과제 요구사항 분석
·
C#
[ 학생 자동추가 및 수정 프로그램 ] 1. Student Class 에서 값이 매 10초마다 추가되고, 바뀔 때 마다 주기적으로 View에 Data 전달 전달할 Data 형식은 DataTable 2. Data 전달 후 표기 할 UI - DataGridViewex) Header - Name, Age, Major 홍길동, 24, 도둑3. 특정 Cell을 클릭 할 시, Student에 대한 정보를 불러와서신규 Form 객체를 띄워서(Show) 데이터를 표기ex) 이름 : [Name] 나이 : [Age] 직업 : [Major] 4. 신규 Form객체에서 이름,나이, 직업 등을 수정 후 저장 시, 2번 DataGridView에서 데이터 갱신ex) 홍길동,..
이벤트 핸들러 학습 후 응용한 예제
·
C#
이벤트 핸들러 학습 예제
·
C#
// Create.cspublic Action TempAction; string recivedData = "사과";public void TriggerAction(){ TempAction?.Invoke(recivedData);}// Form1.csprivate Create create = new Create();public Form1(){ InitializeComponent(); create.TempAction += ReadData;}private void button2_Click(object sender, EventArgs e){ create.TriggerAction();}private void ReadData(string obj){ MessageBox.Show($"Actio..
학생조회프로그램 - 외부클래스 분리버전
·
C#
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO; // 파일스트림namespace StudentApp{ public partial class Form1 : Form { // 필드 private List students = new List(); // 학생 리스트 (이것도 어디엔가 분리돼야함) private IniFil..
"이벤트 핸들러"를 사용한 "인자 전달"
·
C#
**“인자를 이벤트 핸들러를 사용해서 넘겨라”**는 말은지금처럼 메서드 매개변수로 직접 name, age, major 등을 넘기는 대신,이벤트 기반으로 객체 간 데이터를 전달하라는 뜻이에요.👉 즉, “버튼이 클릭되면 데이터를 직접 넘기지 말고,그 클릭에 반응하는 다른 클래스가 이벤트를 ‘구독(subscribe)’해서데이터를 전달받도록 구조를 바꿔라” 는 의미예요.🚦 현재 코드의 구조 (직접 호출 방식)Student student1 = create.CreateStudent(name, age, major);listManage.AddStudent(students, student1);👉 Form1이 create와 listManage를 직접 호출👉 Form1이 모든 데이터 흐름을 제어 (즉, tightly..
인스턴스
·
C#
// MyClass 라는 이름의 클래스 정의public class MyClass{ public int Value { get; set; } // 인스턴스 멤버 변수 (프로퍼티) // 생성자 (선택 사항) public MyClass(int value) { Value = value; } public void DisplayValue() { Console.WriteLine($"The value is: {Value}"); }}// 여러 인스턴스 생성 및 사용class Program{ static void Main(string[] args) { // 첫 번째 인스턴스 생성 MyClass instance1 = new..
학생 추가 기능 분리
·
C#
// 객체 생성 Student student1 = create.CreateStudent(name, age, major); // 생성한 객체를 [학생 리스트]에 추가 students.Add(student1); // 생성한 객체를 [UI-Listbox]에 추가 listStudents.Items.Add(student1.Name); create 라는 외부 클래스에서 객체를 생성한 뒤 넘겨 받았다.넘겨받은 객체를 List에도 추가해야하고, UI에도 추가해야한다. 하지만 유저 인터페이스는 가급적 UI만 건드리는 일을 하는게 좋고,나머지 연산 등의 기능은 외부 클래스로 분리하..
학생 조회 프로그램 - class 버전
·
C#
필드(Field) vs 속성(Property)
·
C#
public string filePath = "students.ini";🔹 필드(Field)클래스 내부에서 데이터를 직접 저장하는 공간외부에서 접근할 때 직접 읽고 쓸 수 있음지금 코드에서 public string filePath가 바로 필드문제점:외부에서 바로 수정 가능 (iniFile.filePath = "abc.ini";)나중에 값을 검증하거나, 변경될 때 동작을 넣기 어렵습니다.-public string FilePath { get; set; } = "students.ini";🔹 속성(Property)읽기/쓰기 방법을 캡슐화해서 관리값 변경 시 검증, 로그, 이벤트 등 추가 가능C#에서는 get과 set으로 구현 get : 값을 가져올 때 호출set : 값을 변경할 때 호출 💡 정리필드는 단..
namespace와 using구문
·
C#
using 구문은 파일, 네트워크, 데이터베이스 연결 등 “외부 자원”을 자동으로 정리(dispose) 하기 위한 문법즉, using은 “이 코드 블록이 끝나면 자동으로 닫아줘!” 라는 의미// 비추천 ❌StreamWriter writer = new StreamWriter(filePath);writer.WriteLine("Hello");writer.Close();// 추천 ✅using (StreamWriter writer = new StreamWriter(filePath)){ writer.WriteLine("Hello");} // 여기서 자동으로 Dispose() → Close() 호출됨 ❌ Close() 직접 호출예외 시 자원 누수 가능✅ using 사용자동으로 안전하게 닫힘
필드(전역)변수와 내부(지역)변수
·
C#
namespace StudentApp{ internal class iniFile { // 필드 public string filePath = "students.ini"; // 이것도 지정하면 좋을것같은데 // 메서드 public void writeFile(List students) { try { StreamWriter writer = new StreamWriter(filePath); foreach (var student in students) { writer.WriteLine($"[..
static void Main(string[] args) 의 의미
·
C#
static void Main(string[] args)는 C# 프로그램의 시작점을 나타내는 함수입니다. static은 객체 생성 없이 함수를 호출할 수 있게 하고, void는 함수가 값을 반환하지 않음을 의미하며, Main은 프로그램의 진입점임을 나타냅니다. string[] args는 프로그램 실행 시 전달되는 명령줄 인수들을 담는 문자열 배열입니다.
static이 아닌 필드, 메서드 또는 속성에 개체 참조가 필요합니다.
·
C#
이 오류는 인스턴스 멤버(non-static member)를 인스턴스(객체) 없이 직접 호출하려고 할 때 발생 Non-static (인스턴스) 메서드/필드: 특정 객체 인스턴스에 속하며, 해당 객체의 데이터를 사용하여 작동합니다. 사용하기 전에 반드시 클래스의 인스턴스를 생성해야 합니다.Static (정적) 메서드/필드: 클래스 자체에 속하며, 객체 생성 없이 클래스 이름으로 직접 호출할 수 있습니다. 정적 메서드는 인스턴스 데이터를 참조할 수 없습니다. >> 메서드가 static으로 선언되지 않았기 때문에컴파일러는 이 메서드를 호출할 때 어떤 특정 writeFile 객체에 대해 실행해야 할지 알 수 없어 오류를 발생 namespace StudentApp{ internal class writeFi..
학생 조회 프로그램 - origin 코드
·
C#
서비스 로직 분리 전 코드using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO; // 파일스트림namespace StudentApp{ public partial class Form1 : Form { private List students = new List(); // 학생 리스트 public Form1() { ..
학생 조회 프로그램 - 함수 설명 (기능명세서)
·
C#
함수명기능private void btnCreate_Click(object sender, EventArgs e)학생 생성 함수private void btnSave_Click(object sender, EventArgs e)파일 저장 함수private void listStudents_MouseDoubleClick(object sender, MouseEventArgs e) 상세정보 조회 함수클래스에 있는 메서드를 사용private void btnOpen_Click(object sender, EventArgs e) 파일 열기 함수private void parseIniFile(StreamReader reader) 파싱 함수매개 인자: StreamReaderprivate void btnClear_Click(obje..
학생 조회 프로그램
·
C#
Student.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace StudentApp{ internal class Student { // 속성 public string Name { get; set; } public int Age { get; set; } public string Major { get; set; } // 생성자 public Student(string name, int age, string major) { Na..
예외종류 :: 구체적인 예외로 어떤 오류인지 확인하기
·
C#
이름 / 의미 / 상황FormatException형식이 맞지 않는 경우"abc"를 int.Parse()로 변환할 때ArgumentException잘못된 인자가 전달됨메서드에 잘못된 값 전달ArgumentNullExceptionnull이 전달됨null을 허용하지 않는 메서드에 null 전달ArgumentOutOfRangeException범위를 벗어난 값 전달리스트 인덱스가 0~9인데 10을 접근IndexOutOfRangeException배열/리스트 인덱스 범위 초과배열 길이보다 큰 인덱스 접근NullReferenceExceptionnull 참조 시null 객체의 메서드 호출InvalidOperationException잘못된 상태에서 메서드 호출이미 종료된 스트림에 쓰기 시도DivideByZeroExcept..