C# (8) 썸네일형 리스트형 240715 C#의 ConcurrentQueue<T> : 스레드 안전한 큐 C#의 ConcurrentQueue는 여러 스레드가 동시에 큐에 접근할 때도 안전하게 작동할 수 있도록 설계된 스레드 안전한 큐입니다.ConcurrentQueue는 Lock을 사용하지 않는 Lock-Free 알고리즘을 사용하여 높은 성능을 유지하면서도 스레드 안정성을 보장합니다. ConcurrentQueue가 스레드 안정성을 보장하는 방법1. Lock-Free 알고리즘:- ConcurrentQueue는 Lock을 사용하지 않고, 대신 CAS(Compare-And-Swap)와 같은 원자적 연산을 사용하여 데이터 일관성을 유지합니다.- CAS 연산은 메모리의 특정 위치 값을 비교하고, 예상한 값과 일치할 경우 새로운 값으로 교체하는 원자적 연산입니다. 이는 하드웨어 수준에서 지원되어 매우 빠르고 효율적입니다.. 240710 C# 배열의 얕은 복사 Array.Copy 용도배열의 일부분 또는 전체를 복사할 수 있다. 기본 사용법Array.Copy(sourceArray, destinationArray, length); 매개변수 설명- sourceArray : 복사할 원본 배열- destinationArray : 요소가 복사될 대상 배열- length : 복사할 요소의 수 예제| 프로그래머스 : 마지막 두 원소using System;public class Solution { public int[] solution(int[] num_list) { int len = num_list.Length; int new_num = num_list[len-1] > num_list[len-2] ? num_list[len-1] - num_list[.. 240708 C# 프로퍼티 (6) : 레코드와 자동 구현 프로퍼티 C# 9.0 도입 (레코드는 무슨 말인지 잘 모르겠다. 일단 정리는 하지만 추후에 더 살펴봐야 할 것 같다.) 불변 객체(immutable object)는 한 번 생성되면 그 상태를 변경할 수 없는 객체를 말한다.불변 객체의 중요한 특성 중 하나는, 상태를 변경하기 위해서는 객체를 수정하는 대신 새로운 객체를 생성해야 한다는 것이다. 불변 객체의 개념1. 불변성- 불변 객체는 한 번 생성된 이후로는 내부 상태를 변경할 수 없다.- 상태를 변경하려면 기존 객체를 수정하는 대신 새로운 객체를 생성해야 한다. 2. 데이터 복사- 불변 객체의 상태를 변경하려면 새로운 상태를 가진 새로운 객체를 만들어야 한다- 즉, 기존의 객체를 복사하고, 복사한 객체의 이룹 상태를 변경하여 새로운 객체를 생성해야 한다. 3. .. 240708 C# 프로퍼티 (5) : 초기화 강제 키워드 required 반드시 초기화해야 하는 데이터가 있다.하지만 개발자도 사람이기 때문에 실수할 수 있다.프로퍼티 초기화를 안 할 경우 컴파일 에러를 발생시켜 이러한 문제를 사전에 예방하는 방법이 있다.required 키워드를 쓰면 된다.class BirthdayInfo{ public required string Name { get; set; } public required DateTime Birthday { get; set; }}REFERENCE 이것이 C#이다 (박상현) 240708 C# 프로퍼티 (4) : 초기화 전용 자동 구현 프로퍼티 읽기 전용 프로퍼티 코드는 아래와 같았다.using System.Transactions;class MyClass{ public Transaction(string _from, string _to, string _amaount) { from = _from; to = _to; amount = _amaount; } string from; string to; int amount; public string From{ get { return from; } } public string To { get return to; } } public int Amount { get { return amount; } }} 좀 더 간단하게 만들 수 있을 것만 같다.그래서 C# 9.0부터는 init 접근자를 통해 읽기 전용 프로퍼.. 240708 C# 프로퍼티 (3) : 프로퍼티와 초기화 요약 정리- 객체 이니셜라이저- init 키워드- required 키워드객체 이니셜라이저- 객체를 생성하면서 동시에 객체의 프로퍼티 값을 초기화할 수 있는 구문이다.- 중괄호를 사용하여 프로퍼티를 초기화한다.- 객체 이니셜라이저 안의 초기화 구문 사이의 구분자 : 콤마(,) ( 세미콜론(;) 이 아니다! )- 목록에 모든 프로퍼티가 올 필요는 없다. 초기화하고 싶은 프로퍼티만 넣어서 초기화하면 된다. 주의사항- 프로퍼티와 public 필드만 초기화할 수 있다.- private 필드나 메서드는 초기화할 수 없다.- 기본 생성자를 호출한 후 객체 이니셜라이저 구문이 실행된다. 따라서 생성자의 논리와 충돌할 수 있는 초기화는 피해야 한다. 클래스_이름 인스턴스 = new 클래스_이름(){ 프로퍼티1 .. 240708 C# 프로퍼티 (2) : 자동 구현 프로퍼티 자동 구현 프로퍼티Auto-Implemented PropertyC# 3.0에 도입, C# 7.0에 초기화 기능 추가코드 중복을 피하기 위해 등장프로퍼티가 깔끔하긴 하지만 어딘가 코드 중복이 있는 것 같다.public class NameCard{ private string name; private string phoneNumber; public string Name { get { return name; } set { name = value; } }} 메서드의 이름이 필드 명과 동일하다면 get 접근자가 값을 반환할 필드의 이름이 무엇인지 추측 가능하다.set 접근자 역시 마찬가지다.value가 암묵적인 매개변수라면 value의 값을 대입받는 필드명이 무엇인지 암묵적으로 다 정해져 있다.말 안해도 아는 .. 240708 C# 프로퍼티 (1) : 정의, 구성 요소(접근자, 백업 필드) C#의 프로퍼티클래스의 필드에 대한 접근을 제한하는 멤버프로퍼티란?클래스의 필드에 대한 접근을 제한하는 멤버.필드와 메서드의 중간 형태. 프로퍼티의 구성 요소| 접근자, 백업 필드 접근자:프로퍼티의 값을 읽고 쓰는 데 사용된다.메서드처럼 동작하지만 메서드가 아니다. 프로퍼티의 구성요소이다.내부적으로는 메서드로 컴파일되며, 프로퍼티 값을 읽거나 수정할 때 호출된다. 백업 필드:프로퍼티의 값을 저장하는 실제 필드.명시적으로 정의되거나 자동으로 관리된다. class 클래스_이름{ 데이터_형식 필드_이름; // 필드이자 백업 필드 접근_한정자 데이터_형식 프로퍼티_이름 // 접근자 { get { return 필드_이름; } set { 필드_이름 = value; } }} 접근자 종류| get.. 이전 1 다음