기본 데이터 형식:값 형식참조 형식값 형식: 변수가 '값'을 담는 데이터 형식참조 형식: 변수가 값 대신 값이 있는 곳의 '위치(참조)'를 담는 데이터 형식메모리 영역스택 : 값 형식 변수들은 스택에 저장됨. 데이터가 저장된 힙 메모리의 주소를 저장.변수의 생명 주기가
산술 연산자증가 연산자, 감소 연산자\++\_\_전위 증가, 후위 증가 연산자문자열 결합 연산자
비트 연산자를 활용한 출력 결과 이해를 위해진법 이해가 선행되어야 좋을 것 같아 진법을 좀 더 자세히 알아보았다.
String input = Console.ReadLine();Console.ReadLine() 메서드를 사용하여 사용자의 입력을 문자열 형태로 받아옵니다.입력받은 문자열을 input 변수에 저장합니다.int input_number = Convert.ToInt32(inp
Q1.public static void Swap(int a, int b)A1.public: 접근 제한자로, 어디서든 이 메서드에 접근할 수 있도록 합니다.static: 이 메서드가 클래스의 인스턴스를 생성하지 않고도 호출될 수 있음을 의미합니다.void: 이 메서드가
Q1.public static void Swap(ref int a, ref int b)A1.public: 접근 제한자로, 어디서든 이 메서드에 접근할 수 있도록 합니다.static: 이 메서드가 클래스의 인스턴스를 생성하지 않고도 호출될 수 있음을 의미합니다.void:
코드 분석 Product 클래스는 price라는 정수형 필드와 GetPrice(), PrintPrice() 메서드를 가지고 있습니다. GetPrice() 메서드는 ref 키워드를 사용하여 price 필드의 참조를 반환합니다. MainApp 클래스의 Main 메
Q.필드값은 c언어의 함수값이고, 필드는 c언어의 함수랑 똑같은 말인가?A.아니요, CCC언어의 함수는 특정 작업을 수행하는 코드 블록입니다. 함수는 입력 값을 받아서 처리하고, 결과 값을 반환할 수 있습니다.비유를 통해 설명하면,CC언어의 함수: 자동차의 시동을 걸거
인자는 함수에 전달되는 값이고, 매개변수는 그 값을 받아서 저장하는 변수입니다.C하지만 ref 또는 out 키워드를 사용하면 참조에 의한 전달 방식을 사용할 수 있습니다. 이 경우 매개변수는 인자로 전달된 변수의 메모리 주소를 저장하게 되고, 매개변수를 통해 값을 변경
메서드 오버로딩과 가변 개수의 인수는 C메서드 오버로딩메서드 오버로딩은 같은 이름의 메서드를 여러 개 정의하면서, 매개변수의 개수나 타입을 다르게 하는 것입니다. 이렇게 하면 함수 이름을 똑같이 유지하면서도 다양한 상황에 맞게 함수를 사용할 수 있습니다. 마치 같은 이
확장 메소드: '기존 클래스'의 기능을 확장 ( =/+상속 ) 상속(기반 클래스를 물려 받아 파생 클래스를 만든 뒤 파생 클래스에 필드나 메소드 추가)과 다름
using System;/\*구조체: 값 형식 \-> 따라서 상속 불가능\-> 할당 연산자 =를 통해 모든 필드가 그대로 복사됨. (깊은 복사)인스턴스를 선언만으로도 생성 가능 -> new 연산자 없어도 됨.매개변수 없는 생성자 선언 불가.(클래스와 비교해서 이해할 것
using System;/\*읽기 전용 메소드: 건드려서는 안되는 상태를 수정하는 실수를 방지.readonly 한정자를 이용해서 메소드에게 상태를 바꾸지 않도록 강제.구조체안에서만 선언 가능.readonly로 한정한 메소드에서 객체의 필드를 바꾸려 하면 컴파일 에러 발
using System;/튜플: 여러 필드를 담을 수 있는 구조체. 단, 형식 이름이 없음. -> 따라서 형식을 선언할 떄가 아닌 즉석에서 사용할 복합 데이터 형식을 선언할 때 적합!구조체 -> 값 형식. /namespace Tuple{ class MainApp
using System; /* 튜플은 분해자를 구현하고 있어서 분해가 가능. 위치 패턴 매칭: 분해자를 구현하고 있는 객체를 분해한 결과를 Switch 문이나 Switch 식의 분기 조건에 활용한 것. 튜플의 요소들을 분해하고, 그 '
using System;/\*인터페이스: 인스턴스를 가질 수 없지만, 인터페이스를 상속받는 클래스의 인스턴스를 만드는 것 가능.파생 클래스는 인터페이스에 선언된 모든 메소드 및 프로퍼티를 구현해야 함. (인터페이스는 '약속'이다!)이 메소드들은 public 한정자로 수
using System;/\*인터페이스의 다중 상속: 여러 인터페이스를 다중 상속하는 클래스 사용 가능.즉, 클래스는 여러 개의 인터페이스를 상속 받아 여러 인터페이스의 기능을 동시에 구현할 수 있음.\-> 왜냐하면 인터페이스는 내용이 아닌 외형을 물려줌.따라서 죽음의
using System;/\*인터페이스의 '기본 구현 메소드':구현부를 가지는 메소드.놓친 메소드를 인터페이스에 안전하게 추가하는 방법임 !인터페이스에 새로운 메소드를 추가할 떄, 기본적인 구현체를 갖도록 해서기존에 인터페이스를 구현한 클래스들이 코드를 수정하지 않아도
using System;using AbstractClass;/\*추상 클래스:구현을 가질 수 있으나, 클래스와 달리 인스턴스를 가질 수 없음. 객체를 직접 생성할 수 없는 클래스로, 파생 클래스에서 상속받아 사용해야 함.abstract 한정자와 class 키워드를 이용
using System;/\*프로퍼티: Get/Set 메소드를 대체함 \*/namespace Property{ class BirthdayInfo { private string name; // 이름을 저장하는 private 필드 pri
using System;namespace ConstructorWithProperty{ class BirthdayInfo { public string Name { get; set; }
상황: 리포지토리에서 이전 코드를 완전히 지우고 새 코드를 작성할 때, Git이 이를 변경 사항으로 인식하여 붉은색으로 표시되는 문제 발생...이전에 작성한 코드 다시 보려다가 발견........대참사우선 깃의 스태시, 푸시, 커밋에 대한 이해가 필요할 것으로 판단.스
using System;/\*BirthdayInfo라는 클래스를 정의하고, 이 클래스의 객체를 생성하여 속성을 초기화하는 방법을 보여줍니다.특히, 객체 초기화자를 사용하여 객체를 생성하면서 속성 값을 설정하는 방법을 보여줍니다. \*/namespace Construct
using System;/\*초기화 전용 자동 구현 프로퍼티 : 접근 한정자, readonly 필드, readonly 구조체, 튜플 등과 같은 데이터 오염 방지 장치.프로퍼티를 읽기 전용으로 아주 간편하게 선언할 수 있는 방법.init 접근자를 사용함.\-> set
새로운 브랜치를 만드니까 체크아웃하라는 알림이 왜 뜨는걸까?새로운 브랜치를 만들면 체크아웃하라는 메시지가 뜨는 것은, Git이 브랜치를 생성하는 것과 해당 브랜치로 작업 환경을 전환하는 것을 분리된 작업으로 처리하기 때문입니다.브랜치를 생성하는 것은 단순히 새로운 브랜
using System;/\*레코드 형식: 값 형식처럼 다룰 수 있는 불변 참조 형식.참조 형식의 비용 효율과,값 형식의 편리함을 모두 제공.record 키워드와 초기화 전용 자동 구현 프로퍼티(읽기 전용 프로퍼티 간편 선언 방법)를 함께 이용해서 선언함.레코드에는 쓰
분기문박복문점프문
using System;/with 식을 이용한 레코드 복사:with 식을 사용하면 레코드 객체의 일부 속성 값만 변경하면서 새로운 객체를 쉽게 생성할 수 있습니다. 이는 불변 객체를 다룰 때 유용하게 사용할 수 있습니다./// with 식을 사용하여 레코드 객체를 복사
using System;/\*클래스 vs 레코드레코드 객체 비교:컴파일러는 레코드의 상태를 비교하는 Equals() 메소드를 자동으로 구현함.레코드는 참조 형식이지만, 값 형식처럼 Equals() 메소드를 재정의(오버라이딩)하지 않아도 값이 동등한지 비교가 가능함.1)
using System;/\*무명 형식:이름이 없는 형식으로, 컴파일러가 자동으로 형식을 생성함.형식의 선언과 동시에 인스턴스를 할당함.따라서 인스턴스를 만들고 다시는 사용하지 않을 때 요긴하게 사용.무명 형식의 프로퍼티에 할당된 값은 변경 불가능함. (즉, 읽기 전용
using System; using System.Xml.Linq; /* 인터페이스의 프로퍼티: 인터페이스에 프로퍼티를 선언하면, 해당 인터페이스를 구현하는 모든 클래스는 해당 프로퍼티를 구현해야 합니다. 인터페이스는 프로퍼티의 get 및 set 접근자를 선언하지만,
using System;/\*추상 클래스:클래스처럼 구현된 프로퍼티를 가질 수 있는 한편,인터페이스처럼 구현되지 않은 프로퍼티(추상 프로퍼티)도 가질 수 있음추상 프로퍼티:파생 클래스에서 반드시 구현(재정의)해야 함abstract 한정자를 이용해서 선언 \*/// 추상
using System;/배열:같은 성격을 가진 다량의 데이트를 한 번에 다뤄야 하는 경우에 유용함.데이터를 담는 상자와 같아서, 필요한 용량을 가진 배열을 만든 다음 여기에 데이터를 넣을 수 있음.예를 들어, 300개의 변수를 선언하는 대신, 300개의 용량을 가진
using System;/\*C.NET의 Commin Type System(CTS)에서 배열은 System.Array 클래스에 대응됨.즉, C따라서 모든 배열은 System.Array 클래스의 멤버를 상속받아 사용할 수 있습니다. System.Array 클래스는 배열을
using System;/\*C따라서 모든 배열은 System.Array 클래스의 멤버를 상속받아 사용할 수 있음.System.Array 클래스에 있는 메소드와 프로퍼티들을 사용해서,배열 내부의 데이터를 원하는 순서대로 정렬하거나,특정 데이터를 배열 속에서 찾아내는 작
using System;/\*슬라이스(Slice): 배열의 일부분을 추출하여 새로운 배열을 만드는 기능Array.Copy() 메서드보다 편함.Range 타입(System.Range 형식)과 인덱스 from end 연산자(^)를 사용하여 배열의 슬라이스를 생성할 수 있습
using System;/2차원 배열: 행과 열로 이루어진 표 형태의 데이터 구조 /// 2차원 배열을 선언하고 초기화하는 다양한 방법을 보여줌.namespace \_2DArray{ class MainApp { static void Main(st
using System;/3차원 배열:깊이, 행, 열을 가지는 데이터 구조로, 큐브 형태로 생각 /// 3차원 배열을 선언하고 초기화한 후, 배열의 요소를 출력함namespace \_3DArray{ class MainApp { static voi
using System;/가변 배열(Jagged Array):다양한 길이의 배열을 요소로 갖는 배열.즉, 각 배열 요소의 크기가 다를 수 있습니다. /namespace JaggedArray{ class MainApp { static void Ma
using System;using System.Collections;/\*ArrayList:다양한 타입의 객체를 저장할 수 있는 동적 배열.배열과 달리, 컬렉션을 생성할 때 용량을 미리 지정할 필요 없이 자동으로 용량이 늘어나거나 줄어드는 게 장점.컬렉션 클래스 중 하
using System;using System.Collections;/\*Queue:선입선출(FIFO) 방식으로 데이터를 저장하는 자료 구조.즉, 먼저 들어간 데이터가 먼저 나오는 구조.프린터가 여러 문서를 출력할 때, 동영상 스트리밍 서비스에서 콘텐츠를 버퍼링할 때
using System;using System.Collections;/\*Stack:후입선출(LIFO) 방식으로 데이터를 저장하는 자료 구조.즉, 먼저 들어온 데이터가 나중에 나가고,나중에 들어온 데이터가 먼저 나가는 구조의 컬렉션입니다.마치 접시를 쌓아 올렸을 때,
using System; using System.Collections; // ArrayList, Hashtable, Queue, Stack 등과 같은 제네릭이 아닌 컬렉션을 사용할 때 필요합니다. // 다만, 최근에는 제네
using System;using System.Collections;using static System.Console;/컬렉션(ArrayList, Stack, Queue)을 초기화하는 방법(1) 배열을 이용한 컬렉션 초기화(2) 컬렉션 초기화자{}를 이용한 컬렉션 초기
using System;using System.Collections;/\*인덱서(Indexer):인덱스를 이용해서 객체 내의 데이터에 접근하게 해주는 프로퍼티.객체를 마치 배열처럼 사용할 수 있게 해줌.(클래스의 인스턴스를 배열처럼 사용할 수 있도록 해주는 멤버입니다.
using System;using System.Collections;namespace Yield{ class MyEnumerator { int\[] numbers = { 1, 2, 3, 4 }; public IEnumerator Ge
클래스는 객체를 만들기 위한 설계도입니다. 붕어빵 틀을 생각하면 이해하기 쉽습니다. 붕어빵 틀에는 붕어빵의 모양, 크기 등이 정의되어 있고, 이 틀을 사용하여 여러 개의 붕어빵을 만들 수 있습니다. 마찬가지로 클래스는 객체의 속성(데이터)과 메서드(행위)를 정의하고,
클래스 안에 인터페이스가 존재할 수도 있고, 그 반대일 수도 있으며, 각자 따로 존재하게 작성할 수도 있습니다. 각 방법은 서로 다른 의미와 용도를 가지고 있습니다.1\. 클래스 안에 인터페이스 (중첩 인터페이스)클래스 내부에 인터페이스를 선언하는 것을 중첩 인터페이스
using System;using System.Collections; // IEnumerable, IEnumerator 인터페이스를 사용하기 위해 필요합니다./IEnumerator 인터페이스의 메소드 및 프로퍼티?(1) boolean MoveNext()(2) void
using System;namespace CopyingArray{ class MainApp { static void CopyArray(T\[] source, T\[] target) // 제네릭 메서드 CopyArray를 정의함.
using System;using static System.Runtime.InteropServices.JavaScript.JSType;/일반화 클래스:데이터 형식을 일반화한 클래스.각 클래스가 데이터 형식만 빼고 다른 부분이 모두 같으면,형식 매개변수(T)를 이용해서
using System;/\*형식 매개변수(Type Parameter)의 조건에 제약 걸기: 일반화 메소드나 일반화 클래스가 입력받는 형식 매개변수 T는 '모든' 데이터 형식을 대신할 수 있다. 하지만 특정 조건을 갖춘 형식에만 대응하는 형식 매개변수가 필요할 때가 있
using System;using System.Collections.Generic;/List:비일반화 클래스인 ArrayList와 같은 기능을 하지만, 특정 자료형만 저장할 수 있도록 제네릭을 사용한다.형식 매개변수에 입력한 형식 외에는 입력을 허용하지 않는다./nam
using System;using System.Collections.Generic; // Queue를 사용하기 위해 필요한 네임스페이스/Queue 제네릭 컬렉션을 사용하는 방법:Queue는 선입선출(FIFO) 방식으로 데이터를 저장하는 자료 구조.즉, 먼저 들어간 데이
using System;using System.Collections.Generic;/Stack:후입선출(LIFO) 방식으로 데이터를 저장하는 자료 구조.즉, 나중에 들어간 데이터가 먼저 나오는 구조입니다.는 스택에 저장될 데이터의 형식을 나타내는 제네릭 타입 매개변수입
using System;using System.Collections.Generic;/Dictionary<TKey, TValue>:키-값 쌍을 저장하는 컬렉션입니다. 각 요소는 키와 값으로 구성되며, 키를 사용하여 값에 접근할 수 있습니다.는 키의 형식을 나타내는
using System;using System.Collections;using System.Collections.Generic;/\*배경:IEnumerable인터페이스를 상속해서 foreach를 사용할 수 있는 클래스를 만들 수 있음.문제는 foreach 문을 통해 요
using System;/\*예외(Exception):프로그래머가 생각한 시나리오에서 벗어나는 사건.예를 들어, 숫자만 입력해야 하는데 문자열을 입력하거나,파일을 전송하고 있는데 네트워크가 다운되는 등의 사건 발생.예외 처리(Exception Handling):예외가
using System;/try-catch 문: CIndexOutOfRangeException 예외를 던졌는데 Main() 메서드가 처리하지 못하게 되는 문제 발생.이를 해결하려면 예외를 Main()메서드가 받으면(catch) 됨. /// try-catch 문을 이용하
using System;/\*예외 처리(Exception Handling):예외 처리는 프로그램 실행 중 발생할 수 있는 예외 상황을 처리하여 프로그램의 비정상적인 종료를 방지하고 안정성을 높이는 데 사용됩니다.throw 문: 예외를 던지는 방법. 예외는(1) 발생한
using System;/\*throw 식: 예외를 발생시키는 방법.C조건 연산자 안에서도 예외를 발생시킬 수 있습니다.throw 식의 장점?\-코드를 간결하게 작성할 수 있습니다.\-조건부로 예외를 발생시킬 수 있습니다.\-식 내에서 예외를 발생시킬 수 있으므로, 코
using System;/\*finally 절:예외 처리를 하는 방법.try~catch 문의 마지막에 연결해서 사용.자신이 소속된 try 절이 실행된다면 finally 절은 어떤 경우라도 실행됨.즉, 예외 발생 여부와 관계없이 finally 절은 실행됨.심지어 retu
using System;/\*사용자 정의 예외 클래스:C따라서 Exception 클래스를 상속하기만 하면 새로운 예외 클래스를 만들 수 있습니다.사용 이유?.NET은 100개가 넘는 예외 형식을 제공하기 때문에 사용자 정의 예외는 자주 필요하진 않습니다.하지만 특별한
base(message)를 호출하는 것은 파생 클래스에서 메시지를 사용하기 위해서가 아니라, 기본 클래스의 생성자를 호출하여 예외 메시지를 초기화하기 위해서입니다. InvalidArgumentException 클래스는 Exception 클래스를 상속받았기 때문에, Ex
using System;/\*예외 필터(Exception Filter):catch 절이 받아들일 예외 객체에 제약 사항을 명시해서,해당 조건을 만족하는 예외 객체에 대해서만 예외 처리 코드를 실행할 수 있도록 함.catch() 절 뒤에 when 키워드를 이용해서 제약
using System;/\*예외 처리(Exception Handling) 장점:(1) 실제 일을 하는 코드(try 절)와 문제를 처리하는 코드(catch 절)를 분리시킴으로써,코드를 간결하게 만들어 줌.(2) 예외 객체의 StackTrace 프로퍼티를 통해, 문제가
using System;/\* 대리자(delegate):메서드에 대한 참조.대리자에 메소드의 주소를 할당한 후, 대리자를 호출하면 대리자가 메소드를 호출해줌.델리게이트의 장점?메서드를 변수처럼 저장하고 전달할 수 있습니다.메서드를 동적으로 호출할 수 있습니다.콜백 함수
코드 설명이 CMyDelegate 델리게이트delegate 키워드를 사용하여 MyDelegate라는 이름의 델리게이트를 선언합니다.int MyDelegate(int a, int b)는 델리게이트의 시그니처를 나타냅니다. 즉, MyDelegate 델리게이트는 두 개의 정
코드 설명이 CCompare<T> 델리게이트Compare<T>라는 이름의 제네릭 델리게이트를 선언합니다. 이 델리게이트는 두 개의 T 타입 매개변수를 받아 정수 값을 반환하는 메서드를 참조할 수 있습니다.AscendCompare<T> 메서드두 개의 T
코드 설명이 CNotify 델리게이트Notify라는 이름의 델리게이트를 선언합니다. 이 델리게이트는 문자열 매개변수를 하나 받고 void를 반환하는 메서드를 참조할 수 있습니다.Notifier 클래스EventOccured라는 Notify 델리게이트 타입의 이벤트를 선언
코드 설명이 CCompare 델리게이트Compare라는 이름의 델리게이트를 선언합니다. 이 델리게이트는 두 개의 정수를 매개변수로 받아 정수 값을 반환하는 메서드를 참조할 수 있습니다.BubbleSort 메서드정수형 배열 DataSet과 Compare 델리게이트 Com
코드 설명이 CEventHandler 델리게이트EventHandler라는 이름의 델리게이트를 선언합니다. 이 델리게이트는 문자열 매개변수를 하나 받고 void를 반환하는 메서드를 참조할 수 있습니다.MyNotifier 클래스SomethingHappened라는 Event
코드 설명이 CCalculate 델리게이트Calculate라는 이름의 델리게이트를 선언합니다. 이 델리게이트는 두 개의 정수를 매개변수로 받아 정수 값을 반환하는 메서드를 참조할 수 있습니다.Main 메서드Calculate calc = (a, b) => a + b;:
코드 설명이 CConcatenate 델리게이트Concatenate라는 이름의 델리게이트를 선언합니다. 이 델리게이트는 문자열 배열을 매개변수로 받아 문자열 값을 반환하는 메서드를 참조할 수 있습니다.Main 메서드Concatenate concat = (arr) => {
코드 설명이 CFunc 델리게이트Func 델리게이트는 최대 16개의 입력 매개변수를 받고 하나의 값을 반환할 수 있습니다. Func 델리게이트의 마지막 타입 매개변수는 반환 타입을 나타내고, 나머지 매개변수는 입력 매개변수의 타입을 나타냅니다.예를 들어, Func<
코드 설명이 CAction 델리게이트는 최대 16개의 입력 매개변수를 받을 수 있습니다. Action 델리게이트는 값을 반환하지 않으므로, 반환 타입을 지정하지 않습니다.예를 들어, Action은 입력 매개변수가 없는 메서드를 나타내고, Action<int>는 i
코드 설명이 C맞아요! Expression const1 = Expression.Constant(1); 에서 Expression.Constant(1) 메서드는 ConstantExpression 타입의 객체를 생성하는 것이 더 정확한 표현입니다. Expression 클래스
코드 설명이 CMainApp 클래스의 Main 메서드에서는 int\[] numbers = { 9, 2, 6, 4, 5, 3, 7, 8, 1, 10 };를 통해 10개의 정수 값을 가진 numbers 배열을 선언하고 초기화합니다.from n in numbers는 numb
코드 설명이 CClass 클래스는 Name과 Score 프로퍼티를 가집니다. Name은 문자열 타입이고, Score는 정수형 배열 타입입니다.MainApp 클래스의 Main 메서드에서는 4개의 Class 객체를 생성하여 arrClass 배열에 저장합니다. 각 Class
코드 설명이 CMainApp 클래스의 Main 메서드에서는 5개의 Profile 객체를 생성하여 arrProfile 배열에 저장합니다.from profile in arrProfile는 arrProfile 배열의 각 요소를 profile이라는 변수에 할당하며 쿼리를 시작
코드 설명이 코드는 C1\. 클래스 정의먼저, 두 개의 클래스 Profile과 Product를 정의합니다.Profile 클래스: Name 프로퍼티 (string 타입): 사람의 이름을 나타냅니다.Height 프로퍼티 (int 타입): 사람의 키를 나타냅니다.Produc
코드 설명이 코드는 LINQ를 사용하여 arrProfile 배열에 있는 Profile 객체들을 필터링하고 정렬한 후, 새로운 형태의 데이터로 변환하는 예제입니다. 1\. 데이터 준비Profile 클래스: 사람의 이름(Name)과 키(Height)를 프로퍼티로 가집니다.
https://learn.microsoft.com/en-us/dotnet/standard/base-types/common-type-system
코드 설명이 CGetType 네임스페이스 안에 MainApp 클래스가 정의되어 있습니다.PrintInterfaces 메서드static void PrintInterfaces(Type type): Type 객체를 입력으로 받아 해당 타입이 구현하는 인터페이스 목록을 출력합
Profile 클래스: 이름과 전화번호를 저장하는 name과 phone 필드, 생성자, Print() 메서드, Name 프로퍼티, Phone 프로퍼티를 가진 클래스입니다.MainApp 클래스:Type type = Type.GetType("DynamicInstance.P
코드 설명이 CMainApp 클래스AssemblyBuilder newAssembly = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("CalculatorAssembly"), AssemblyBuilderAccess.R
코드 설명네, 특성은 애트리뷰트와 같은 말입니다. 앞으로 특성 대신 애트리뷰트라고 말씀드리겠습니다.이 CObsolete 애트리뷰트는 메서드, 클래스, 프로퍼티 등에 적용하여 해당 요소가 더 이상 사용되지 않거나, 향후 버전에서 제거될 예정임을 나타냅니다. MyClass
코드 설명이 CCallerInfo 네임스페이스 안에 Trace 클래스와 MainApp 클래스가 정의되어 있습니다.Trace 클래스public static class Trace: Trace라는 이름의 정적 클래스를 정의합니다.public static void WriteL
코드 설명이 C클래스 정의Duck: Walk, Swim, Quack 메서드를 가진 클래스입니다.Mallard: Duck 클래스를 상속받는 클래스입니다.Robot: Walk, Swim, Quack 메서드를 가진 클래스입니다. Duck 클래스와는 상속 관계가 없습니다.Ma
프로그래밍에서 코드가 실행되는 과정은 크게 컴파일 타임과 런타임으로 나눌 수 있습니다. 이 두 시점을 구분하는 기준과 각 시점의 특징을 이해하는 것은 프로그램의 동작 방식을 이해하고 효율적인 코드를 작성하는 데 매우 중요합니다.1\. 컴파일 타임정의: 소스 코드를 컴파
코드 설명코드 설명이 코드는 COM 인터페이스를 사용하여 Excel 파일을 생성하는 두 가지 방법을 보여줍니다. OldWay 메서드는 명시적 형변환을 사용하는 이전 방식을 사용하고, NewWay 메서드는 dynamic 형식을 사용하는 새로운 방식을 사용합니다.OldWa
코드 설명코드 설명IronPython 엔진을 사용하여 Python 코드를 C\* ScriptEngine engine = Python.CreateEngine();: IronPython 엔진을 생성합니다.ScriptScope scope = engine.CreateScope
코드 설명(1)코드 설명이 Cstring directory: 디렉터리 경로를 저장할 변수입니다.if (args.Length < 1): 명령줄 인수가 없으면 현재 디렉터리(".")를 사용하고, 명령줄 인수가 있으면 첫 번째 인수를 디렉터리 경로로 사용합니다.Cons
코드 설명코드 설명이 COnWrongPathType(string type): 잘못된 경로 타입을 입력받았을 때 호출되는 메서드입니다. 오류 메시지를 출력하고 메서드를 종료합니다.Main 메서드:if (args.Length == 0): 명령줄 인수가 없으면 사용법을 출력
코드 설명코드 설명이 Clong someValue = 0x123456789ABCDEF0;: long 형식의 someValue 변수를 선언하고 16진수 값으로 초기화합니다.Console.WriteLine("{0,-1} : 0x{1:X16}", "Original Data"
코드 설명코드 설명이 CStream outStream = new FileStream("a.dat", FileMode.Create);: "a.dat" 파일을 쓰기 모드로 열거나 생성합니다.Console.WriteLine($"Position : {outStream.Posi
코드 설명코드 설명이 Cusing System;: Console 클래스를 사용하기 위해 System 네임스페이스를 사용합니다.using System.IO;: 파일 입출력을 위한 FileStream 클래스를 사용하기 위해 System.IO 네임스페이스를 사용합니다.usi
코드 설명코드 설명이 CBinaryWriter: 이진 형식으로 데이터를 파일에 쓰는 클래스입니다.BinaryReader: 이진 형식으로 파일에서 데이터를 읽는 클래스입니다.Main 메서드using (BinaryWriter bw = new BinaryWriter(new
코드 설명코드 설명이 CStreamWriter: 텍스트 형식으로 데이터를 파일에 쓰는 클래스입니다.StreamReader: 텍스트 형식으로 파일에서 데이터를 읽는 클래스입니다.Main 메서드using (StreamWriter sw = new StreamWriter(ne
코드 설명코드 설명이 CNameCard 클래스: 이름, 전화번호, 나이를 저장하는 프로퍼티를 가진 클래스입니다.Main 메서드:var fileName = "a.json";: 파일 이름을 "a.json"으로 설정합니다.using (Stream ws = new FileSt
코드 설명코드 설명이 CNameCard 클래스: 이름, 전화번호, 나이를 저장하는 프로퍼티를 가진 클래스입니다.Main 메서드:var fileName = "a.json";: 파일 이름을 "a.json"으로 설정합니다.using (Stream ws = new FileSt

코드 설명코드 설명이 CMainApp 클래스는 System.Windows.Forms.Form 클래스를 상속받아 윈도우 폼을 나타냅니다.Main 메서드는 프로그램의 진입점입니다.System.Windows.Forms.Application.Run(new MainApp());
코드 설명코드 설명이 CMainApp 클래스는 System.Windows.Forms.Form 클래스를 상속받아 윈도우 폼을 나타냅니다.Main 메서드는 프로그램의 진입점입니다.MainApp form = new MainApp();는 MainApp의 새 인스턴스를 생성합니
코드 설명코드 설명이 CMessageFilter 클래스는 IMessageFilter 인터페이스를 구현하여 윈도우 메시지를 필터링합니다. PreFilterMessage() 메서드는 윈도우 메시지를 처리하기 전에 호출됩니다. 이 메서드는 Message 구조체를 매개변수로
코드 설명이 CForm 클래스를 상속받아 MainApp이라는 폼을 만들고, 마우스 클릭 이벤트가 발생했을 때 MyMouseHandler 메서드를 통해 이벤트 정보를 출력합니다.MainApp 클래스MainApp 클래스는 Form 클래스를 상속받아 윈도우 폼을 나타냅니다.
코드 설명코드 설명이 CMainApp 클래스는 Form 클래스를 상속받아 윈도우 폼을 나타냅니다.Main 메서드는 MainApp 폼의 인스턴스를 생성하고, 초기 크기를 설정합니다. 그리고 MouseDown 이벤트에 form_MouseDown 메서드를 연결하고, 폼을 실
코드 설명네, 맞아요! 윈도우 폼은 윈도우 애플리케이션의 UI를 구축하기 위한 기술이고, 실제로 사용자가 보는 것은 윈도우 창입니다. 따라서 "윈도우 폼의 최소화/최대화 버튼"이라는 표현보다는 "윈도우 창의 최소화/최대화 버튼"이라는 표현이 더 정확합니다. 혼란스럽지

코드 설명코드 설명이 CButton button = new Button();: Button 컨트롤의 새 인스턴스를 생성합니다.button.Text = "Click Me!";, button.Left = 100;, button.Top = 50;: 버튼의 텍스트, 왼쪽 위치


(2)컨트롤 배치를 마쳤으면, 각 컨트롤에 이벤트 처리기를 등록합니다.폼 디자이너에서 MainForm을 선택하고, 속성창에서 번개 모양의 이벤트 아이콘을 클릭합니다Form컨트롤의 이벤트 목록이 나타나면 'Load'를 찾아 더블 클릭합니다.(3) 여기까지 작업이 완료되면

각 컨트롤에 대해 이벤트 처리기 껍데기를 만들어 줍니다.각 이벤트 처리기 껍데기에 조금 전에 선언한 ChangeFont() 메서드를 호출합니다.


(1) 컨트롤 배치하고 프로퍼티를 변경(2) 각 컨트롤에 대해 이벤트 처리기 껍데기 만들기(3) 코드를 입력해서 이벤트 처리기 완성(4) 디버깅 모드로 실행

(1) 컨트롤을 배치하고 프로퍼티를 변경함(2) 각 컨트롤에 대해 이벤트 처리기 껍데기를 만들어줌(3) 이벤트 처리기 안에 코드를 입력해서 완성함(4) 디버깅 모드로 실행

(1) 컨트롤 배치하고 프로퍼티 작성(2) 디버깅 모드로 실행
컴퓨터끼리 네트워크를 통해 데이터를 주고받기 위해서는 그 네트워크에서 통용되는 '프로토콜(Protocol)'을 따라야 합니다.프로토콜(Protocol):컴퓨터들이 네트워크를 통해 데이터를 주고받기 위한 '통신 규약'을 말합니다.인터넷은 전 세계에서 가장 거대한 네트워크
TcpListener/ TcpClient 클래스: TCP/IP 서버/클라이언트 독작 과정을 추상화한 .NET의 클래스입니다.: .NET이 TCP/IP 통신을 위해 제공하는 클래스로, 이들이 소속된 System.Net.Sockets 네임스페이스에는 다양한 옵션과 메서드를
코드 설명코드 설명이 CProcess.GetCurrentProcess().ProcessName: 현재 실행 중인 프로세스의 이름을 가져옵니다.string bindIp = args\[0];, int bindPort = Convert.ToInt32(args\[1]);, s
코드 설명이 CCONSTANTS 클래스REQ_FILE_SEND, REP_FILE_SEND, FILE_SEND_DATA, FILE_SEND_RES: 메시지 타입을 나타내는 상수입니다.NOT_FRAGMENTED, FRAGMENTED: 메시지 단편화 여부를 나타내는 상수입니
코드 설명코드 설명Header 클래스는 네트워크 메시지의 헤더 정보를 나타냅니다. ISerializable 인터페이스를 구현하여 Header 객체를 바이트 배열로 변환하고, 바이트 배열에서 Header 객체를 생성할 수 있도록 합니다.MSGID: 메시지 ID를 저장하는
코드 설명코드 설명이 CBodyRequest: 파일 전송 요청 메시지 본문 클래스입니다. 파일 크기(FILESIZE)와 파일 이름(FILENAME)을 저장합니다.BodyResponse: 파일 전송 요청에 대한 응답 메시지 본문 클래스입니다. 메시지 ID(MSGID)와
코드 설명코드 설명MessageUtil 클래스는 네트워크를 통해 Message 객체를 주고받는 데 사용되는 유틸리티 클래스입니다. Send(Stream writer, Message msg) 메서드는 Message 객체를 바이트 배열로 변환하여 스트림에 씁니다.Recei
코드 설명이 C주요 기능파일 전송 요청 수신: TcpListener를 사용하여 클라이언트의 연결 요청을 수신합니다.사용자 승인: 클라이언트의 파일 전송 요청을 수락할지 여부를 사용자에게 묻습니다.파일 수신: 클라이언트가 전송하는 파일 데이터를 수신합니다.파일 저장: 수
코드 설명이 CCHUNK_SIZE: 파일 전송 시 데이터를 나누는 단위인 청크 크기를 4096 바이트로 설정합니다.Main 메서드:명령줄 인수에서 서버 IP 주소와 파일 경로를 가져옵니다.클라이언트와 서버의 IP 주소와 포트 번호를 사용하여 IPEndPoint 객체를

OS는 여러 프로세스Process를 동시에 실행할 수 있습니다.(예를 들어, 유튜브로 음악을 들으면서 Visual Studio로 코드를 작성할 수 있음)프로세스Process도 여러 작업을 동시에 할 수 있습니다.(예를 들어, 워드프로세서. 글을 쓰고 있을 때 문법 검사
C1\. Thread 클래스Thread 클래스는 스레드를 생성하고 관리(제어)하는 데 사용됩니다. Thread 클래스를 사용하여 스레드를 생성하려면, ThreadStart 델리게이트 또는 ParameterizedThreadStart 델리게이트를 사용하여 스레드가 실행할
스레드의 상태 변화는 마치 사람의 인생처럼 다양한 단계를 거칩니다. .NET은 스레드의 상태를 ThreadState 열거형에 정의해 두었습니다.탄생(Unstarted): 스레드가 처음 생성된 상태(Thread 객체를 생성한 직후의 상태)입니다. 아직 아무런 일도 하
Thread.Interrupt() 메서드는 실행 중인 스레드를 중단시키는 데 사용되는 메서드이다. 스레드가 대기 상태(sleep, join, wait)에 있을 때 Interrupt() 메서드를 호출하면, ThreadInterruptedException 예외가 발생하고
스레드 간 동기화는 여러 스레드가 동시에 실행될 때 발생할 수 있는 문제들을 해결하기 위한 필수적인 기술이다. 마치 여러 사람이 동시에 같은 문서를 편집할 때, 누군가가 수정한 내용을 다른 사람이 덮어쓰는 것을 방지하기 위해 문서를 잠그는 것과 같은 개념이다.애플리케이
lock 키워드는 Clock 문은 특정 코드 블록을 한 번에 하나의 스레드만 실행할 수 있도록 잠그는 역할을 한다. 즉, 여러 스레드가 동시에 lock 문으로 보호되는 코드 블록에 접근하려고 할 때, 먼저 도착한 스레드가 잠금을 획득하고 코드 블록을 실행한다. 다른 스
Monitor 클래스는 lock 키워드와 유사한 기능을 제공하지만, 좀 더 세밀하게 스레드 동기화를 제어할 수 있도록 하는 도구이다. Monitor 클래스는 lock 키워드와 달리, 잠금을 획득하고 해제하는 Enter() 메서드와 Exit() 메서드를 명시적으로 호출해
Monitor.Wait()와 Monitor.Pulse()는 스레드 동기화를 위한 저수준 메서드로, 스레드 간의 협력적인 작업을 가능하게 한다. 마치 두 명의 요리사가 함께 요리하는 과정에서, 한 요리사가 재료를 준비하면 다른 요리사에게 알려주고, 다음 요리사는 재료를
Task 클래스System.Threading.Tasks 네임스페이스의 Task 클래스는 C동기 코드는, 검사가 검으로 공격할 때처럼 동작한다. 검사가 검으로 상대를 찌른 뒤에 다시 뽑아야 칼을 쓸 수 있는 것처럼, 동기코드는 메서드를 호출한 뒤에 이 메서드의 실행이 완
Task<TResult> 클래스는 C마치 음식 주문과 같다. 음식을 주문하면 주문서는 접수되지만 음식이 바로 나오는 것은 아니다. 요리사가 음식을 준비하는 동안 다른 일을 할 수 있다. 음식이 준비되면 주문서에 적힌 테이블로 음식이 전달된다.Task<TRes

System.Threading.Tasks.Parallel 클래스System.Threading.Tasks.Parallel 클래스는 C마치 여러 명의 일꾼이 함께 일하는 것처럼, Parallel 클래스는 작업을 여러 개의 작은 작업으로 나누어 여러 스레드에서 동시에 실행할
개요Casync 한정자메서드를 비동기 메서드로 선언할 때 사용한다.async로 선언된 메서드는 일반적으로Task 또는 Task<T> 객체를 반환한다.Task는 비동기 작업을 나타내는 객체이고, Task<T> 는 결과 값을 반환하는 비동기 작업을 나타낸다.as

비동기 파일 입출력비동기 파일 입출력은 파일을 읽고 쓰는 작업을 비동기적으로 수행하는 것을 의미한다. 즉, 파일 작업이 완료될 때까지 기다리지 않고 다른 작업을 계속 수행할 수 있다. 이는 UI 응답성을 유지하거나 CPU를 효율적으로 사용하는 데 유용하다.CReadAs
* C# 프로그램과 시리얼 통신 * C# 프로그램이 실행되는 컴퓨터와 아두이노 사이에 데이터를 주고 받는 가장 기본적인 방법은 시리얼 통신입니다. 시리얼 통신은 컴퓨터와 아두이노에 연결된 USB 케이블을 통해 데이터를 주고 받습니다. 0과 1로 구성된 데이터가 순차적으로 전달된다는 의미에서 시리얼 통신 또는 직렬 통신이라고 부릅니다. 시리얼 통신을 하려면...
C