프로그래밍 언어
[C#] 리플렉션 (Reflection) 예시
리플렉션 개념 사용 방법 Assembly.GetType으로 접근하려는 Type 검색 Reflection을 사용하기 위해서는 Assembly.GetType을 통해 접근하고자 하는 클래스의 Type을 찾아야 한다. Type이라는 용어가 다소 생소할 수도 있는데, 클래스명 = Type이라고 생각하면 된다. public Type GetAuthDataManagerType() { //모든 assembly를 검색합니다. foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) { var test3 = assembly.GetTypes(); foreach (var type in assembly.GetTypes()) { //찾는 Type이 있을 경우 반환합니다...
[C++] 테스트용 map<int, 포인터배열>
#include #include using namespace std; class Test { private: Test** arr = new Test * [10]; map m; public: int val = 0; Test() { cout
C++ 참조자(Reference)의 이해
참조자(레퍼런스)란 C에서는 없던, C++에서 새로 생긴 개념. 포인터랑 의도하는 바는 같은데 포인터의 단점이 보완되어 출시된 것. C++ 문서에서는 포인터보다 특정 경우가 아니라면 대부분 참조자를 사용하길 권장한다. 값으로 전달하는 방식의 한계 1. 큰 구조체나 클래스를 함수에 전달할 때 인수의 복사본을 매개변수로 만든다. 2. 함수의 호출자에 값을 전달하는 건 반환값을 사용하는 게 유일한 방법이나 함수에서 인수를 수정하는 게 확실하고 효율적이다. → 그래서 참조를 통해 문제를 해결한다. 변수를 참조로 전달하려면 매개변수를 참조로 선언한다. 함수가 호출되면 y는 인수에 대한 참조가 된다. int x=5; addOne(x); //int &y=x; 이런 의미 void addOne(int& y) { y=y+..
C Call-by-Value(값에 의한 호출) & Call-by-Reference(참조에 의한 호출)의 이해
C++ 언어에서는 레퍼런스 혹은 참조자(&)라는 개념이 따로 있으므로, 이를 Call-by-Address(주소에 의한 호출)라고 하지만 C 언어라는 것에 한정을 두고 Call-by-Reference(참조에 의한 호출)의 명칭으로 설명한다. 포인터와 메모리에 대한 개념을 명확하게 알고 있다면 이에 대한 이해가 어렵지 않으나, 사실상 메모리에서 어떻게 주소와 값이 흘러가는지 제대로 파악을 할 수 없다면, Call-by-Value와 Call-by-Reference에 대하여 많은 어려움을 겪을 것이다. 1. Call-by-Value (값에 의한 호출) Call-by-Value는 함수에 인자를 변수에 대입된 값을 던져주는 것을 의미한다. 일단 아래의 코드를 보자. 다음과 같이 int a 변수에는 10을 대입하고,..
[React] CSS를 적용하는 여러 방법
React는 다양한 라이브러리의 조합으로 생산성이 높아지는 자바스크립트 라이브러리이다. 따라서 스타일을 적용하는 방법에도 기존의 import를 사용하는 것 이외에 라이브러리를 사용하는 다양한 방법이 있다. Import 가장 기본이 되는 방법으로 Component에서 css파일을 바로 import // App.js import "styles.css"; const App = () => { return( ... ); } 가장 간단한 방법이기 때문에 적용하기는 쉽지만, 그만한 단점이 존재한다. 어플리케이션의 규모가 작은 경우에는 큰 영향이 없지만, 규모가 커질수록 컴포넌트가 많아진다. 그렇게 되면 css 파일을 관리하기도 어려워지며, 여러 컴포넌트에서 사용한 Class Name에도 중복이 발생할 수 있다. 그로..
[React] className
classnames? classnames는 CSS 클래스를 조건부로 설정할 때 매우 유용한 라이브러리이다. 또한, CSS Module을 사용할 때 이 라이브러리를 사용하면 여러 클래스를 적용할 때 매우 편리하다. 라이브러리이기 때문에 설치가 필요하다. $ yarn add classnames classnames 간략 사용법 import classNames from ‘classnames’; classNames(‘one’, ‘two’); // = ‘one two‘ classNames(‘one’, { two: true }); // = ‘one two‘ classNames(‘one’, { two: false }); // = ‘one‘ classNames(‘one’, [‘two’, ‘three’]); // = ‘o..
[C#] var 키워드
var 사용 예제 var는 암시적 타입 지역변수(implicitly typed local variable) 이다. var는 데이터 타입을 개발자가 아닌 컴파일러(Compiler) 가 결정한다. 다음은 var 로 지역변수를 선언한 예제 코드다. 아래 예제에서 var idx의 값은 int형 정수 10으로 설정됨으로 컴파일러에 의해 int형으로 타입이 결정된다. var idx = 10; //Implicitly typed. int idx = 10; //Explicitly typed. 다음은 C#에서 사용하는 var 사용 예제코드다. using System.Linq; namespace VarTest { class Program { static void Main(string[] args) { // idx 변수 in..
[C#] 참조에 의한 매개변수 전달 (ref, out)
값에 의한 호출 (Call by value) 함수와 메소드를 호출할 때, 필요한 값들을 전달해주기 위해 매개변수에 값을 넣어 전달해 준다. 허나, 기본적으로 값 형식(Value type)은 매개 변수로 전달 시에 해당 인자의 값을 복사해서 전달을 한다. 이건 함수와 메소드에서 값을 리턴할 때도 마찬가지다. 이것을 값에 의한 호출(Call by value)이라고 한다. 두 매개 변수를 받아서 서로 값을 바꾸는 Swap() 함수에서 이런 예시가 자주 나온다. static void Swap(int x, int y) { int temp = x; x = y; y = temp; } static void Main(string[] args) { int x = 3; int y = 5; Swap(x, y); Console..
[C#] 구조체 (struct)로 메모리 절약하기
메모리의 타입(유형) 스택(Stack) 스택은 매우 단순하고 균일한 방식으로 할당되는 연속적인 메모리 영역이다. 메모리는 스택의 하위 메모리 주소에서 상위 메모리 주소로 할당 된다. 가장 최근에 할당된 메모리만 해제 할 수 있으며, 당연히 스택 맨 아래에 할당 된(먼저 할당 된) 메모리를 해제하려면 위에 할당된 메모리를 모두 해제해야만 한다. 스택에 할당 되지 않은 메모리는 단순한 메모리 포인터로 추적된다. 스택 영역에 메모리가 할당 되면 포인터가 적절한 양만큼 위로 이동한다. 반대로 메모리가 해제되면 포인터가 다시 아래로 이동한다. 실제 스택 영역에서 메모리가 해제 된다고 하더라도 메모리에 저장되어 있는 값을 지우는 것이 아닌 단순히 포인터만 이동하고, 해당 메모리는 필요 할 때 덮어 쓰여지게 된다. ..
[C#] 관리되는, 관리 되지 않는 코드
관리되는 코드 .NET CIL로 작성하고 컴파일 하는 .NET상의 코드 - GC 메모리 관리가 된다. 관리되지 않는 코드 기계 코드를 직접 컴파일 하도록 컴파일되는 .NET에 없는 코드 - GC 메모리 관리가 안된다. ex) 윈도우 시스템 자원 IntPtr - 인터포인터 관리되지 않는 메모리 블록에 대한 포인터 정수형 포인터를 의미하는 값 형식의 타입 포인터는 메모리 주소값을 보관하는 곳 IntPtr타입은 메모리 주소를 가리키는것 외에 윈도우 OS의 핸들값을 보관하는 용도로 쓰인다. 핸들은 윈도우 OS가 특정 자원에 대한 식별자로서 보관하는 값인데 일례로 파일이 좋은예다. 파일처리, OS에서 제공되는것 처리를 할때 사용된다. ex) 이미지 처리에서도 쓰인다. Marshal Class - 마샬 관리되지 않..