C#190 [C#]잠금 및 Lock 키워드 멀티스레딩에서 공유 리소스 접근 멀티스레드로 구현된 애플리케이션에서 여러 개의 스레드 객체가 공유 리소스를 접근하는 것은 중요한 작업입니다. 예를 들어 세 개의 스레드 객체가 존재하고 abcd.txt 파일을 접근한다고 가정합니다. Thread1은 abcd.txt 파일에 데이터를 작성합니다.(Write) Thread2는 abcd.txt 파일의 데이터를 읽습니다.(Read) Thread3는 abcd.txt 파일을 제거합니다.(Delete) 세 개의 스레드 객체가 동일한 시간에 abcd.txt 파일을 접근하여 각자의 작업을 수행하면, Thread1이 abcd.txt 파일에 데이터를 작성하는 도중 Thread3가 abcd.txt 파일을 제거했으므로 애플리케이션이 제대로 동작하지 않을 수 있습니다. 이러한 문제가.. C# 2022. 6. 5. [C#]스레드 동기화(Thread Synchronization) 스레드 동기화(Thread Synchronization) 데이터 불일치는 두 개 이상의 스레드가 메모리 내부의 데이터를 동시에 접근할 때 발생합니다. 예를 들어 두 개의 스레드가 abcd.txt라는 텍스트 파일을 접근한다고 가정합니다. 스레드1은 abcd.txt 파일에 데이터를 작성(Write)하고 있으며, 스레드2는 abcd.txt 파일의 데이터를 읽는(Read) 중입니다. 작성되고 있는 데이터가 읽는 중에 반영되지 않으므로 데이터 불일치가 발생합니다. 스레드 동기화는 위 예시에서 언급한 abcd.txt 파일이라던지 메모리 내부의 데이터를 특정 스레드가 사용하고 있으면 다른 스레드는 접근할 수 없도록 하는 메커니즘입니다. 스레드1이 abcd.txt 파일에 데이터를 작성하고 있으면, 스레드2는 스레드1의.. C# 2022. 6. 5. [C#]지역 함수(Local Function) 지역 함수(Local Function) C#의 지역 함수는 함수의 본문 내부에 존재하는 함수입니다. 함수를 사용할 수 있는 범위가 상위 함수 본문으로 제한되므로 지역 함수라고 하며, C# 7.0에 도입된 기능입니다. 특정 함수 본문 내부에 정의된 함수를 지역 함수, 하위 함수라고 말하며, 특정 함수는 상위 함수라고 말합니다. 지역 함수 특징 지역 함수는 종료자(finalizers), 람다 표현식(lambda expressions), 생성자(constructors) 등에서 호출할 수 있습니다. 지역 함수는 기본적으로 private이므로 접근 한정자 및 static 키워드를 사용할 수 없습니다. main() 함수 또는 상위 함수에서 지역 함수 정의 후 여러 번 호출할 수 있습니다. 지역 함수는 오버로드(Ov.. C# 2022. 5. 29. [C#]멀티스레드(MultiThread) 멀티태스킹(Multitasking) C#에서 멀티스레드를 구현하는 방법을 설명하기 전에 멀티태스킹과 멀티스레딩 개념을 간단하게 알아봅시다. Windows와 Mac OS는 널리 사용되고 있는 멀티태스킹 운영체제입니다. 멀티태스킹 운영체제는 여러 애플리케이션을 동시에 실행할 수 있다는 의미입니다. 예를 들어 우리는 게임을 플레이하면서 유튜브 동영상을 볼 수 있고 코딩을 하면서 노래를 들을 수 있습니다. 이렇게 여러 작업이 가능한 이유는 사용하고 있는 컴퓨터의 운영체제가 멀티태스킹 운영체제이기 때문입니다. 멀티스레딩(Multithreading) 실행되고 있는 프로그램을 프로세스라고 말하며 프로세스를 여러 단위로 나눈 것을 스레드라고 말합니다. 멀티스레딩은 여러 스레드가 동시에 작업하는 것을 말하며, 동시 프로.. C# 2022. 5. 28. [C#]Thread 생성자(Thread Constructor) 스레드(Thread)란? 스레드는 프로세스의 단위입니다. 실행되고 있는 프로그램을 프로세스라고 하며, 한 개의 프로세스로 프로그램을 실행하기 어렵기 때문에 프로세스를 여러 단위(=스레드)로 나누어 프로그램을 효율적으로 실행하도록 합니다. 프로세스에는 기본적으로 스레드가 하나 이상 있으며, 이 스레드를 기본 스레드, 단일 스레드, 싱글 스레드라고 말합니다. 프로세스에 여러 개의 스레드가 존재하면 멀티 스레드라고 말합니다. Thread 클래스의 역할 스레드 생명 주기가 시작되면, Thread 클래스의 객체가 생성됩니다. 스레드 생명 주기가 끝나거나 작업을 완료되었으면 Thread의 실행이 중단되거나 종료됩니다. 다음은 스레드 생명 주기의 상태입니다. 생성(Create) 상태 Thread 객체를 생성했지만, .. C# 2022. 5. 28. [C#]캡슐화(Encapsulation) 캡슐화(Encapsulation) 필드와 메서드를 하나로 묶는 과정을 캡슐화라고 합니다. 필드를 private로 선언하여 클래스 외부에서 접근할 수 없도록 하고 public으로 선언된 메서드(getter 및 setter 메서드)를 사용하여 클래스 내부의 필드를 접근하는 것을 캡슐화라고 할 수 있습니다. 필드를 private으로 선언하는 이유는 클래스 외부에서 직접 접근할 수 없도록 하기 위해서입니다. getter() 및 setter() 메서드를 public으로 선언하는 이유는 유효성 검사를 통해 클래스 외부에서 private으로 선언된 필드를 접근하기 위해서입니다. 캡슐화 예제 다음은 캡슐화 개념을 이해하기 위해 예제를 통해 설명합니다. Person 클래스에는 age라는 필드를 private로 선언하여 .. C# 2022. 5. 25. [C#]확장 메서드(Extension Method) 확장 메서드(Extension Method) 확장 메서드는 C# 3.0에 추가된 새로운 기능으로 클래스 또는 인터페이스를 상속하거나 재구성하지 않고 클래스에 메서드를 추가할 수 있습니다. 확장 메서드는 클래스의 소스 코드를 수정할 수 없거나 변경할 권한이 없는 경우 클래스의 기능을 확장하는 방법으로 사용할 수 있습니다. 다음은 확장 메서드를 이해하기 위한 예제입니다. OriginClass라는 클래스에는 Print1(), Print2(), Print3() 메서드가 존재합니다. public class OriginClass { public void Print1() { Console.WriteLine("Print1() Method Call"); } public void Print2() { Console.Writ.. C# 2022. 5. 24. [C#]중첩 클래스(Nested Class) 중첩 클래스(Nested Class) 클래스 내부에서 클래스를 정의할 수 있습니다. 이러한 클래스 구현 방식을 중첩 클래스라고 합니다. 중첩 클래스를 사용하여 클래스를 그룹화할 수 있으며, 클래스의 사용 범위를 제한할 수 있습니다. class OutsideClass { // ... class InsideClass { // ... } } OutsideClass 내부에 InsideClass 클래스를 정의했으므로 OutsideClass는 중첩 클래스입니다. 중첩 클래스를 사용하는 이유 클래스를 논리적으로 그룹화할 수 있습니다. 특정 클래스 내부에서만 사용되기 때문에 코드를 더 쉽게 파악할 수 있으며, 유지 관리가 쉽습니다. 특정 클래스 내부에서만 사용되므로 클래스 구조가 단순해집니다. 중첩 클래스 예제 다음은.. C# 2022. 5. 19. [C#]Partial 클래스(Partial Class) Partial Class Partial Class는 C# 2.0에 도입된 기능으로 클래스를 여러 파일에 정의할 수 있습니다. 클래스의 내용을 다른 파일로 분할할 수 있지만 논리적으로는 하나입니다. 응용 프로그램이 컴파일될 때 분할된 파일이 결합되기 때문입니다. 클래스를 여러 파일로 분할하려면 partital 키워드를 사용하여 Partial Class로 정의합니다. Partial Class 예제 다음 예제는 Partial Class를 구현하는 방법을 설명합니다. Person.cs라는 클래스 파일을 프로젝트에 추가하고 아래 소스코드를 Person.cs 클래스 파일에 붙여 넣습니다. partial class Person { // 필드 private string _name; private int _age; //.. C# 2022. 5. 18. [C#]메서드 숨기기(Method Hiding) 메서드 숨기기(Method Hiding) 부모 클래스 멤버를 숨기기 위해 new 키워드를 사용하는 것을 메서드 숨기기(Method Hiding)라고 합니다. 메서드 숨기기는 자식 클래스가 부모 클래스의 메서드를 다시 구현하기 위해 사용되며, 메서드 재정의(Method Overriding)와 유사합니다. 메서드 재정의는 부모 클래스의 메서드를 가상 메서드(Virtual Method)로 선언하여 자식 클래스에서 재정의할 수 있도록 합니다. 메서드 숨기기는 부모 클래스의 메서드가 가상 메서드(Virtual Method)로 선언되지 않더라도 부모 클래스의 메서드를 다시 구현할 수 있습니다. 메서드 숨기기 예제 다음 예제는 자식 클래스에서 new 키워드를 사용하여 메서드를 다시 구현합니다. class Parent.. C# 2022. 5. 16. [C#]가상 메서드(Virtual Method), Virtual 키워드 가상 메서드(Virtual Method) Virtual 키워드를 소개하기 전에 객체 지향 프로그래밍(OOP)의 특징인 상속과 재정의에 대해 이해하고 있는지 알아봅시다. 메서드 재정의는 상속과 밀접하게 관련 있는 객체 지향 프로그래밍의 특징입니다. 자식 클래스에서 부모 메서드의 매개 변수 및 반환 타입을 재정의하는 것을 메서드 재정의라고 합니다. C#에서 메서드 재정의를 허용 하기 위해 부모 클래스의 메서드를 virtual 키워드로 선언합니다. virtual 키워드로 선언된 메서드는 가상 메서드라고 부르기도 하며, 가상 메서드가 자식 클래스에서 재정의될 수 있음을 알립니다. 즉, virtual 키워드는 메서드 재정의를 허용하기 위해 사용됩니다. virtual 키워드 사용 방법 재정의가 허용되는 메서드에 v.. C# 2022. 5. 16. [C#]봉인 클래스(Sealed Class) 및 봉인 메서드(Sealed Class) 봉인 클래스(Sealed Class) 클래스가 다른 클래스에 상속되는 것을 원하지 않을 때 해당 클래스를 봉인 클래스(Sealed Class)로 선언할 수 있습니다. 봉인 클래스는 sealed 키워드로 선언합니다. // 봉인 클래스입니다. sealed class Parent { } // 봉인 클래스는 상속될 수 없습니다. class Child : Parent { } class Program { static void Main(string[] args) { } } 실행 결과 위 예제에서 sealed 키워드를 사용하여 밀봉 클래스 Parent를 만들었습니다. 밀봉 클래스는 다른 클래스에 상속될 수 없으므로 컴파일 에러가 발생합니다. 봉인 클래스 특징 봉인 클래스와 추상 클래스는 다릅니다. 봉인 클래스는 추상 .. C# 2022. 5. 15. 이전 1 ··· 6 7 8 9 10 11 12 ··· 16 다음