CS 공부

CS 지식 강의 요약 정리본 1 (메모리, 대리자, 람다식)

때류기 2024. 5. 27. 01:17

 

제가 학원에서 강의를 들으며 간략하게 정리한 내용을 올립니다. 이 글을 보시고 도움이 됬으면 좋겠습니다!

 

 

new 키워드란?

    • 메모리를 동적할당 하여 생성하는 키워드
    • 구조체에 new키워드를 사용하면 구조체의 내의 변수들을 초기화한다.
    • 함수내의 변수들 중 참조타입은 주소의 크기(4byte)를 할당받고 값 타입은 변수크기만큼 할당한다.
    • Dummy: 정수형 변수 4개를 가진 클래스(참조 타입이기에 주소의 크기만 할당)
    • Coord: 정수형 변수 3개를 가진 구조체(값 타입이기에 변수의 크기만큼 할당)

 

 

RAM이란?

  • 저장장치, CPU간의 병목 현상 해소를 위해 CPU에서 필요한 데이터를 미리 적재해 놓는 공간
  • 실행하려는 프로그램의 인스턴스를 만들어서 올려놓고 연산에 필요한 데이터를 찾기위해 컴퓨터에 있는 전체 프로그램을 탐색할 필요 없이 현재 실행중인 프로그램인스턴스들 내에서만 검색해도됨
  • HDD보다 데이터 전송 속도가 훨씬 빠르다.

RAM에 할당되는 것들

Code: 컴파일된 코드들이 적재되는 공간(코드 영역)

BSS: Global & Static 변수가 적재 (초기값이 없는 변수를 적재)

Data: Global & Static 변수가 적재 (초기값이 있는 변수를 적재)

Heap: 참조 타입을 적재(선언한 곳에서 주소의 크기[4byte] 만큼을 메모리 할당)

Stack: 값 타입을 적재(선언한 곳에 변수타입 크기만큼을 메모리 할당)

 

Q. 멤버 함수는 하나씩만 Code내에 적재되는데 클래스가 여러개일때 클래스내의 전역변수를 함수가 어떻게 알아내는가?

A. 멤버함수는 모두 자기 자신 클래스의 변수를 참조 받고있으나 생략되어있다. (ex. this.a , classname.a)

 

 

Cache Memory

  • L1: CPU와 붙어있는 캐시 메모리
  • L2: L1과 L2 사이에 존재하는 캐시 메모리(공간 지역성, 시간 지역성의 이유로 사용)
  • L3: Ram에 붙어있는 캐시 메모리
  • Cache는 공간지역성을 이용해서, 현재 필요한 데이터의 인접한 데이터를 캐시라인 단위로 읽어서 복제, 이후 데이터를 검색 할때 항상 Ram에서 탐색하는것이 아니라 캐싱되어있는 데이터에서 먼저 탐색하므로 탐색시간이 훨씬 빠름
  • 공간지역성: 어떤 메모리 공간에 접근했을때, 그 다음에는 또 인접한 메모리 공간에 접근할 확률이 상대적으로 높다

 

 

대리자

1. delegate

  • 함수들을 저장해놓고 연속적으로 불러올 수 있게 해줌(함수 체이닝)
  • 구독, 구독 해제와 같은 방식이라 생각하면 편할듯
  • 직접 형식을 지정해줘야하는 불편함이 있음

 

delegate 선언 방법

 

 

2. action

  • 대리자를 간편하게 사용하기 위해 미리 지정해둔 대리자(반환 값이 void 인 delegate)
  • 선언 방법 : Action<매개 변수 자료형,,,,,> 이름

 

3. Func

  • 대리자를 간편하게 사용하기 위해 미리 지정해둔 대리자(반환 값이 존재하는 delegate)
  • 선언 방법 : Func<매개 변수 자료형,,,,, 반환 자료형> 이름

 

3. Predicate

  • 대리자를 간편하게 사용하기 위해 미리 지정해둔 대리자(bool 값을 반환 하는 delegate)
  • 인자를 받고 인자에 대한 조건을 반환할때 주로 사용
  • 선언 방법 : Predicate<매개 변수 자료형,,,,,> 이름

 

event 한정자

  • 외부클래스에서 = 과 대리자를 사용할 수 없게 해줌(+=, -= 만 지원)
  • 기능만을 제공(인터페이스와 유사)

 

 

람다식(익명함수)

  • 기본 함수의 경우 함수 이름을 Code영역에서 검색해 실행하는 방식
  • 간단하거나 한 곳에서만 사용하는 함수의 경우 이름을 부여해줄 필요X
  • 함수 이름을 정의할 경우보다 람다식을 사용하는 경우가 부하가 적을 경우 사용
  • Code에 들어있는 함수 내 코드들을 호출, 복제해 사용하는 것이 아니라 원본 그대로 사용(함수 오버헤드가 발생X)
  • 가독성이 향상
  • 컴파일러 스스로 알 수 있는 코드 부분을 생략하고 작성
1. 람다식 [(매개 변수 자료형) => {이곳에 코드 작성};]
2. 변수에 적용한 람다식 [자료형 변수이름 => 함수 및 변수, 상수 입력 가능;]

 

'CS 공부' 카테고리의 다른 글

[C#] 해시셋 (HashSet)  (0) 2024.06.28
[C#] 링크드 리스트 (Linked List)  (0) 2024.06.23
[C#] 딕셔너리 (Dictionary)  (0) 2024.06.21
[C#] 리스트 (List)  (2) 2024.06.16
[C#] 자료구조와 컬렉션  (2) 2024.06.11