STUDY/C#(18)
-
공용 언어 런타임(CLR)의 실행 모델
해당 내용은 서적 CLR via C# 을 기반으로 작성하였습니다. 들어가기 앞서,우리는 여러가지 어플리케이션을 개발할때 개발 목적에 따라 언어를 선택하게 된다. C++과 같은 언어는 Win32 API를 자유로이 쓸 수 있고 메모리로 직접 접근이 가능하여 우리가 원하는 아주 섬세한 부분까지 제어할 수 있기 때문에, 시스템 서비스와 같은 하위 수준의 어플리케이션을 개발할때 적합하고, Visual Basic과 같은 언어는 쉬운 문법, 빠른 UI 디자인 작업 등이 용이하여 고객의 요구 사항이 빈번하게 바뀌는 업무 프로젝트를 진행하기에 아주 적당하다고 할 수 있다. 즉, 기존의 언어 사이에는 우열이 존재하며, 개발 목적에 따라 언어의 선택이 이루어질 수 있고, 이러한 결정은 매우 신중하게 이루어져야 한다. 그러나..
2025.02.02 -
[C#] async, await
이글은 서적 '이것이 C#이다'를 기반하여 각종 블로그에서 추가적인 정보를 토대로 작성된 글입니다. 같이 보면 좋은글비동기 개념 [async와 await의 개념] C#의 async와 await 키워드는 비동기 프로그래밍을 쉽게 구현할 수 있도록 도와주는 핵심적인 도구이다. 이를 통해 코드가 실행되는 동안 작업을블록하지 않으면서도 동기식 코드처럼 간결하고 이해하기 쉬운 형태로 작성할 수 있다.async메서드가 비동기적으로 실행된다는 것을 나타낸다.async를 붙인 메서드는 반드시 반환값으로 Task, Task, 또는 void를 사용해야 한다.void를 사용하게 되면 비동기 메서드를 호출하는 쪽에서 비동기 제어할 수 없다. 종종 이벤트 핸들러로 사용할 때 void를 사용하곤 하는데 UI버튼을 클릭하면 일어..
2024.12.04 -
[C#] 동기 비동기 개념 이해하기
해당 글은 async await 키워드를 공부하기 앞서 개념을 잡고 가기 위해 작성한 글이다.동기, 비동기에 대해 알아보고 나아가 동기식 싱글 쓰레딩, 동기식 멀티 쓰레딩, 비동기식 싱글 쓰레딩, 비동기식 멀티 쓰레딩에 대해 공부해보려 한다.[동기식 비동기식]식당을 비유하여 설명하겠다.난 1인 식당을 운영하고 있다. 한 손님이 베이컨과 토스트를 주문했다. 이후 상황을 동기식과 비동기식으로 나눠보겠다.동기식 베이컨을 다 굽는다.그 다음 토스트를 다 굽는다.접시에 담는다.손님에게 서빙한다.비동기식팬에 베이컨을 올리고 타이머를 누른다.팬에 토스트를 올리고 타이머를 누른다.틈틈히 청소한다.베이컨 테이머가 울려 베이컨을 접시에 담는다.토스트 타이머가 울려 토스트를 접시에 담는다.손님에게 서빙한다.동기식은 하나 작..
2024.11.28 -
[C#] Array vs List vs ArrayList
기본 개념Array연속적인 메모리상에 동일한 타입의 요소를 일렬로 저장하는 자료 구조로서, 배열 요소는 인덱스를 사용하여 직접적으로 접근할 수 있다. 배열은 고정된 크기를 가지며, 배열의 사이즈와 상관없이 한 요소에 접근하는 시간은 인덱스를 사용할 경우 O(1)이 된다. 하지만 인덱스를 알지 못하고 정렬되지 않은 배열에서 값으로 데이터를 찾기 위해서는 O(n)의 시간이 소요된다.List배열요소가 T 타입인 generic로서 동적 배열을 지원하는 클래스이다. list클래스는 내부적으로 배열을 가지고 있으며, 동일한 타입의 데이터를 저장한다. 만약 미리 할당된 배열 크기가 부족하면 내부적으로 배열을 2배로 늘려 동적으로 배열을 확장한다. arrayList와 다르게 박싱 / 언박싱의 문제를 발생하지 않는다.A..
2024.11.12 -
[C#] Class vs Struct
[Class vs Struct]기본 개념classstruct참조 타입으로 힙(heap) 메모리에 할당된다.객체의 참조를 다루므로, 객체를 여러 변수가 공유할 수 있다.C#에서 class는 객체 지향 프로그래밍의 기본 단위로 많이 사용된다.값 타입으로, 주로 스택 메모리에 할당된다. 값 자체를 복사하여 다루므로, struct 변수를 다른 변수에 할당할 때, 별도의 독립된 복사본이 생성된다.C#에서는 작은 데이터 묶음이나 단일 데이터 처리에 주로 사용된다.메모리 할당 방식classstruct힙 메모리에 할당되며, 변수가 객체의 메모리 위치를 참조한다.가비지 컬렉터가 사용되지 않는 객체를 자동으로 해제한다.크기가 큰 데이터를 다루기에 적합하다.주로 스택에 할당되며, 변수에 실제 데이터 값이 저장된다.스택에서 ..
2024.11.06 -
interface는 인스턴스는 못 만들지만 참조는 만들 수 있다?
c#에서 인터페이스는 인스턴스를 만들 수 없지만 참조를 만들 수 있다. 즉, 인터페이스 자체로는 객체를 생성할 수 없지만, 인터페이스를 구현한 클래스의 객체는 인터페이스 타입의 변수를 할당하여 사용할 수 있다는 뜻이다.이를 이해하기 위해 클래스와 인터페이스의 차이를 예제로 설명해보자.public class Dog{ public void Bark() { Console.WriteLine("Woof!"); }}Dog dog = new Dog(); // 클래스의 인스턴스를 생성dog.Bark(); // 출력: Woof!여기서 Dog 클래스는 Bark 메서드를 가지고 있으며, Dog 클래스를 사용해 dog 라는 객체를 만들고 Bark() 메서드를 호출할 수 있다. 즉 Dog 클래스..
2024.10.03