본문 바로가기
728x90

언어(C, C++, C#)18

[C#] 참조 전달(pass by reference) ref, out, in ref, out, in은 모두 C#에서 메서드로의 인자 전달에 사용된다. 3가지 모두 참조 전달(pass by reference) 방식으로, C나 C++에서 포인터나 참조를 직접 전달하는 방식과 유사하다.ref변수를 참조로 전달하며, 호출하는 쪽에서 반드시 초기화되어 있어야 한다.메서드 내에서 해당 변수의 값을 읽고, 수정하여 반영할 수 있다.선언과 호출에서 모두 ref 키워드가 붙여져서 사용되어야 한다.void Modify(ref int number){ number += 10; // number의 참조가 와서 변경하면}int a = 5;Modify(ref a);Console.WriteLine(a); // 결과로 원래 숫자에 15가 반영된다out변수가 참조로 전달되지만, 초기화되어 있을 필요가 없다.. 2025. 4. 30.
[C++] 스마트 포인터(unique_ptr, shared_ptr, weak_ptr) RAII 패턴C++에서 자주 사용되는 패턴으로, 객체가 어떠한 경우에서든 사용되는 범위를 벗어나면 소멸자가 불린다는 점을 이용한 패턴객체의 자원 할당은 생성자에서, 해제는 소멸자에서 관리해줌으로써 만약 delete를 하지 않거나 오류 등의 문제로 인해 범위를 벗어난 경우, 자동으로 자원을 해제할 수 있게 하는 패턴이다.이 글에서 설명할 스마트 포인터들은 RAII 패턴에 기반하여 작성되었다.unique_ptr (단독 소유)객체의 소유자를 하나만 갖게 하는 스마트 포인터소유권 이전은 move semantics를 통해서만 가능(std::move)소멸 시 자동으로 delete 호출(unique_ptr이 소멸될 때 그 것이 가리키는 객체에 대해 delete를 호출해줌)#include using namespace .. 2025. 4. 30.
[C# / Unity] C#과 Unity에서의 GC(Garbage Collection) C#에서의 GC기본적으로 C#은 .NET Framework 기반의 언어이기 때문에 .NET의 런타임 환경인 CLR(Common Language Runtime)이 GC를 담당하게 된다.(.NET과 CLR에 대한 정리) 2024.11.06 - [언어(C, C++, C#)] - [C#] .NET, 컴파일 과정, CLS, CTS, CIL, CLI, CLR, JIT 컴파일 이 때, GC는 heap영역의 메모리를 관리하게 된다.두 가지 로직을 베이스로 사용하는데 첫 번째는 세대별 가비지 컬렉션이고, 두 번째는 mark-and-sweep과 compaction이라는 정렬 과정이다.추가적으로 할당 받을 메모리의 크기에 따라 저장될 메모리 공간을 SOH, LOH로 나누게 된다.세대별 가비지 컬렉션GC(Garbage Col.. 2025. 4. 11.
[언어] 컴파일 언어, 인터프리터 언어, 하이브리드 언어 컴파일 언어코드 실행 과정소스 코드를 컴파일러가 읽어 전체를 기계어로 번역해 실행 파일을 생성한다.실행 파일을 독립적으로 실행한다.(컴퓨터가 직접 실행할 수 있다.)장점빠른 실행 속도(성능) : 실행 파일이 이미 기계어로 번역되어 있어 실행 시 번역이 필요없다.에러 검출 : 컴파일 과정에서 문법적 오류를 사전에 모두 검출해준다.자원 관리 : 메모리 관리 및 시스템 자원 사용이 효율적이다.보안 : 컴파일된 코드는 기계어이기 때문에 사람이 이해하기 어려워 보안과 안정성이 높다.단점개발 속도 : OS 별로 컴파일 과정이 필요하기 때문에 개발 주기가 길어질 수 있다. 또, 수정 시에 재컴파일이 필요하다.플랫폼 종속성 : 특정 운영 체제나 하드웨어 환경에 맞게 컴파일된 실행 파일은 다른 환경에서 동작하지 않는다... 2024. 12. 7.
[C#] 가상 함수 테이블 가상 함수란?기본 클래스에서 선언되고, 파생 클래스에서 재정의(override)할 수 있는 함수이다.virtual 키워드를 통해 선언하고, override 키워드를 통해 재정의할 수 있다.overriding, overloadingoverloading(오버로딩) : 같은 이름의 메서드를 여러 개 정의하는 기법으로, 메서드의 매개변수의 수나 타입을 다르게 설정하여 동일한 메서드 이름을 여러 용도로 사용할 수 있게 해준다.overriding(오버라이딩) : 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의하여 사용하는 기법이다.런타임 다형성을 구현하는 중요한 방법 중의 하나로, 자식 클래스에서 부모 클래스의 메서드를 변경하여 자식 클래스만의 방식으로 동작하게 할 수 있다.Virtual Table(VTab.. 2024. 11. 17.
[C#] 리플렉션(Reflection)과 속성(Attribute) 리플렉션(Reflection)리플렉션은 프로그램 실행 중 메타데이터를 검사하고 객체의 정보(형식, 이름, 프로퍼티 목록, 메소드 목록, 필드, 이벤트 목록 등)를 탐색, 조작하는 기능을 제공하는 기법이다. 이를 통해 코드가 실행 중에 클래스, 메서드, 프로퍼티, 필드 등의 정보를 조회하고 다룰 수 있으며, 주로 System.Reflection 네임 스페이스에 정의된 클래스를 사용한다.장단점장점유연성 및 확장성 : 코드가 컴파일될 때 타입을 알 필요 없이 런타임에 타입 정보를 가져와 동적으로 조작할 수 있다. 이로 인해 애플리케이션이 런타임에 새로운 타입을 로두하고 사용할 수 있다.동적 로딩 및 실행 : 리플렉션은 Assembly.Load, Type.GetType 등의 기능을 통해 외부 라이브러리나 플러그.. 2024. 11. 14.
728x90