C#/C# 교과서

[C# 교과서] 26~27. 예외 처리, 컬렉션 사용하기

서니션 2023. 1. 3. 13:56
728x90
반응형

try~catch~finally 구문

try
{
	// 예외가 발생할 만한 코드 작성
}
catch
{
	// 예외가 발생할 때 처리해야 할 코드 블록
}
finally
{
	// 예외가 발생하거나 정상일 때 모두 처리해야 할 코드 블록
}

Exception 클래스로 예외처리

닷넷에서 모든 예외에 대해 처리할 주요 기능을 담아 놓은 클래스가 Exception

Exception 클래스의 주요 속성에는 Message가 있는데, 현재 예외 설명을 출력


FormatException 클래스 형식의 예외받아 처리

Exception 클래스와 마찬가지로 FormatException 같은 클래스들은 각각 고유의 예외가 발생했을 때 해당 예외 정보를 담고 있음

using System;
using static System.Console;

namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            string inputNumber="3.14";
            int number=0;

            try
            {
                number = Convert.ToInt32(inputNumber);
                WriteLine($"입력한 값 : {number}");
            }

            catch (FormatException fe)
            {
                WriteLine($"에러 발생 : {fe.Message}");
                WriteLine($"{inputNumber}는 정수여야 합니다.");
            }
        }
    }
}

throw 구문으로 직접 예외 발생

throw 구문은 이름에서도 알 수 있듯이 무엇인가를 던짐

→ 인위적으로 예외(에러)를 발생시키는 것을 의미, 무조건 특정 예외 발생

using System;
using static System.Console;

namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            Console.WriteLine("[1] 시작");

            try
            {
                Console.WriteLine("[2] 실행");
                throw new Exception(); // 무작정 에러 발생
            }

            finally
            {
                Console.WriteLine("[3] 종료");
            }
        }
    }
}

배열과 컬렉션

배열 : 일반적으로 숫자처럼 간단한 데이터 형식을 저장

리스트 : 간단한 데이터 형식을 포함한 개체들을 저장

사전 : 키와 값의 쌍으로 관리되는 개체들을 저장

 

일반적으로 기본형 그룹을 배열로 보고, 새로운 타입(클래스)의 그룹을 컬렉션으로 비교하기도 함

 

배열 : 정수형, 문자열 등 집합을 나타냄

컬렉션 : 개체의 집합을 나타냄. 리스트, 집합, 맵, 사전도 컬렉션과 같은 개념으로 사용

 

배열은 크기가 고정되어 있어 새로운 데이터를 추가 할 수 없음. 이러한 단점을 제거한 것이 바로 컬렉션.

  • 컬렉션은 반복하여 사용할 수 있는 형식 안정성으로 크기를 동적으로 변경할 수 있는 장점
  • 컬렉션은 데이터를 조회, 정렬, 중복 제거, 이름과 값을 쌍으로 관리하는 등 여러 장점
  • Stack, Queue, ArrayList 클래스 제공

컬렉션 관련 클래스들을 사용하려면, 먼저 클래스의 인스턴스를 선언해야 함


리스트 출력 구문

리스트에 담긴 모든 요소를 사용할 때는 foreach문을 쓰고, 필요한 영역의 리스트를 사용할 때는 for문을 써서 리스트를 출력


Array 클래스

Array 클래스는 배열을 매개변수로 받아 정렬, 역순, 변환 등 작업을 진행

  • Array.Sort() : 배열을 정렬
  • Array.Reverse() : 배열을 역순으로 바꿈
  • Array.ConvertAll() : 배열을 특정 값으로 변환

Stack 클래스

Stack 클래스는 LIFO(후입선출) 특성을 보이는데, 나중에 들어온 데이터가 먼저 출력되는 자료 구조

Stsck 클래스의 주요 속성 및 메서드

  • Count : 스택에 있는 데이터 개수 조회
  • Push() : 스택에 데이터 저장
  • Pop() : 스택에서 데이터 꺼내기

오버플로 : 스택이 꽉 차는 것

언더플로 : 스택이 비어 있는 것

using System;
using System.Collections;

namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            Stack stack = new Stack(); // Stack 클래스의 인스턴스 생성

            stack.Push("1");
            stack.Push("2");
            stack.Push("3");

            Console.WriteLine(stack.Pop()); // 데이터 출력 "3"
            Console.WriteLine(stack.Pop()); // 데이터 출력 "2"
            Console.WriteLine(stack.Pop()); // 데이터 출력 "1"

            // 비어 있는 스택에서 Pop() 요청하면 에러
            try
            {
                Console.WriteLine(stack.Pop()); // 언더플로 에러
            }
            catch (Exception ex)
            {
                Console.WriteLine($"예외 내용 : {ex.Message}");
            }
        }
    }
}

Peek() 메서드는 스택 위에 있는 데이터를 가져오지만 Pop() 메서드처럼 제거하지는 않음.

스택에 데이터를 넣고 계속해서 사용만 할 때는 Peek() 메서드 사용.


Queue 클래스

Stack 클래스와 달리 Queue 클래스는 먼저 들어온 데이터가 먼저 나옴

FIFO (선입선출)

using System;
using System.Collections;

namespace codingstudy
{
    class Program2
    {
        static void Main()
        {
            var queue = new Queue(); // Queue 클래스의 인스턴스 생성

            queue.Enqueue(10); // 큐에 데이터 입력
            queue.Enqueue(20);

            Console.WriteLine(queue.Dequeue()); // 큐 데이터 출력
            Console.WriteLine(queue.Dequeue());
            //queue.Dequeue();
        }
    }
}

Enqueue()는 큐에 데이터를 저장하는 메서드

Dequeue()는 큐에서 데이터를 출력하는 메서드

큐가 비어있을 경우는 큐가 비어있다고 출력 됨


Hashtable 클래스

Hashtable 클래스는 정수 인덱스 및 문자열 인덱스 사용 가능

728x90
반응형