분류 전체보기 212

[C#] 코딩의기술(실전편) - 2.11 TryParse에서 결과를 보지 않는 경우

TryParse 메서드 String 문자열을 데이터 형으로 변환 합니다. 반환 값은 변환이 성공했는지 아니면 실패했는지를 나타냅니다. 변환 성공 : True 반환 변환 실패 : False 반환 변환에 실패하면 해당 데이터 형의 기본값을 TryParse()의 두번째 매개변수에 초기화합니다. 예제에서 r2에 데이터 형의 기본값으로 초기화 사용예제 static void Main(string[] args) { var s1 = "2021/01/01 16:44:03"; var s2 = "bad string example."; DateTime r1, r2; var b1 = DateTime.TryParse(s1, out r1); var b2 = DateTime.TryParse(s2, out r2); Console.Wr..

[C#] 코딩의기술(실전편) - 2.9 Goto 구문

goto 구문 goto 문은 레이블이 지정된 곳으로 직접 프로그램 컨트롤을 전송합니다. 일반적으로 switch 문에서 switch-case 레이블 또는 기본 레이블로 컨트롤을 전송하는 데 사용됩니다. goto 사용 예제1 switch문에서 사용 예제를 확인해봅시다. n 변수에 2를 입력받으면 switch문의 case2의 코드를 실행 후 goto문을 만나게 되면서 case 1으로 이동하여 코드를 수행하게됩니다. 3을 입력받으면 case3 -> case2 -> case1 조건으로 이동하여 코드를 수행하게됩니다.goto 사용 예제2 static void Main(string[] args) { string s = Console.ReadLine(); int n = int.Parse(s); int cost = 0;..

[C#] 코딩의기술(실전편) - 2.7 포인터

포인터 (Pointer) C언어에서 포인터(pointer)란 메모리의 주소값을 저장하는 변수이며, 포인터 변수라고도 부릅니다. char형 변수가 문자를 저장하고, int형 변수가 정수를 저장하는 것처럼 포인터는 주소값을 저장합니다. 포인터를 사용하여 허가된 모든 메모리(스택) 영역에 접근할 수 있습니다. 포인터 사용에 대한 오해 - 포인터를 사용하면 성능이 향상된다.(속도가 빨라진다.) - 프로그래밍을 하려면 포인터는 넘어야 할 산이다. - 포인터를 숙지해야 진정한 프로그래머다. 포인터 사용에 대한 오해 - 반론 컴파일러가 최적화 기술이 발달하면서 성능 향상에 대한 차이가 사라졌습니다. 포인터를 잘못 사용하여 메모리 영역을 잘못 건드리게 되면 프로그램이나 시스템에 치명적인 손상을 입힐 수 있습니다. 포인..

[C#] 코딩의기술(실전편) - 2.6 unsafe

unsafe 컨텍스트 메서드, 형, 코드 블록은 unsafe로 정의할 수 있습니다. unsafe 코드로 어플리케이션 성능을 끌어올릴 수 있다. unsafe 코드는 포인터를 사용해야 하는 네이티브 함수를 호출할 때 필요합니다. unsafe 코드를 사용하면 보안성과 안정성 측면의 위험도가 커집니다. C#에서 unsafe 코드를 컴파일하려면 빌드 속성 설정이 필요합니다. unsafe 예제 C# 에서는 일반적으로 포인터를 사용하지 않습니다. 간혹 C++ 에서 사용하던 Class를 가져오면서 포인터를 사용해야 하는 경우 unsafe를 사용합니다. class UnsafeTEST { unsafe static void SquarePtrParam(int* p) { *p *= *p; } unsafe static void ..

[C#] 코딩의기술(실전편) - 2.5 Checked 키워드

Checked 키워드 : 정수 형식 산술 연산 및 변환에 대한 오버플로우 검사를 명시적으로 사용하도록 설정하는 데 사용됩니다. UnChecked 키워드 :정수 형식 산술 연산 및 변환에 대한 오버플로 검사를 비활성화하는 데 사용됩니다. 오버플로우 예제 static void Main(string[] args) { var num = 1234; for (int i = 0; i < 21; i++) { num *= 2; Console.WriteLine(num); } for (int i = 0; i < 21; i++) { num /= 2; Console.WriteLine(num); } Console.WriteLine(num); } 실행결과 오버플로우 발생하여 '1293942784 * 2 = -1707081728'이..

[C#] 코딩의기술(실전편) - 2.3 Format 메서드

1.인수의 불일치로 발생하는 예외 다음 예제코드를 봅시다. 서식 지정 문자열에서 사용하는 인수의 개수와 실제 인수의 개수가 일치하는지는 자동으로 확인하지 않습니다. 컴파일 오류는 발생하지 않지만 컴파일 시 예외가 발생합니다. 서식 지정은 {0}~{9} 까지 10개가 있지만, 인수에 지정한 변수는 9개 이므로 예외 발생합니다. static void Main(string[] args) { var a = "A"; var b = "B"; var c = "C"; var d = "D"; var e = "E"; var f = "F"; var g = "G"; var h = "H"; var i = "I"; var j = "J"; Console.WriteLine("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}",..

[C#] 코딩의기술(실전편) - 2.2 변화하는 조건

오류 발생 가능한 코드 코드만 보면 오류가 없어보이는 코드입니다. DateTime birthday = new DateTime(2016,1,1); if(birthday == DateTime.Today) { var client = new WebClient(); var message = client.DownloadString("http://..."); Console.WriteLine(message); Console.WriteLine("{0:yyyy/MM/dd}, 생일 축하.", DateTime.Today); } 아래 상황에서 날짜 확인 시점과 출력할 때 시점이 달라서 오류가 발생할 수 있습니다. 다른 서버에 접속하는 경우 서버가 느리면 시차가 발생하여 시간 차이가 수십 초가 발생하여 오류 발생할 수 있습니다...

[C#] 코딩의기술(실전편) - 1.7 예외처리

1.예외처리 이메일을 파일로 저장한 후에 다시 읽는 시스템이 있다고 가정해봅시다. 작성한 파일을 확실하게 읽을 수 있을까요? 만약 메일이 바이러스에 걸렸다면 백신이 다른 곳으로 격리시키는 상황이 왔다면, 읽으려는 파일이 원래 읽으려는 위치에 없을 수 있습니다. 이런 경우 격리시킨 파일 이외에 나머지 파일은 이어서 읽을 수 있어야합니다. 2.예외가 발생하는 코드 다음은 존재하지 않는 파일을 읽다가 예외가 발생하는 코드입니다. b.txt파일이 작성된 적이 없어서 파일을 찾지 못해 예외가 발생합니다. static void Main(string[] args) { File.WriteAllText("a.txt", "hello A"); File.WriteAllText("c.txt", "hello C"); Consol..

[C#] 코딩의기술(실전편) - 1.6 강제 종료 처리

Flush()와 Close() Flush() : 이 스트림의 버퍼를 지우고 버퍼링된 모든 데이터가 파일에 쓰여지도록 합니다. 파일에 데이터가 기록될 예정이지만, 아직 기록되지 않은 데이터를 저장합니다. Close() : Flush()의 기능 + '파일 닫기' 기능을 추가합니다. 사용예제 using System; using System.IO; using System.Threading; using System.Threading.Tasks; class Solution { static void Main(string[] args) { String fileName= "test.txt"; var writer = new StreamWriter(Path.Combine(Environment.GetFolderPath(Env..

[C#] 코딩의기술(실전편) - 1.5 비동기 처리

비동기 처리란? (Asynchronous) 특정 로직의 실행이 끝날때까지 기다려주지 않고 나머지 코드를 먼저 실행하는것을 비동기 처리라고 합니다. 비동기처리가 필요한 이유는 서버로 데이터를 요청했을 때, 서버가 언제 그 요청에 대한 응답을 줄지 모르는데 마냥 기다릴순 없기 때문입니다. 장점 결과가 반환될 때까지 다른 작업을 할 수 있으므로 효율적으로 자원을 사용할 수 있습니다. 비동기 메서드의 경우 메소드 호출만 할 뿐 그 결과를 기다리지 않습니다. 여러가지 일을 동시에 처리할 수 있습니다. 단점 동기 방식(Synchronous)에 비해 코딩하기 복잡합니다. 결과 값 반환까지 시간이 더 소요 될 수 있습니다. 비동기 코드 task를 이용한 비동기 코드입니다. 사실 다음 예제 코드에 ReadToEndAsy..