더듬이의 헬로월드

Hello, World!

728x90

프로그래밍 언어 32

[C#] Action은 무엇이고, 어떻게 사용하는 걸까?

Action은 C#의 델리게이트(delegate) 중 하나로, 반환값이 없는 메서드를 참조하기 위한 형식입니다. 즉, 메서드를 변수로 전달하거나 다른 메서드의 인자로 사용할 때 유용하게 활용됩니다. Action은 다음과 같이 선언됩니다. public delegate void Action(); 위의 코드에서, public은 액세스 수준 지정자입니다. delegate 키워드는 C#에서 델리게이트를 선언할 때 사용하는 키워드입니다. void는 반환값이 없는 메서드를 의미합니다. 그리고 Action은 델리게이트의 이름입니다. Action은 인자를 갖지 않는 경우와 인자를 갖는 경우로 나뉩니다. 예를 들어, 반환값이 없는 메서드를 인자로 받는 Action은 다음과 같이 선언됩니다. public delegate v..

[C++기본] 28.연결 리스트

연결 리스트란? 연결 리스트는 가변 배열과 뭐가 다를까? 가변 배열은 힙 메모리 공간에 동적 할당을 통해, 일정 크기만큼 사용하는 연속적인 메모리 구조이다. 하지만 연결 리스트는 딱 하나의 메모리만이 들어갈 공간만 만든다. 이는 연속적이지 않은 구조를 가지고 있다. 즉, 3번째 데이터를 찾고 싶다면, 첫번째 데이터부터 각 데이터들이 가진 포인터를 이용해 2번 이동해 3번쨰 위치까지 가는 것이다. 이떄, 이 하나 하나의 구조들을 NODE,노드라고 한다. 노드 하나 하나에는 데이터와 다음 노드로 가는 주소도 같이 들어있다! 이렇게 구성 되어 있을 것이다. 이 노드들의 구성 방식에 따라 대표적으로 세 가지 종류의 연결 리스트가 있는데, 단일 연결 리스트 각 노드가 다음 노드만을 기리키는 일반적인 형태의 연결 ..

[C++STL]Vector, 벡터 컨테이너 사용법(가변 배열)

가변 배열 https://ddecode.tistory.com/entry/C%EA%B8%B0%EB%B3%B8-27%EA%B0%80%EB%B3%80-%EB%B0%B0%EC%97%B4 위 포스팅에 기존 배열의 문제점을 설명하고, 가변 배열의 구현을 해보았다. 굳이 우리가 직접 만들지 않아도 이는 Vector라는 이름으로 STL에 구현되어있다. vector는? 벡터는, 힙 메모리 공간에 생성되는 동적 할당되는 배열이다. 기존 배열보다 효율적으로 메모리를 관리하는 것이 가능하다! 삭제의 경우에도 지원하지만, 맨 끝을 삭제하는 것이 아닌 이상, 삭제할때마다 삭제하는 원소 기준 뒷부분이 앞으로 이동하기에, 삭제가 자주 일어나는 상황에서는 속도가 느려질 수 있다.(연결 리스트를 사용하면 좋다!) vector의 헤더파일..

[C++기본] 27.가변 배열

기존 배열의 문제점 int b; cin>>b; int arr[b]; 위 두 코드는 정상적으로 실행될까? 안된다면, 그 이유는 무엇일까? b는 사용자의 입력에 따라, 10이 될 수도, 100이 될 수도 있다. 그리고, arr의 사이즈는b에 따라 결정된다. 문제는, 이게 런타임 중에 동작한다는 것이다. 이 배열은 지역변수, 스택 메모리 영역에 생성된다. 그럼, 함수가 실헹 될 떄, 메모리를 얼마나 잡아야 하는지 모를 것이다. 크기를 가늠할 수가 없기 때문이다. 그래서 우리는 그때 그때 크기가 늘어나고, 줄어드는 가변 배열을 만들고 싶은 것이다. 가변 배열 자료형 가변 배열을 위한 자료형을 만들어 보자. 첫번째로, 이 가변배열에 데이터를 저장할 곳을 만들어 주어야 한다. typedef struct Holymo..

[C++기본] 26.동적 할당

메모리 영역 오늘 소개하는 동적 할당은 힙 영역에 관련된 이야기다. 우리는 여태 만든 변수들은 모두 스택 영역이나, 데이터 영역만 사용했다. 하지만, 프로그램이 실행되어야지만 알 수 있는 변수가 있을까? 예를 들어, 내가 엔터를 칠 때 마다 변수를 하나씩 생성하고 싶다면? 내가 엔터를 치지 않으면 하나도 생성되지 않을 것이고, 10번 엔터키를 입력한다면 10개의 변수가 생일 것이다, 이거, 가능할까? 동적인 메모리 할당 실행 중인 , 즉 런타임 도중 대응이 가능한 것을 동적 메모리 할당이라고 한다. 이는 코드에 선언하고, 프로그램 실행 전에 이미 만들어 놓은 변수들은 정적인 메모리 영역을 사용하기 떄문에 ,어떠한 변수도 힙 메모리 영역을 사용하지 못한다. 그럼 동적 할당은 어떻게 하나? 그래서 포인터라는..

[C++기본] 25.구조체 포인터

구조체의 멤버 typedef struct Test { int a; float b;//멤버 }Myst; 일단 구조체의 형식을 다시 생각해보자. Myst라는 자료형을 내가 만든 것이다! Myst t1; t1이 곧 Myst라는 형식의 변수가 되는 것이고, Test 안에있는 a,b는 변수가 아닌 멤버(구조체의 멤버)가 되는 것이다. t1.a; 즉, 이것은 t1이라는 변수의 a를 지칭하는 말이다. 구조체와 포인터 Myst s; Myst *Pointer=&s; 그럼 구조체를 가리키는 포인터는 어떻게 계싼될까? 구조체는 하나의 자료형으로 묶여있기 때문에 int 4바이트, float 4바이트, 총 8바이트로 계산되는 포인터 변수가 나올 것이다. 그럼 각 멤버에 접근은 어떻게 해요? (*point).a = 500; (*..

[C++기본] 24.문자열-5

문제. wcscmp함수 만들기 wcscmp는 두 문자열을 입력받고, 이를 사전순으로 비교해서 같으면 0, 첫번째 문자열이 빠르면 -1, 두번째 문자열이 빠르면 1를 반환하는 함수이다. 이 함수는 어떻게 구현하면 좋을까? 필요한 프로세스 1.입력받는 두 문자열의 길이를 구한다. 2.첫번째 문자부터 비교해 나가며 크기를 비교한다. 3.같으면 다음문자, 다르면 비교 후 -1 or 1 출력! 4.끝까지 같다면, 문자열의 길이 를 비교해서 -1 or 1 출력! 5.문자열의 길이까지 같다면, 0출력! int cmpcmp(const wchar_t* left, const wchar_t* right) { //수정할 필요가 없는 함수이다! 상수화 시켜주기 int leftlen = GetLength(left); int ri..

[C++기본] 23.문자열-4

함수 오버로딩이란? void Test(int a){ } void Test(int a,int b){ } void Test(int a, float b){ } 같은 함수 이름이라도, 매개변수의 개수나 자료형을 구분하여 각 해당되는 함수가 호출되는 것을 함수 오버로딩 이라고 한다. 즉, Test(5); Test(5,10); Test(5,15.54); 같은 이름의 함수라도 각 다른 함수를 호출하는 것이다! 문자열 이어 붙이기 함수 직접 만들기 문자열-3에서 포스팅했던 함수 wcscat_s도 오버로딩 된 함수이다. 매개변수를 3개받는 경우도 있는데, 이 경우의 함수를 만들어보자. void StrCat(wchar_t* pDest,unsigned int Size,const wchar_t pSrc){ } 일단 원본 문자..

728x90