(오늘은 노트북으로 공부해서 화질이 좀 깨진다)
오늘은 마크다운을 사용해서 글을 써 보고자 한다.
마크다운이란 무엇인가?
Markdowm은 텍스트 기반의 마크업 언어로 2004년 존그루버에 의해 만들어졌으며 쉽게 쓰고 읽을 수 있다, 또 HTML로 변환이 가능하다.
특수기호와 문자를 이용한 매우 간단한 구조의 문법을 사용하여 웹에서도 보다 빠르게 컨텐츠를 작성하고 보다 직관적으로 인식할 수 있다.
마크다운 사용법
- 문서 제목의 경우 문서 제목 아래에 ==== 를 붙일 시 문저 제목이 된다
- 문서 부제목의 경우 문서 부제목 아래에 ----를 붙일 시 문서 부제목이 된다.
- 글머리의 경우 글머리의 앞에 #를 붙이면 글머리가 된다. #의 개수에 따라 다르게 작성할 수 있으며
최대 6개까지 붙일 수 있다. - BlockQoute: 이메일에서 사용하는 >블럭인용 문자를 사용한다. 이 안에서는 다른 마크다운 요소를 포함 할 수 있다.
이런게 BlockQoute이다.
- 목록에 순서 붙이기(번호): 간단하게 숫자와 점을 사용한다.
- 첫번째
- 두번째
- 순서 없는 목록: (*, +, - 지원)
- 아무거나(*)
- 이것저것 (+)
- 그냥저냥 (-)
- 이것저것 (+)
- 아무거나(*)
- 코드: 4개의 공백 또는 하나의 탭으로 들여쓰기를 만나면 변환되기 시작하여
들여쓰지 않은 행을 만날때까지 변환이 계속된다.
nomal word - code block
end code block - 코드 블럭을 사용하는 2가지 방식.
- pre code {code} /code /pre 이용방식
- pre, code, /code, /pre 모두 앞뒤에 <> 를 붙여줘야 함.
- 코드블럭코드("```") 을 이용하는 방법
- 깃헙에서는 코드블럭코드("```") 시작점에 사용하는 언어를 선언하여
문법강조(Syntax highlighting)이 가능하다.
- 깃헙에서는 코드블럭코드("```") 시작점에 사용하는 언어를 선언하여
- pre code {code} /code /pre 이용방식
- 수평선: * , *, - , - 이 4가지 기호를 여러번 반복해서 작성하면 수평선을 만들 수 있다.
- 강조 : 문장 중간에 사용할 경우에는 띄어쓰기를 하는것이 좋다.
single asterisks
single underscores
double asterisks
double underscores
cancelline
- 줄바꿈: 3칸 이상 띄어쓰기를 하면 줄이 바뀐다.
이상으로 마크다운 사용법이였다.
(여기는 다시 기본모드로 작성)
수업들으시는 분들 중 한분이 Linq에 대해서 블로그에 정리해주셨다.
LINQ 정리 블로그: https://jhoon8903.github.io/c%23/2023/11/10/LINQ.html
저번에 내 블로그에도 정리했던 부분들을 복습한다는 느낌으로 다시 읽어보았다.
언제 LINQ를 사용하는가?
- 임의의 리스트 안에서 조건에 맞는 일부 요소만을 추출하고 싶은 경우
이분은 foreach, 쿼리, LINQ를 이용한 예시를 들어주셨다.
그 중에서 foreach, LINQ만 살펴보겠다.
private void LINQ()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> evens = new List<int>();
// numbers 라는 List 데이터 중
// List 안에서 짝수만을 추출하가 위한 반복문
foreach (int number in numbers)
{
// 만약 numbers 리스트의 요소 중
// 2로 나누어 나머지가 0이면
if (number % 2 == 0)
{
// evens 라는 새로운 리스트에 할당하여
// 짝수 리스트를 만듭니다.
evens.Add(number);
}
}
// 짝수 리스트를 내림차순으로 정렬하기
evens.Sort((a,b) => b - a );
evens : {10, 8, 6, 4, 2}
}
위 코드를 보면 foreach를 사용해서 모든 경우의 number을 2로 나누어 나머지를 확인하고,
그 중에서 나머지가 0인 number들만 evens이란 list에 더해서 분류했다..
내림차순 정리까지 마치면 evens에 정렬된 짝수들을 볼 수 있었다.
그렇다면 이번엔 LINQ를 살펴보겠다.
private void LINQ()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> evens = numbers
// 범위변수 number 가 2로 나뉠때 나머지가 0인 것들을
.Where(number => number % 2 == 0)
// 내림차순으로 정렬하여
.OrderByDescending(number => number)
// 리스트로 만들어 줍니다.
.ToList();
evens : {10, 8, 6, 4, 2}
}
보면 foreach문에 비해서 짧아진 코드를 볼 수 있다.
나머지에 따른 분류, 내림차순 정리, 리스트 생성을 모두 한줄씩만 사용해서 완성한 것을 볼 수 있다.
범위변수?
LINQ의 number는 foreach문의 number와 차이점이 있디.
foreach문의 반복변수 number는 numbers라는 원본으로부터 데이터를 담아내지만,
LINQ안의 number는 범위변수라고 해서 실제로 데이터를 담지는 않고,
오로지 LINQ안에서만 사용되며, 어떤 일이 어떻게 일어나는지만 묘사하는데 사용된다.
즉, number는 실제 변수에 대입되지 않고 number가 number처럼 실행된다는 표현이다.
표준 LINQ 연산 메서드 정리
정렬 |
OderBy | 오름차순으로 값을 정렬 | 🧨 지연 실행 |
OderByDescending | 내림차순으로 값을 정렬 | 🧨 지연 실행 | |
ThenBy | 오름차순으로 2차 정렬 | 🧨 지연 실행 | |
ThenByDescending | 내림차순으로 2차 정렬 | 🧨 지연 실행 | |
Reverse | 컬렉션 요소의 순서를 거꾸로 뒤집기 | 🧨 지연 실행 | |
집합 |
Distinct | 중복값을 제거 | 🧨 지연 실행 |
Except | 두 컬렉션 사이의 차집합을 반환. 임의의 컬렉션(a,b,c,e)에는 존재하는데 다른 컬렉션(a,d,f)에는 존재하지 않는 요소 (b,e)를 반환 |
🧨 지연 실행 | |
Intersect | 두 컬렉션 사이의 교집합을 반환. 두 컬렉션 양쪽 모두 존재하는 요소만 반환. |
🧨 지연 실행 | |
Union | 두 컬렉션 사이의 합집합을 반환. 한쪽 컬렉션이 a,b,c,d 요소를 갖고 있고 다른 한쪽 컬렉션이 a,b,d,e 요소를 갖고 있다면 두 컬렉션 사이의 합집합은 a,b,c,d,e를 반환 |
🧨 지연 실행 | |
필터링 | OfType | 메소드 형식 매개변수로 형식 변환이 가능한 값들만 추출 | 🧨 지연 실행 |
Where | 필터링할 조건을 평가하는 함수를 통과하는 값들만 추출 | 🧨 지연 실행 | |
수량 연산 |
All | 모든 요소가 임의의 조건을 모두 만족시키는지 평가 결과는 true, false 둘중 하나를 반환 |
🧨 지연 실행 |
Any | 모든 요소 중 단 하나의 요소라도 임의의 조건을 만족시키는지 평가 결과는 true, false 둘중 하나를 반환 |
🧨 지연 실행 | |
Contains | 명시한 요소가 포홤되어 있는지 평가 true, false를 반환 |
🔫 즉시 실행 | |
데이터 추출 |
Select | 값을 추출하여 시퀀스를 만듬 | 🧨 지연 실행 |
SelectMany | 여러 개의 데이터 원본으로부터 값을 추출하여 시퀀스를 생성 여러개의 from절을 사용 |
🧨 지연 실행 | |
데이터 분할 |
Skip | 시퀀스에서 지정한 위치까지 요소들은 건너 뜀 | 🧨 지연 실행 |
SkipWhile | 입력된 조건 함수를 만족시키는 요소는 건너뜀 | 🧨 지연 실행 | |
Take | 시퀀스에서 지정한 요소까지 요소들을 취합 | 🧨 지연 실행 | |
TakeWhile | 입력된 조건 함수를 만족시키는 요소들을 취합 | 🧨 지연 실행 | |
데이터 결합 |
Join | 공통 특성을 가진 서로 다른 두 개의 데이터 소스를 연결 공통 특성을 Key로 삼아서 Key가 일치하는 두 객체를 쌍으로 추출 |
🧨 지연 실행 |
GroupJoin | 기본적으로 Join 연산자와 같은 일을 하되, 조인 결과를 그룹으로 만들어 넣음 | 🧨 지연 실행 | |
데이터 그룹화 |
GroupBy | 공통 특성을 공유하는 요소들을 각 그룹으로 묶음 각 그룹은 IGrouping<TKey, TElement>객체로 표현 |
🧨 지연 실행 |
ToLookUp | Key 선택 함수를 이용하여 골라낸 요소들을 Lookup<Tkey, TElement> 형식의 객체에 삽입, 하나의 Key에 여러 개의 객체를 대응시킬 때 사용하는 컬렉션 |
🧨 지연 실행 | |
생성 |
DefaultEmpty | 빈 컬레션을 기본값이 할당된 싱글턴 컬렉션으로 바꿈 | 🧨 지연 실행 |
Empty | 비어 있는 컬렉션을 반환 | 🧨 지연 실행 | |
Range | 일정 범위의 숫자 시퀀스를 담고 있는 컬렉션을 생성 | 🧨 지연 실행 | |
Repeat | 같은 값이 반복되는 컬렉션을 생성 | 🧨 지연 실행 | |
동등 평가 |
SequenceEqual | 두 시퀀스가 서로 일치하는지를 평가 | 🔫 즉시 실행 |
요소 접근 |
ElementAt | 컬렉션으로부터 임의의 인덱스존재 요소를 반환 | 🔫 즉시 실행 |
ElementOrDefault | 컬렉션으로부터 임의의 인덱스에 존재하는 요소를 반환 인덱스가 컬레션의 범위를 벗어날 때 기본값을 반환 |
🔫 즉시 실행 | |
First | 컬렉션의 첫 번째 요소를 반환 조건식이 매개변수로 입력되는 경우 이 조건을 만족하는 첫 번째 요소를 반환 |
🔫 즉시 실행 | |
FirstOrDefault | First와 동일 하지만 반환값이 없을때 기본값을 반환 | 🔫 즉시 실행 | |
Last | 컬렉션의 마지막 요소를 반환 | 🔫 즉시 실행 | |
LastOrDefault | Last 연산자와 같은 기능을 하되 반환값이 없으면 기본값을 반환 | 🔫 즉시 실행 | |
Single | 컬렉션의 유일한 요소를 반환 | 🔫 즉시 실행 | |
SingleOrDefault | Single과 동일한 기능 유일값이 아니거나, 반환값이 없으면 기본값을 반환 |
🔫 즉시 실행 | |
형식 변환 |
AnEnumerable | 매개변수를 IEnumerable<T>로 형식 변환하여 반환 | 🧨 지연 실행 |
AsQueryable | IEnumable 객체를 => IQueryable 형식으로 변환 | 🧨 지연 실행 | |
Cast | 컬렉션의 요소들을 특정 형식으로 변환 | 🧨 지연 실행 | |
OfType | 특정 형식으로 형식 변환할 수 있는 값만 걸러냄 | 🧨 지연 실행 | |
ToArray | 컬렉션을 배열로 반환 => 강제로 쿼리를 실행시킴 | 🧨 지연 실행 | |
ToDictionary | Key 선택 함수에 근거하여 컬렉션 요소를 Dictonary<TKey, TValue>에 삽입 => 강제로 쿼리를 실행시킴 |
🧨 지연 실행 | |
ToList | 컬렉션을 List«code class=”language-plaintext highlighter-rouge”>T</code>> 형식으로 변환 => 강제로 쿼리를 실행 | 🧨 지연 실행 | |
ToLookup | Key 선택 함수에 근거해서 컬렉션의 요소를 Lookup<TKey, TElement>에 삽입 => 강제로 쿼리를 실행 |
🧨 지연 실행 | |
연결 | Concat | 두 시퀀스를 하나의 시퀀스로 연결 | 🧨 지연 실행 |
집계 |
Aggregate | 컬렉션의 각 값에 대해 사용자가 정의한 집계 연산을 수행 | 🔫 즉시 실행 |
Average | 컬렉션의 각 값에 대한 평균을 계산 | 🔫 즉시 실행 | |
Count | 컬렉션에 조건에 부합하는 요소의 개수를 카운팅 | 🔫 즉시 실행 | |
LongCount | 매우 큰 컬렉션을 카운팅 | 🔫 즉시 실행 | |
Max | 컬렉션의 가장 큰 값을 반환 | 🔫 즉시 실행 | |
Min | 컬렉션의 가장 작은 값을 반환 | 🔫 즉시 실행 | |
Sum | 컬렉션 안에서의 값의 합을 계산 | 🔫 즉시 실행 |
굉장히 많은 메소드가 있으며, 메소드 별로 지연실행 여부가 다른걸 볼 수 있다.
하루만에 공부할 양은 아닌듯 하며, 시간이 얼마나 걸리든, 확실히 체득하는 것이 중요해 보인다.
'TIL' 카테고리의 다른 글
2023/11/14 TIL (1) | 2023.11.14 |
---|---|
2023/11/13 TIL (1) | 2023.11.13 |
2023/11/10 TIL (0) | 2023.11.10 |
2023/11/09 TIL (2) | 2023.11.09 |
2023/11/08 TIL (0) | 2023.11.08 |