예외

예외란 실행 중 발생하는 오류이다.

 

try: 예외가 발생할 수 있는 코드를 시도한다.

catch: 예외가 발생했을 때 발견하고 처리한다.

finally: 예외가 발생하든 안하든 상관없이 항상 실행한다.

 

int x;
int y;
double result;

try
{
    Console.Write("숫자1: ");
    x = Convert.ToInt32(Console.ReadLine());

    Console.Write("숫자2: ");
    y = Convert.ToInt32(Console.ReadLine());

    result = x / y;

    Console.WriteLine("결과: " + result);
}
catch (FormatException e)
{
    Console.WriteLine("숫자만 입력해주세요.");
}
catch (DivideByZeroException e)
{
    Console.WriteLine("0으로 나눌 수 없습니다.");
}
catch (Exception e)
{
    Console.WriteLine("예기치 못한 오류가 발생헀습니다.");
}

catch문은 여러 개를 추가할 수 있다. 예상치 못한 오류가 발생할 경우를 대비하기 위해 Exception e 예외를 마지막에 추가한다.

 

finally는 예외가 발생했는지 여부에 상관없이 실행되기 때문에 보통 try-catch문 뒤에 실행되도록 한다.

double x;
double y;
double result;

try
{
    Console.Write("숫자1: ");
    x = Convert.ToInt32(Console.ReadLine());

    Console.Write("숫자2: ");
    y = Convert.ToInt32(Console.ReadLine());

    result = x / y;

    Console.WriteLine("결과: " + result);
}
catch (FormatException e)
{
    Console.WriteLine("숫자만 입력해주세요.");
}
catch (DivideByZeroException e)
{
    Console.WriteLine("0으로 나눌 수 없습니다.");
}
catch (Exception e)
{
    Console.WriteLine("예기치 못한 오류가 발생헀습니다.");
}
finally
{
    Console.WriteLine("실행이 완료되었습니다.");
}

finally는 일반적으로 리셋하기 위해 열려있는 파일을 모두 닫게 만들 때 사용한다.

 

'C# > C#' 카테고리의 다른 글

28. 문자열 보간(String Interpolation)  (0) 2023.10.12
27. 조건 연산자(Conditional Operator)  (0) 2023.10.11
25. params 키워드(Params Keyword)  (0) 2023.09.28
24. 오버로딩(Method Overloading)  (0) 2023.09.26
23. 리턴(Return Keyword)  (0) 2023.09.20
예외(Exceptions)

프로그램에서 에러가 발생할 가능성을 방지하여 안정적으로 처리하기 위해 예외를 작성한다.

fruit = ['apple', 'banana', 'strawberry']

try:
    fruit[3]
except:
    print("인덱스를 참조할 수 없습니다.")
# else:
#     print("정상 수행")
finally:
    print("명령 수행")

try에는 예외가 발생 가능성이 있는 코드를 작성하고 except는 에러 상황을 만났을 때, 우회하여 어떤 처리를 해야하는지 설정한다. else는 정상적으로 코드를 수행했을 때 작동하며, finally는 에러가 발생하든 정상적으로 실행되든 작동한다.

 

 

파일 읽기/쓰기

파일 경로를 설정 할 때에는 절대경로와 상대경로가 있다.

절대경로는 컴퓨터의 전체 경로를 말하며(보통 C:\Users\...로 시작한다.) 특수한 경우를 제외하면 일반적으로 작업할 때에는 컴퓨터에 종속되지 않는 상대경로를 쓴다.

f = open('literature\poem.txt', 'r', encoding='UTF-8')

print(f.read()) # 전체
print(f.readline()) # 한 줄
print(f.readlines()) # 전체 줄

f.close()

파일을 읽은 후에는 파일이 유실되지 않도록 close( ) 함수로 닫아주어야한다.

 

with문은 close( ) 함수를 사용하지 않아도 파일을 읽고 자동으로 닫는다.

with open('literature\poem.txt', 'r', encoding='UTF-8') as f:
    print(f.read())

 

쓰기는 a와 w 두 가지 방법이 있다.

f = open('literature\poem.txt', 'a', encoding='UTF-8')
f = open('literature\poem2.txt', 'w', encoding='UTF-8')

f.write("새로운 글이 작성되었습니다.")

f.close()

a는 기존의 내용에 새로 추가하는 것이고, w는 기존의 내용에서 새로운 내용으로 대체하는 것이다. w 모드를 사용할 때에는 기존의 내용이 유실되므로 주의하자.

 

 

'Back-End > Python' 카테고리의 다른 글

객체지향  (0) 2023.08.09
회원가입 프로그램 실습 - 파이썬(Python) 편  (0) 2023.08.08
함수  (0) 2023.08.07
자료구조 - 리스트 / 튜플 / 딕셔너리  (0) 2023.07.27
조건문과 반복문  (0) 2023.07.20
예외(Exceptions)

코드를 실행했을 때 발생되는 에러 중 하나. 예상할 수 있고 자바에서 그 유형을 가지고 있다.

int a = 10;
int b = 0;
int c = a / b;

10은 0으로 나눌 수 없다.

그렇기 때문에 이런 에러가 발생한다.

에러를 처리하지 않으면 프로그램이 종료되거나 예기지 못한 방향으로 흘러갈 수 있다. 컴퓨터 시스템 자체에서 처리될 수 있도록 회피하거나 대체적인 동작, 혹은 에러메세지를 띄울 수 있도록 처리해야한다.

 

리스트를 통한 예외를 만들어보자.

ArrayList arrayList = new ArrayList(initialCapacity:3);
arrayList.get(10);

10이라는 값은 arrayList에 존재하지 않는다. 자료구조에서 범위를 벗어난 것을 참조할 때도 예외가 발생한다.

 

예외를 처리하기 위해서는 try와 catch 구문을 사용한다.

try는 예외가 발생할 것 같은 코드를 try 안에 넣는다. 어떤 예외를 잡아 판단할 것인지, 예외가 발생하면 대체 동작을 수행할 수 있도록 해주는 것이 catch이다.

try {
	arrayList.get(10);
} catch (Exception e) {
	e.printStackTrace();
    System.out.println("Exception 발생");
} finally {
    System.out.println("finally");
}

Exception은 가장 최상위에  e Exception이라는 객체가 있다. 모든 Exception은 여기에 포함된다. 그렇기 때문에 어떠한 에러가 발생하더라도 catch에 걸리게 된다. 그리고 중괄호 안에 메세지를 띄우거나 Sytem.out.println으로 콘솔에 에러발생이라고 띄울 수 있다.(그러나 웬만하면 catch 문 안에 Sytem.out.println을 쓰지 않는 것이 보안에 좋다.) printStackTrace는 에러와 관련된 내용을 띄워 확인 할 수 있다. 에러 메세지는 보안적으로 취약한 점이 드러날 수 있기 때문에 외부에 노출하는 것을 지양하는 것이 좋다.

finally는 위와 상관 없이 무조건 수행되는 소스를 가르킨다.

 

발생하는 에러 종류를 세분화해보자.

try {
    int a = 10;
    int b = 0;
    int c = a / b;
} catch (IndexOutOfBoundsException ioe) {
    System.out.println("IndexOutOfBoundsException 발생");
} catch (IllegalArgumentException iae) {
    System.out.println("IllegalArgumentException 발생");
} catch (Exception e) {
    System.out.println("Exception 발생");
} finally {
    System.out.println("finally");
}

catch는 다중으로 세팅할 수 있다. 예상되는 예외를 나열하고 가장 마지막에 최상위의 Exception 객체를 넣어야 처리되지 않는 예외 없이 모두 처리가 된다.

 

 

'Back-End > Java' 카테고리의 다른 글

HTTP 통신과 URL  (0) 2023.05.23
Web - 클라이언트와 서버  (0) 2023.05.22
객체지향 - 객체지향 프로그래밍  (0) 2023.05.18
회원가입 프로그램 실습 - 자바(Java) 편  (1) 2023.05.16
함수  (0) 2023.05.15

+ Recent posts