C# 기준의 설명


오버로딩은 클래스 안에서 같은 이름의 함수를 매개변수의 차이를 두고 여러 개 구현하는것


오버라이딩은 클래스 상속 관계에서 함수를 재정의 하는 것


동일한 이름의 함수 중 부모의 함수에 virtual 키워드를 붙이고 자식의 함수에 override 키워드를 붙여서 구현


오버라이딩으로 함수를 구현하면 부모 참조 변수로 함수 호출 시 자식 객체의 함수가 호출 됨


오버라이딩을 하지 않고 new 키워드를 붙여서 동일한 이름의 함수를 부모, 자식에 각각 구현하면 자식 참조 변수로 함수를 호출하면 자식 객체의 함수가 호출되고 부모 참조 변수로 함수를 호출하면 부모 객체의 함수가 호출 됨


이 경우 new 키워드를 붙이지 않아도 결과는 같지만 자식 함수가 부모 함수를 숨긴다고 경고가 발생함


new를 붙이면 이 상황을 인지하고 있다고 알림으로서 경고가 안뜨게 됨

'기본소양' 카테고리의 다른 글

C#의 G.C  (0) 2019.03.14

C#의 가비지 컬렉터는 메모리를 3개의 세대로 나누어 관리합니다.


0세대는 메모리에 최초 할당되는 객체들입니다. 0세대의 용량이 일정 크기를 초과하면 가비지 컬렉터가 다음과 같은 순서로 일을 시작합니다.


1. 메모리에서 참조되고 있는 객체를 검색합니다.

    이 과정을 통해 참조 그래프를 만들어냅니다. 참조 그래프는 다음과 같은 각 스레드에서 실행중인 메소드의 스택 변수, cpu 레지스터 변수가 가지고 있는 참조


2. 참조 되지 않은 메모리들에 대한 마무리를 시도합니다.


3. 참조 되지 않는 객체들을 해제하고 그 메모리를 회수합니다. (해제, 메모리 회수의 과정은 계속 참조 되는 객체들에 대한 힙 영역 재배치, 메모리 할당 포인터를 감소시키는 과정으로 이루어집니다.)


가비지 컬렉터가 활동하는 동안 모든 스레드 작업은 중단되며 해제된 빈 공간을 채우기 위한 객체 위치 조정 또한 이루어집니다.


위의 과정이 이루어지고 계속 사용중인 객체들은 1세대로 승격됩니다.


1세대 또한 할당된 객체들이 일정 크기를 초과하면 가비지 컬렉터의 활동이 시작됩니다.


이는 0세대에서 활동한 방식과 동일하며 여전히 참조 중인 객체가 있다면 2세대로 승격됩니다.


2세대의 경우 일정 크기 초과 시 모든 세대에 대한 가비지 컬렉터 활동이 일어납니다.




단 유니티에서 사용하는 모노의 가비지 컬렉터는 세대를 나누지 않고 단일 세대에서의 가비지 컬렉터 활동을 합니다.

'기본소양' 카테고리의 다른 글

C#에서의 오버로딩과 오버라이딩 그리고 new  (0) 2019.03.15

+ Recent posts