Study/TIL(Today I Learned)

24.07.16 C#

에린_1 2024. 7. 16. 18:38
728x90

C#

조건 연산자(Conditional Operator)

  • 조건 연산자는 ?: 은 큭이하게도 피연산자가 세 개이다.
  • 조건식 ? 참일 때의 값 : 거짓일 때의 값

null 조건부 연산자

  • ?. 은 객체의 멤버에 접근하기 전 해당 객체가 null인지 검사해서 그 결과가 참이면 그 결과로 null을 반환하고, 그렇지 않은 경우 . 뒤에 지정된 멤버를 반환한다.
  • ?[] 도 동일한 기능을 수행한다. 배열과 같은 컬렉션 객체의 첨자를 이용한 참조에 사용된다는 점이 다르다.

null 병합 연산자

  • ?? 연산자는 두 개의 피연산자를 받아들이고 왼쪽 피연산자가 null인지 평가한다. 평가 결과가 null이 아닌것으로 나타나면 왼쪽 피연산자를 그대로 반환하고, 만약 왼쪽 피연산자가 null인 것으로 평가되면 오른쪽 피연산자를 반환한다.

Switch문과 패턴 매칭

  • Switch 레이블의 패턴에는 상수와 형식을 비롯해서 관계, 논리 등등 C#이 지원하는 다양한 패턴을 적용할 수 있다.

케이스 가드(Case Guard)

  • 케이스 가드란 switch 문의 case 절의 패턴을 더 구체적으로 만들어주는 추가적인 조건검사라고 할 수 있다.
  • 케이스 가드는 case절 뒤에 when 절을 붙여 사용한다.
    • when절은 if문처럼 true/false로 결과가 나오는 식을 입력 받는다.

패턴 매칭(Pattern Matching)

  • 어떤 식(Expression)이 특정 패턴(Pattern(형태))과 일치하는지 검사한다.
  • 패턴 매칭을 이용하면 분기문을 간결하고 읽기 쉬운 코드로 대체할 수 있다.
  • 식(Expression)
    • 코드에서 단일 결과 값을 만들어 낼 수 있는 연산자와 연산자의 조합이다.
    • 리터널과 상수, 변수는 연산자 없이 식이 될 수 있다.

C#이 지원하는 패턴

선언 패턴(Declaration Pattern)

  • 주어진 식이 특정 형식(ex)int, string)과 일치하는지 평가한다.
  • 주어진 식과 형식이 일치한다면, 선언 패턴(Declaration Pattern)은 식을 해당 형식으로 변환한다.

형식 패턴(Type Pattern)

  • 선언 패턴과 거의 같은 방식으로 동작하지만, 변수 생성없이 형식 일치 여부만 테스트한다.

상수 패턴(Constant Pattern)

  • 식이 특정 상수와 일치하는지 검사한다.
  • 정수 리터널과 문자열 리터럴 뿐 아니라 null과 enum등 모든 상수와 매칭 할 수 있다.

프로퍼티 패턴(Property Pattern)

  • 식의 속성이나 필드가 패턴과 일치하는지 검사한다.
  • 입력된 식이 int, double 같은 기본 데이터 형식이 아닌 경우 특히 유용하다.

관계 패턴(Relational Pattern)

  • 관계 연산자를 이용해서 입력 받은 식을 상수와 비교한다.

논리 패턴(Logical Pattern)

  • 패턴과 패턴을 패턴 논리 연산자를 조합해서 하나의 논리 패턴으로 만들 수 있다.

괄호 패턴(Parenthesized Pattern)

  • 소괄호로 패턴을 감싸, 논리 패턴으로 여러 패턴을 조합하여 이를 새로운 패턴으로 만드는 경우 사용한다.

위치 패턴(Position Pattern)

  • 식의 결과를 분해(Peconstruct) 하고, 분해된 값들이 내장된 복수의 패턴과 일치하는지 검사한다.
  • 위치 패턴 안에 내장되는 패턴에는 형식 패턴, 상수 패턴등 어떤 패턴이든 올 수 있다.
    • 분해된 값들과 내장된 패턴의 개수, 순서가 일치해야 한다.

Var 패턴

  • null을 포함한 모든 식의 패턴 매칭을 성공시키고, 그 식의 결과를 변수에 할당한다.
  • 어떤 식의 결과를 임시 변수에 할당한 뒤 추가적인 연산을 수행하고자 할 때 유용하게 사용할 수 있다.

무시 패턴(Discard Pattern)

  • var 패턴과 같이 모든 식과의 패턴 일치 검사를 성공시킨다.
  • var 패턴과는 다르게 is식에서는 사용할 수 없고, switch식에서만 사용할 수 있다.
  • ‘모든 식’을 매칭할 수 있기 때문에 switch문의 default 케이스와 비슷한 용도로 사용하면 된다.
  • 무시 패턴은 _ 기호를 이용한다.

목록 패턴(List Pattern)

  • 배열이나 리스트가 패턴의 시퀀스가 일치하는지 검사한다.
  • 패턴의 시퀀스는 대괄호 [ 와 ] 사이에 패턴의 목록을 입력해서 만든다.

CS

Redis

  • 빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어이다.
  • 보통 데이터베이스는 하드디스크나 SSD에 저장한다. 하지만 Redis는 메모리(RAM)에 저장해서 디스크 스캐닝이 필요없어 매우 빠르다.
  • 캐싱도 실시간으로 가능하며 실시간 채팅에 적합하다. 세션 공유를 위해서 세션 클라스터링에도 활용 가능하다.

저장 공간이 RAM 이라면 휘발성 문제는?

  • 백업 과정이 존재한다.
    • Snapshot : 특정 지점을 설정하고 디스크에 백업한다.
    • AOF(Append Only File) : 명령(쿼리)들을 저장해두고, 서버가 셧다운 되면 재실행해서 다시 만들어 놓는 것이다.
  • 데이터 구조는 key/value 값으로 이루어져 있다. 따라서 Redis는 비정형 데이터를 저장하는 비관계형 데이터베이스 관리 시스템이다.

value 5가지

  • String(text, binary data) - 512MB까지 저장이 가능하다.
  • Set(String 집합)
  • Sorted Set(Set을 정렬해둔 상태)
  • Hash
  • List(양방향 연결리스트도 가능하다.)
728x90

'Study > TIL(Today I Learned)' 카테고리의 다른 글

24.07.18 C#  (0) 2024.07.18
24.07.17 C#  (0) 2024.07.17
24.07.15 C#  (0) 2024.07.15
24.07.12 서버 프로그래밍 복습  (0) 2024.07.12
24.07.11 C#, CS  (0) 2024.07.11