일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- leetcode
- TypeScript
- vuetify
- C#
- BOJ
- Python
- 보안
- var
- generic
- condition
- docker
- AI
- machine learning
- property
- 앙상블
- C++
- dotenv
- npm
- vue.js
- loop
- Clone
- JavaScript
- scss
- git
- type
- webpack
- bash
- VUE
- security
- nginx
- Today
- Total
목록Development/C# (11)
ice rabbit programming
많은 언어에서 예외 처리를 지원하고, C# 또한 마찬가지이다. 예외 처리가 나온 흐름 어느 정도 익숙해진 개발자라면 try-catch를 이용한 예외 처리가 이미 낯익을 것이다. 그래도 다른 처리 방법과, try-catch를 사용했을 때의 이점을 한 번 살펴보도록 하겠다. 메소드가 실패했음을 전달하는 것은, 3가지 정도 방법을 생각해볼 수 있다. 반환 값으로 fail을 전달한다. 예를 들어 실패하면 -1을 return하기로 하는 방식이다. 하지만 이는 실패 값이 연산의 결과인지, fail인지 모호할 수도 있고 오류에 대한 자세한 정보가 없다. 또한 -1이 fail이라는 로컬 룰을 모든 개발자가 숙지하고 있어야 한다. 로직적으로 봤을 때에는 정상적인 flow와(try 구문) 오류 처리 flow가(catch)..
잡담 글에서 한 번 언급했던 것처럼, 개발 스택이 C# 클라이언트 프로그래밍에서 Python 서버 프로그래밍으로 넘어가면서 C#은 6월 말 이후로 다루지 않고 있다. 사실상 작년까지는 C# 이름만 알았지 다루어본적도 없어서 이번에 반 년 정도 다룬 걸로는 뭔가 배웠다고도 하기 쉽지 않지만, 기왕 수업도 듣고 현업 업무도 조금이나마 해보았으니 정리해둔 내용은 마저 정리하려고 한다. (C# 포스팅을 하지 않은 사이에 티스토리 코드블럭 Hylighting에 C#이 생겼다!) 이전에 Generic까지 했는데, 이번 글에서는 Delegate를 보려고 한다. Delegate의 기초 개념 Delegate는 쉽게 말해 메소드(함수)의 호출 정보/시그니쳐/주소를 저장하는 타입이다. C++에서의 함수 포인터 개념과 비슷하..
이번 글에서는 아주 중요하고 또 자주 쓰이는 개념인 Generic에 대해서 다루어보려고 한다. C++의 Template, Java의 Generic과 같은 개념으로 메소드나 클래스를 여러 타입에 대해서 똑같이 쓸 수 있는 것이다. 다음 예시로 필요성을 한 번 보자. public double SumDouble(double d1, double d2) { return d1+d2; } public int SumInt(int i1, int i2) { return i1+i2; } 만약 Generic을 사용하지 않고 double의 합과 int의 합을 구하고 싶다면 메소드 오버로딩을 통해서 구현했을 것이다. 틀린 구현은 아니지만 작성하기 번거로우며, 같은 동작을 하는 메소드가 두 개 존재하여 가독성을 해치고 혼란을 줄 ..
이번에는 C# 8.0에서 새로 나온 최신 문법인 Index 타입과 Range에 대해서 짧게 작성해보려 한다. Index라는 타입과 Range라는 타입이 새로 생성 되었는데, 다음과 같이 쓴다. arr[^2] // 뒤에서부터 2칸(단, 1부터 시작) Index i = new Index(0, false); // index와 방향 지정 s1[2..7] // 2이상 7미만 Range r = new Range(2,4); // 2이상 4 미만 Index 타입은 이전 글의 Indexer 구현 시에 사용한다면 객체를 배열처럼 사용할 수 있다. 다만 Length나 Count Property를 생성하면 int로 indexer를 만들어도 가능하긴 하다. range 타입은 Range(2,4), Range(2..4)등 모두 가..
Property 약 4개월간 C#을 써 보면서 여지껏 썼던 언어들과의 가장 큰 차이점이자 편리하다고 생각되는 것이 바로 이제 얘기할 Property(속성)이다. 클래스 내부의 변수는 Field(필드), 함수는 Method(메소드)라고 부르는데 C#에서는 Property가 추가로 존재한다. C++이나 Java를 접해보았다면 접근 지정자에 대해서 많이 들어봤을 것이다. 객체 지향 언어에서는 캡슐화를 통한 정보 은닉을 중요시하기 때문에, 외부에서는 꼭 필요한 경우에만 접근 가능하게 하고, 그러한 접근 또한 직접적으로 변수에 접근이 아니라 get/set 등의 함수를 통해서 하도록 한다. C#도 객체 지향 언어이기 때문에, 기본적으로 필드는 private으로 해두고 Property나 메소드를 이용해 접근한다. 즉..
이번 글에서는 Method, 메소드에 대해서 알아보자. C/C++에서 Function, 함수라고 부르는 것과 동일한 개념인데 C#에서는 명칭을 Method라고 한다. 실제 사용하는 분들께 들어보면 함수라는 용어와 메소드라는 용어를 혼용하는 것 같다. 보통은 같은 것을 가리킨다. 이 글은 C# 내용이므로 메소드 용어를 사용하겠다. 메소드는 타 언어와 유사하게 반환 타입, 이름, 인자, 내용으로 구성된다. public int Sum(int num1, int num2) { return num1+num2; } 일반적인 메소드(함수)에 대한 내용은 생략하도록 하고, C#의 메소드에 대해서 좀 더 알아보자. ref, out 인자에서 ref라는 키워드를 사용할 수 있다. Value Type에서 ref 키워드를 사용하..
자료형까지 다루고 텀이 살짝 길었다. 오늘은 Array, 배열에 대해 다루려고 한다. 배열은 여느 프로그래밍 언어에 있는 것으로, [같은 타입, 연속된 메모리]라는 특징을 가진다. 연속된 메모리라는 부분 때문에 C/C++을 하신 분들은 배열과 포인터의 관계에 대해서 많이 학습을 하셨을 것이다. C#에서의 특징은 지난 글에서 설명한 것처럼 Reference Type이라는 것과, 모든 배열은 [] - Array - Object의 단계로 상속받는다는 점이다. int[] arr = new int[5]; // 기본적인 1차원 배열 int[] arr2 = {1,2,3,4,5}; // 이렇게 해도 5칸의 1차원 배열 int[,] arr3 = new int[3,2] // 다차원 배열 int[][] arr4 = new ..
지난 글에 이어서 오늘은 Casting과 Boxing/Unboxing에 대해 정리하려 한다. Casting - 묵시적, 명시적 다른 언어를 다루어보신 분들이라면 Casting, 즉 형변환의 개념은 익숙할 것이다. 형변환에는 묵시적(암시적) 형변환과 명시적 형변환이 있다. 말 그대로 명시적은 프로그래머가 코드 상에 적어주는 것이고, 묵시적은 그렇지 않다. int number = 5; double pi = 3.14; number = pi; // 묵시적 형변환, 데이터 손실 발생!! 가장 전형적인 예제는 double을 int에 넣는 예제일 것이다. 위 코드에서는 double 변수를 int에 묵시적으로 넣고 있고, 이 때 데이터 손실이 발생한다. C++에서는 묵시적 형변환 시에 데이터의 손실이 있든 없든, 허용..