일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 이지스퍼블리싱
- Visual Studio
- 프로그래밍
- Kotlin
- 지식나눔강좌
- 리뷰
- doit코틀린프로그래밍
- Tips강좌
- tipssoft
- Win32
- 김성엽
- 알고리즘
- Programming
- Desktop
- 포인터
- 배열
- 연산자
- 함수
- 문법
- c++
- Direct2D
- Windows
- Tips프로그래밍강좌
- VS ERROR
- c
- CS
- 백준
- Javascript
- c#
- 티스토리
- Yesterday
- Today
- Total
목록All (383)
F.R.I.D.A.Y.
임의 위치에 데이터를 추가/삭제하는 것이 용이한 연결리스트 생각해보자. 배열에서 임의 위치의 데이터를 삭제하고 빈 공간이 없도록 구성하려면 어떻게 해야할까? 만일 값 3을 삭제한다고 한다면 값만 사라지고 비어있는 공간이 존재한다. 이 빈공간을 채우는 방법은 크게 두가지이다. 우축의 값을 빈공간과 교체하거나 빈공간 오른쪽의 값들을 왼쪽으로 밀어서 빈공간을 오른쪽 끝으로 밀어버리기 첫 번째 방식의 경우, 마지막 값이 위치한 공간만 안다면 손쉽게 해결할 수 있지만 값의 순서가 바뀌어버리는 문제가 있다.[# 마지막 값이 위치한 공간도 모른다면 시간 복잡도는 O(n)에 수렴할 것이다. 일일이 선형으로 다 돌면서 찾아야하니까] 그렇다고 두 번째 방식을 이용하자니 속도가 무조건 O(n)에 수렴한다. 일일이 값을 좌측..
데이터 검색시 시간 복잡도가 상수라고 알려진 해시맵 데이터를 저장하는 하나의 방법으로 의 쌍을 이룬다. 특정 key를 기반으로 value를 저장했을때, 저장한 value를 찾기 위해서는 key를 기반으로 검색한다. 해시맵을 알기 위해서는 해시함수를 필연적으로 알아야한다. 해시함수 어떤 정보를 수학적인 연산처리에 의해 고유한 값을 만들어내는 함수다. 즉, A라는 값을 해시함수에 넣었을 때 1이란 값이 나오고 B라는 값을 해시함수에 넣었을 때 2란 값이 나오는 방식이다. 위 예시에서 순차적으로 값을 내어주었기 때문에 혼동할 수 있는데, 해시함수는 아래의 조건을 만족해야 안정적인 함수이다. 눈사태효과를 가진다.[# 들어오는 값이 아주 조금만 변해도 완전히 다른 값이 산출된다.] 입력에는 하나의 출력만 존재한다..
메서드, 필드, 클래스의 사용 범위를 지정할 수 있는 접근제한자 접근제한의 필요 굳이 멀리 가지 않더라도, 우리 집에 다른 사람이 무단으로 침입한다고 하면 불쾌할 것이다. 프로그램에서도 외부에서 접근하면 기능에 이상이 생기거나 잠재적인 오류를 만들 위협이 있을 때, 혹은 구태여 외부에 노출할 필요가 없을 때 접근을 차단할 필요가 있다. 이런 이유로 여러 언어에서 접근제한자를 두어 필요에 따라 사용할 수 있도록 했다. 접근제한자 종류 C#에서는 총 다섯 개의 접근제한자가 존재한다. public protected private internal protected internal 이중, internal과 protected internal은 외부 어셈블리와 관련된 접근제한자로 따로 다룬다. public 의미대로 ..
여러 타입으로 구성된 C#의 연산자 오버로딩 연산자 프로그램에서의 연산자는 우리가 생각하는 일반적인 사칙연산자를 포함해 다양한 연산자가 존재한다. C#에서는 다음 항목의 연산자가 제공되고 일부는 개발자가 상황에 맞춰 기능을 구성할 수 있도록 연산자 오버로딩을 제공한다. 단항 연산자 이항 연산자 인덱서 더보기 # 오버로드 불가능한 연산자 타입캐스팅 연산자나 복합 대입 연산자 등은 오버로드가 불가능하다. 기존의 연산자는 불가능하지만, 타입캐스팅 연산자는 사용자 정의 자료형에 대해 캐스팅 연산을 생성할 수 있고, 복합 대입 연산자의 경우 연관된 이항 연산자를 오버로딩 하는 것으로 암시적으로 오버로드 할 수 있다고 한다. https://docs.microsoft.com/ko-kr/dotnet/csharp/lan..
일반 함수와 클래스 메서드 함수 명령 단위라고 보면 될 것 같다. 선언 C++과 전혀 다를 것이 없다. 반환형, 함수명, 매개변수 리스트 순으로 작성한다. static void Test(){ } static을 붙인 이유라 함은, static을 붙이지 않으면 객체를 만들기 전까지 제대로 된 사용을 할 수 없다. 클래스 기반인 C#에선 C++과 달리 일반 함수로 사용하기 위해선 static 키워드를 붙여 이 함수가 메서드로 작성되지 않았음을 알려야 한다.[# 그렇다고 저렇게 작성한다고 해서 무조건 메서드가 아니란 소리가 아니다. 일반 함수처럼 사용하겠다는 뜻이지 메서드 중에서도 static 키워드를 붙인 메서드가 분명히 존재하고 또 만들 수 있다. 실질적으로 위에 보인 예시도 클래스 안에 들어가면 메서드의 ..
구조체와 클래스 데이터 전달 방식 구조체와 클래스를 배우기 위해선 필수적으로 사전에 알아야하는 것이 있다. 함수로 인수를 넘길 때 값으로 넘기는지 레퍼런스로 넘기는지이다. 값의 전달은 말 그대로 값을 복사해 전달하는 개념이다. 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++에선 문자열..