c#187 [C#]내부 예외 처리(Inner Exception) 내부 예외(Inner Exception) C#의 Exception 클래스의 InnerException은 예외 클래스의 프로퍼티입니다. InnerException 프로퍼티는 현재 예외를 발생시킨 예외를 반환합니다. InnerException 프로퍼티에 대해 설명이 부족한 이유는 글로 설명하면, 오히려 이해가 안 될 수 있으므로 다음 예제를 통해 InnerException 프로퍼티가 어떻게 동작하는지 설명합니다. 중첩된 try~catch문 InnerException 프로퍼티를 설명하기 전에 중첩된 try~catch문에 대해 알아봅시다. 예외를 처리하는 try~catch문은 중첩될 수 있습니다. 다음 코드처럼 try문 내부에 또 다른 try~catch문이 존재할 수 있다는 의미입니다. try // 외부 try.. C# 2022. 6. 26. [C#]throw문, 사용자 정의 예외 C#의 예외 유형 C#에서 예외는 다음과 같이 두 가지 유형으로 분류됩니다. 1. 시스템 예외(System exception) 2. 애플리케이션 예외(Application exception) 시스템 예외 시스템 예외란 프로그램 실행 중 사전에 정의된 조건에 인해 예외 관리자가 암시적으로 발생시키는 것을 말합니다. 예를 들어, 배열의 범위를 벗어나는 IndexOutOfRangeException, null로 초기화된 객체를 접근하는 NullReferenceException, DataBase에서 에러가 발생하는 SQLException 등 BCL(Base Class Libraries)에 정의된 예외를 말합니다. 애플리케이션 예외 어플리케이션애플리케이션 예외는 프로그래머가 작성한 소스코드를 기반으로 프로그램에서 .. C# 2022. 6. 26. [C#]finally 키워드, finally문 finally 키워드 finally 키워드는 try문에서 예외 발생 여부 관계없이 그리고 catch문에서 예외 처리 여부 상관없이 finally문 블록 안에 작성한 소스코드를 실행합니다. 즉, 예외 여부 상관없이 항상 실행됩니다. finally 키워드 구문 finally문은 두 가지 방법으로 작성할 수 있습니다. 첫 번째 방법은 try-catch-finally입니다. 다음 구문은 try문에서 예외가 발생하고 catch문에서 예외 처리 후 finally문을 실행합니다. try { // 예외가 발생할 수 있는 소스코드를 작성합니다. } catch (Exception e) { // 예외를 처리하는 소스코드를 작성합니다. } finally { // 예외 발생 여부와 상관없이 항상 실행되는 소스코드를 작성합니다... C# 2022. 6. 26. [C#]다중 catch문, 다중 예외 처리 이번 포스팅은 C#에서 다중 catch문을 구현하는 방법을 소개합니다. 다중 catch문 구현 방법 C#에서는 try문에 대해 여러 catch문을 작성할 수 있습니다. 예외는 동시에 발생하지 않으므로 여러 catch문을 작성하면 예외를 처리하는 하나의 catch문만 실행되고 나머지 catch문은 실행되지 않습니다. 다음 예제는 try문에 대해 여러 catch문을 구현하였습니다. 첫 번째 catch문은 DivideByZeroException 클래스를 매개변수로 사용하고 두 번째 catch문은 FormatException 클래스를 매개변수로 사용합니다. class Program { static void Main(string[] args) { int a, b, c; try { a = int.Parse(Cons.. C# 2022. 6. 26. [C#]예외 처리(Exception Handling) C#의 에러 종류 .NET Framework에서 소스코드를 작성하고 프로그램을 실행할 때, 컴파일 에러 또는 런타임 에러가 발생할 수 있습니다. 컴파일 에러 소스코드를 컴파일 시 발생하는 에러를 컴파일 에러 또는 컴파일 타임 에러라고 말합니다. 컴파일 에러는 주로 구문 오류로 발생합니다. 큰 따옴표 및 세미콜론을 누락하거나, 변수에 타입과 다른 값을 할당하거나, 키워드 철자를 잘못 입력하거나, 추상 클래스 및 인터페이스에 대한 객체를 생성하려고 시도하는 등 다양한 이유로 컴파일 에러가 발생합니다. 컴파일 에러는 프로그램이 만들어지기 전에 발생하며, Visual Studio와 같은 개발 툴에서 에러 내용을 확인할 수 있으므로 프로그램 실행 전에 수정할 수 있습니다. 런타임 에러 프로그램 실행 시 발생하는 .. C# 2022. 6. 26. [C#]타입 변환 및 타입 캐스팅(Type Conversion and Type Casting) 타입 변환 및 타입 캐스팅 타입 변환 또는 타입 캐스팅은 데이터 타입을 다른 데이터 타입으로 변경하는 작업이라고 말할 수 있습니다. 타입 변환은 두 데이터 타입이 서로 호환될 경우에만 가능하며, 호환되지 않은 경우 InvalidCastException 예외가 발생합니다. 변수는 선언 후 다른 데이터 타입으로 다시 선언할 수 없습니다. 따라서 변수의 타입과 다른 타입의 값을 변수에 할당할 수 없습니다. 예를 들어 다음 예제를 살펴봅시다. C#에서 int 타입으로 선언된 변수는 정수형 값만 가질 수 있습니다. 문자열 값은 int 타입에 호환되는 값이 아니므로 다음과 같이 오류가 발생합니다. class Program { static void Main(string[] args) { int num = 10; nu.. C# 2022. 6. 21. [C#]스레드 Join 메서드(Join Method of Thread) Join() 메서드의 필요성 Join() 메서드의 필요성을 이해하기 위해 다음 예제를 살펴봅시다. 다음 예제는 Main() 문에서 세 개의 스레드 객체를 실행합니다. class Program { public static void ThreadMethod001() { Console.WriteLine("ThreadMethod001() 메서드 호출"); Thread.Sleep(5000); Console.WriteLine("ThreadMethod001() 메서드 종료"); } public static void ThreadMethod002() { Console.WriteLine("ThreadMethod002() 메서드 호출"); Thread.Sleep(3000); Console.WriteLine("ThreadMet.. C# 2022. 6. 15. [C#]스레드 상태 확인 IsAlive 프로퍼티 IsAlive 프로퍼티는 현재 스레드의 실행 상태를 불리언 값으로 반환합니다. 스레드가 시작되었고 종료되거나 중단되지 않은 경우 true를 반환하고 그렇지 않은 경우 false를 반환합니다. 즉, 스레드가 실행 중이면 true, 그렇지 않으면 false입니다. ThreadState 프로퍼티 ThreadState 프로퍼티를 사용하여 현재 스레드의 실행 상태를 확인할 수 있습니다. 불리언 값을 반환하는 IsAlive 프로퍼티와 달리 ThreadState프로퍼티는 ThreadState 열거형을 반환합니다. 따라서, ThreadState를 사용하기 전에 C#의 스레드 생명주기를 이해할 필요가 있습니다.(프로그래밍 언어마다 스레드 생명주기가 다릅니다.) 이번 포스팅에서는 간략한 Thread.. C# 2022. 6. 6. [C#]파일 존재 여부 확인 Exists() 메서드 C#에서 파일이 존재하는지 확인할 수 있는 몇 가지 방법이 존재합니다. 그중 가장 많이 사용하는 방법으로 System.IO 네임스페이스에 존재하는 File 클래스의 Exists() 메서드를 사용하는 것입니다. if(File.Exists(file_path)) { // 파일이 존재하는 경우 } else { // 파일이 존재하지 않는 경우 } Exists() 메서드는 string 타입의 파일 경로를 매개 변수로 사용합니다. 파일이 존재하면 true를 반환하고 파일이 없거나 접근할 수 있는 권한이 없으면 false를 반환합니다. 경로가 유효하지 않거나 null 및 문자열 길이가 0인 경우에도 false를 반환합니다. Exists() 메서드 예제 다음은 Exists() 메서드 예제에서 사용.. C# 2022. 6. 6. [C#]base 키워드 base 키워드 파생 클래스(혹은 자식 클래스)에서 기본 클래스(혹은 부모 클래스)의 생성자, 필드, 메서드를 접근해야 하는 경우 base 키워드를 사용하여 접근할 수 있습니다. base 키워드는 메서드, 프로퍼티, 생성자 내에서만 사용할 수 있으며, static으로 선언된 정적 메서드에서는 사용할 수 없습니다. base 키워드는 기본 클래스와 파생 클래스에 동일한 이름의 필드가 존재하는 경우 유용하게 사용할 수 있습니다. base 키워드의 유용성 기본 클래스와 파생 클래스에 동일한 이름의 필드가 존재하는 경우 기본 클래스의 필드를 접근하는지 파생 클래스의 필드를 접근하는지 구분할 수 있습니다. 부모 클래스에서 작성한 소스코드를 복제할 필요가 없습니다. 기본 클래스의 필드 및 메서드 접근 다음 예제는 파.. C# 2022. 6. 5. [C#]잠금 및 Lock 키워드 멀티스레딩에서 공유 리소스 접근 멀티스레드로 구현된 애플리케이션에서 여러 개의 스레드 객체가 공유 리소스를 접근하는 것은 중요한 작업입니다. 예를 들어 세 개의 스레드 객체가 존재하고 abcd.txt 파일을 접근한다고 가정합니다. Thread1은 abcd.txt 파일에 데이터를 작성합니다.(Write) Thread2는 abcd.txt 파일의 데이터를 읽습니다.(Read) Thread3는 abcd.txt 파일을 제거합니다.(Delete) 세 개의 스레드 객체가 동일한 시간에 abcd.txt 파일을 접근하여 각자의 작업을 수행하면, Thread1이 abcd.txt 파일에 데이터를 작성하는 도중 Thread3가 abcd.txt 파일을 제거했으므로 애플리케이션이 제대로 동작하지 않을 수 있습니다. 이러한 문제가.. C# 2022. 6. 5. [C#]스레드 동기화(Thread Synchronization) 스레드 동기화(Thread Synchronization) 데이터 불일치는 두 개 이상의 스레드가 메모리 내부의 데이터를 동시에 접근할 때 발생합니다. 예를 들어 두 개의 스레드가 abcd.txt라는 텍스트 파일을 접근한다고 가정합니다. 스레드1은 abcd.txt 파일에 데이터를 작성(Write)하고 있으며, 스레드2는 abcd.txt 파일의 데이터를 읽는(Read) 중입니다. 작성되고 있는 데이터가 읽는 중에 반영되지 않으므로 데이터 불일치가 발생합니다. 스레드 동기화는 위 예시에서 언급한 abcd.txt 파일이라던지 메모리 내부의 데이터를 특정 스레드가 사용하고 있으면 다른 스레드는 접근할 수 없도록 하는 메커니즘입니다. 스레드1이 abcd.txt 파일에 데이터를 작성하고 있으면, 스레드2는 스레드1의.. C# 2022. 6. 5. 이전 1 ··· 5 6 7 8 9 10 11 ··· 16 다음