일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Programming
- Tips강좌
- 김성엽
- CS
- 백준
- 문법
- Windows
- 연산자
- VS ERROR
- 배열
- 알고리즘
- 함수
- Win32
- c
- 프로그래밍
- 이지스퍼블리싱
- c++
- Visual Studio
- Tips프로그래밍강좌
- Javascript
- tipssoft
- c#
- 지식나눔강좌
- Kotlin
- 리뷰
- 포인터
- 티스토리
- doit코틀린프로그래밍
- Direct2D
- Desktop
- Yesterday
- Today
- Total
목록CS (12)
F.R.I.D.A.Y.
C#에서 WinAPI로 뭔가를 하려고 했더니 보호된 메모리라고 예외를 뱉는다. 사용하려던 Windows API는 GetWindowText(HWND hWnd, LPSTR lpstring, int nMaxCount); 그래서 C# 코드는 이렇게 했었다. [DllImport("user32.dll", SetLastError = false)] public static extern int GetWindowText(IntPtr hWnd, out StringBuilder lpText, in int maxCount = 256); // ... StringBuilder windowTitle = new StringBuilder(256); wa.GetWindowText(hWnd, out windowTitle, windowTit..
메서드, 필드, 클래스의 사용 범위를 지정할 수 있는 접근제한자 접근제한의 필요 굳이 멀리 가지 않더라도, 우리 집에 다른 사람이 무단으로 침입한다고 하면 불쾌할 것이다. 프로그램에서도 외부에서 접근하면 기능에 이상이 생기거나 잠재적인 오류를 만들 위협이 있을 때, 혹은 구태여 외부에 노출할 필요가 없을 때 접근을 차단할 필요가 있다. 이런 이유로 여러 언어에서 접근제한자를 두어 필요에 따라 사용할 수 있도록 했다. 접근제한자 종류 C#에서는 총 다섯 개의 접근제한자가 존재한다. public protected private internal protected internal 이중, internal과 protected internal은 외부 어셈블리와 관련된 접근제한자로 따로 다룬다. public 의미대로 ..
여러 타입으로 구성된 C#의 연산자 오버로딩 연산자 프로그램에서의 연산자는 우리가 생각하는 일반적인 사칙연산자를 포함해 다양한 연산자가 존재한다. C#에서는 다음 항목의 연산자가 제공되고 일부는 개발자가 상황에 맞춰 기능을 구성할 수 있도록 연산자 오버로딩을 제공한다. 단항 연산자 이항 연산자 인덱서 더보기 # 오버로드 불가능한 연산자 타입캐스팅 연산자나 복합 대입 연산자 등은 오버로드가 불가능하다. 기존의 연산자는 불가능하지만, 타입캐스팅 연산자는 사용자 정의 자료형에 대해 캐스팅 연산을 생성할 수 있고, 복합 대입 연산자의 경우 연관된 이항 연산자를 오버로딩 하는 것으로 암시적으로 오버로드 할 수 있다고 한다. https://docs.microsoft.com/ko-kr/dotnet/csharp/lan..
구조체와 클래스 데이터 전달 방식 구조체와 클래스를 배우기 위해선 필수적으로 사전에 알아야하는 것이 있다. 함수로 인수를 넘길 때 값으로 넘기는지 레퍼런스로 넘기는지이다. 값의 전달은 말 그대로 값을 복사해 전달하는 개념이다. A를 복사해 B를 만들었다. B에 영향을 주었을 때 A는 영향을 받지 않는다. 정도가 되겠다. static void valTest(int a) { System.Console.WriteLine(a); a = 5; System.Console.WriteLine(a); } static void refTest(ref int b) { System.Console.WriteLine(b); b = 5; System.Console.WriteLine(b); } static void Main(strin..
지역을 정해주는 개념으로, 혹은 이름 중복을 해결하기 위한 수단으로 보면 될 것 같다 이름 중복 프로그램 규모가 커지면 커질수록 소스코드에서 변수를 사용하는 규모도 함께 커진다. 단순히 변수의 규모만 커지는 것도 아니고 함수, 클래스 등 온갖 내용이 함께 나오니 점점 프로그램에서 사용할 수 있는 이름도 줄어들게 된다.[# 이미 사용된 이름은 사용할 수가 없으니까] 이 문제를 해결하기 위해선 각각의 이름을 구분지을 수 있는 방법이 있어야 한다. 여러 식당에서 같은 메뉴를 판매 하더라도 식당 이름이 다르면 사람들이 구분을 지을 수 있듯이, C#에서도 구분을 짓는데 도움이 되는 문법이 있다. 이름하여 namespace(네임스페이스)다. 네임스페이스 네임스페이스는 당장에 콘솔 프로그램을 작성할 때도 나오는데, ..
오류 발생에 대비하기 위한 예외 처리 구문 예외 처리 임의의 수를 0으로 나누면 devided by zero라는 오류를 내면서 프로그램이 터져버린다. 가장 간단한 오류 타입이기 때문에 if 구문으로 처리하는 편이 낫지만 통제할 수 없는 경우, 혹은 외부 요인에 의한 오류라면 try-catch-finally 구문을 이용해 처리한다. try-catch 대개 분기문 등을 이용해 오류가 나지 않도록 프로그램 내에서 처리를 하지만, 경우에 따라선 분기문 처리를 하지 못하기도, 처리되지 않은 문제가 있을 수도 있다. 때문에 예외 처리 문법이 존재하는데, 대표적으로 try-catch 구문이 있다. 이 구문은 크게 세 구역으로 나뉜다. try{ // commands } catch(Exception ex){ } fina..
for, foreach, while, do-while. C++과는 달리 기본적으로 foreach를 문법 차원에서 제공한다. for 반복문 for 반복문 사용법은 C++과 동일하다 for(int i = 0; i < 10; ++i){ // commands } 대개 횟수가 정해진 경우에 사용하는 반복문. foreach C++과는 달리 항목의 수에 맞게 하나씩 값을 뽑아서 사용할 수 있도록 만들어져 있다. 약간 C++의 이터레이터와 비슷하다. int[] arr = {1,2,3,4,5,6,7}; for(int val in arr){ System.Console.WriteLine("{0}", val); } 이 방식의 이점은, for 구문으로 작성할 때와는 달리 코드 자체가 굉장히 간편하다는 점이다. 단적인 예로 다중..
if 조건문과 switch 조건문 if-else 가장 대표적인 조건 분기문으로, 사용은 C++과 동일하다. 한가지 아쉬운 점이라면 안에 들어오는 expression은 무조건 bool 타입이어야 한다. int a = 10; if(a){} 이런식의 처리가 가능하지 않다는 소리다. 때문에 논리 연산자를 이용해 무조건 true/false로 값을 주어야한다. 이 점은 좀 더 명확히 하기 위해서인듯 키워드는 동일하게 if - else로 구성되어 있다. 일부 언어에서는 else if를 하나로 묶어버리는 경우가 있는데 C#의 경우엔 여전히 C/C++을 따라 if와 else로만 구성한다. switch C++에서 진일보했다고 생각한다. 단순히 상수로만 구분하는 것이 아니라 문자열로도 판단이 가능하다.[# C++에선 문자열..
null 값을 가질 수 있는 nullable 타입 자료형 자료형 일반적으로 정수 자료형은 null이란 값을 가질 수 없다. null이란 값이 존재하지 않는다 라는 뜻으로, 흔히 C에서의 (void*)0 과는 다르다.[# C++을 제외한 것은 nullptr이라 불리는 새로운, null을 의미하는 리터럴이 추가되었기 때문이다.] C#에서 nullable 타입은 컴파일시 Nullable로 변환된다.[# C++의 템플릿 클래스를 생각하면 쉽겠다.] 실제 사용은 자료형 뒤에 '?'를 붙여 사용한다. int a = null; // 오류 int? b = null; // nullable 타입으로 선언했기 때문에 가능 null 체크 변수가 null을 가졌는지 확인하기 위해서는 아래와 같은 방법을 이용할 수 있다. int..
특정 상수를 의미를 가지는 문자열로 표현할 수 있도록 제공하는 문법 열거형 프로그래밍을 하다보면 특정 값이 들어왔을 때 특정 동작을 수행하는 함수나 객체를 만드는 경우가 허다하다. 이럴 때 특정 작업을 수행하기 위한 입력값이 숫자로 표현되었을 때, 그리고 그런 숫자가 많을 때는 숫자 하나를 잘못 작성해 semantic 오류[# 논리적 오류로, 프로그래밍 문법 자체는 맞지만 기획 의도와 맞지 않는 행동을 수행하는 문제를 시맨틱 에러라고 부른다]를 부른다. 위치 이런 문제는 특정 값이 가지는 의미를 바로 알 수 있도록 하는 것이 문제 해결의 실마리가 될 수 있는데, 이 때 열거형이 큰 도움이 된다. 일단 열거형은 아래와 같은 상황에 선언이 가능하다. 클래스 및 네임스페이스 안쪽 바로 윗 스코프가 메서드, 함..