목록프로그래밍/C# (13)
뭐라도 쓰겠지
C#에서 "동기(Synchronous)"와 "비동기(Asynchronous)"는 프로그램이 작업을 처리하고 결과를 반환받는 방식을 구분하는 개념이다. 간단히 말하자면, 동기(Synchronous, Sync): 호출한 메소드(또는 함수)가 모든 작업을 마칠 때까지 호출한 측에서 기다려야 한다.비동기(Asynchronous, Async): 호출한 메소드가 시작되면, 그 결과를 기다리는 동안 호출한 측은 다른 일을 계속 할 수 있으며, 작업이 끝난 시점에 결과를 받아 처리한다.로 볼 수 있다.1. 동기(Synchronous, Sync)특징:메소드를 호출하면, 그 메소드가 완료될 때까지 해당 스레드는 대기한다.직관적인 흐름을 가지므로 코드를 이해하기가 상대적으로 쉽다.긴 시간이 걸리는 작업(네트워크 I/O, ..
C#에서 out과 ref 키워드는 모두 "참조로 전달"한다는 점에서 비슷하지만, 사용할 때의 전제 조건과 의도가 다르다. ref 키워드특징:호출하는 쪽에서(메소드를 호출하는 측) ref로 전달할 변수를 미리 초기화해두어야 한다.메소드 안에서 그 값을 읽고 수정할 수 있다.메소드를 호출할 때도, 받는 쪽(파라미터)도 모두 ref라는 키워드를 명시해 주어야 한다.사용 예시:void Example(ref int value){ // value를 참조로 받음 value += 10;}void Start(){ int number = 5; Example(ref number); // 여기서 number는 5 + 10 = 15로 변경됨}주 용도:이미 할당된 변수를 함수 내에서 수정(변경)하고,..
C#에서 상속(Inheritance)은 기존에 만들어진 클래스(부모 클래스, 기반 클래스)의 속성(필드, 프로퍼티)과 기능(메소드)을 자식 클래스(파생 클래스)가 물려받아 사용할 수 있게 하는 객체 지향 프로그래밍의 중요한 개념이다. 상속을 사용하면 코드를 재사용하고, 유지보수를 쉽게 하며, 확장성을 높일 수 있다. C++에선 기반 클래스를 Parent, 파생 클래스를 Child라고 칭하고 C#에선 각각 Base, Derived라고 칭한다. 이번 글에선 부모 클래스, 자식 클래스로 쓰겠다.class Parent{ protected int baseInt = 0; // 생성자 public Parent() { Console.WriteLine("Parent Constru..
StringInsert 클래스class StringInsert{ public static string StrInsert(string _str, int _idx, string _insert) { char[] tmpCharArr = _str.ToCharArray(); char[] tmpInsert = _insert.ToCharArray(); char[] resultCharArr = new char[_str.Length + _insert.Length]; for (int i = 0; i 실제 실행 Programclass Program{ static void main() { string strTest2 = new string("..
StringUpDown 클래스class StringUpDown{ public static string StringUpper(string _str) { char[] tmpChar = _str.ToCharArray(); for (int i = 0; i = 97 && (int)tmpChar[i] = 65 && (int)tmpChar[i] 실제 실행 Programclass Program{ static void Main() { string strTest1 = "Hello World"; string strTestUpper = StringUpDown.StringUpper(strTest1); string strTestLower = Str..
C#에서 메모리 풀은 자주 재사용되는 객체나 버퍼 등에 대해 동적 할당과 해제를 반복하기 보다는, 미리 일정한 개수나 일정한 크기의 버퍼를 준비해두고 필요할 때 가져와 쓰고 사용이 끝나면 다시 반환하는 구조를 의미한다. 이렇게 하면 힙(Heap) 메모리에 대한 잦은 할당/해제를 줄여 가비지 컬렉션의 부담을 낮추고, 성능을 향상시킬 수 있다. 대표적인 예로 .NET의 System.Buffers.ArrayPool와 System.Buffers.MemoryPool가 있으며, 필요에 따라 커스텀 풀을 구현해 사용하는 경우도 있다. 1. ArrayPool1-1. 특징ArrayPool는 T 타입의 배열을 풀링(Pooling)하기 위한 클래스이다..NET 프레임워크 4.5 이후 버전부터 사용할 수 있으며, 범용적으로 ..