SECTION 013. 라이브러리

1. 라이브러리의 개념

  • 라이브러리는 프로그램을 효율적으로 개발할 수 있도록 자주 사용하는 함수나 데이터들을 미리 만들어 모아 놓은 집합체이다.
    – 자주 사용하는 함수들의 반복적인 코드 작성을 피하기 위해 미리 만들어 놓은 것으로, 언제든지 호출하여 사용할 수 있다.
    – 라이브러리에는 표준 라이브러리와 외부 라이브러리가 있다.

  • 표준 라이브러리
    – 프로그래밍 언어에 기본적으로 포함되어 있는 라이브러리로, 여러 종류의 모듈이나 패키지 형태이다.

  • 외부 라이브러리
    – 개발자들이 필요한 기능들을 만들어 인터넷 등에 공유해 놓은 것으로, 외부 라이브러리를 다운받아 설치하여 사용할 수 있다.

2. C언어의 대표적인 표준 라이브러리

  • C언어는 라이브러리를 헤더 파일로 제공하는데, 각 헤더 파일에는 응용 프로그램 개발에 필요한 함수들이 정리되어 있다.
    – C언어에서 헤더 파일을 사용하려면 ‘#include <stdio.h>’ 와 같이 include 문을 이용해 선언한 후 사용해야 한다.
헤더 파일 기능
stdio.h - 데이터의 입,출력에 사용되는 기능들을 제공한다.
- 주요 함수 : printf, scanf, fprintf, fscanf, fclose, fopen 등
math.h - 수학 함수들을 제공한다.
- 주요 함수 : sqrt, pow, abs 등
string.h - 문자열 처리에 사용되는 기능들을 제공한다.
- 주요 함수 : strlen, strcpy, strcmp 등
stdlib.h - 자료형 변환, 난수 발생, 메모리 할당에 사용되는 기능들을 제공한다.
- 주요 함수 : atoi, atof, srand, rand, malloc, free 등
time.h - 시간 처리에 사용되는 기능들을 제공한다.
- 주요 함수 : time, clock 등

3. Java의 대표적인 표준 라이브러리

  • Java는 라이브러리를 패키지에 포함하여 제공하는데, 각 패키지에는 Java 응용 프로그램 개발에 필요한 메소드들이 클래스로 정리되어 있다.
    – Java에서 패키지를 사용하려면 ‘import java.util’ 과 같이 import문을 이용해 선언한 후 사용해야 한다.
    – import로 선언된 패키지 안에 있는 클래스의 메소드를 사용할 때는 클래스와 메소드를 마침표(.)로 구분하여 ‘Math.abs()’ 와 같이 사용한다.
패키지 기능
java.lang - Java에 기본적으로 필요한 인터페이스, 자료형, 예외 처리 등에 관련된 기능을 제공한다.
- import문 없이도 사용할 수 있다.
- 주요 클래스 : String, System, Process, Runtime, Math, Error 등
java.util - 날짜 처리, 난수 발생, 복잡한 문자열 처리 등에 관련된 기능을 제공한다.
- 주요 클래스 : Date, Calender, Random, StringTokenizer 등
java.io - 파일 입,출력과 관련된 기능 및 프로토콜을 제공한다.
- 주요 클래스 : InputStream, OutputStream, Reader, Writer 등
java.net - 네트워크와 관련된 기능을 제공한다.
- 주요 클래스 : Socket, URL, InetAddress 등
java.awt - 사용자 인터페이스(UI)와 관련된 기능을 제공한다.
- 주요 클래스 : Frame, Panel, Dialog, Button, Checkbox 등

4. Python의 대표적인 표준 라이브러리

  • Python은 Java와 동일하게 라이브러리를 패키지로 제공하며, 패키지에는 응용 프로그램 개발에 필요한 클래스와 메소드들이 정의되어 있다.
    – Python에서 라이브러리를 사용하려면 ‘import random’ 과 같이 선언하고, 사용할 때는 마침표(.)로 구분하여 ‘random.choice()’ 와 같이 사용한다.
클래스 기능
내장함수 - Python에 기본적인 인터페이스로, import문이나 클래스명 없이도 사용할 수 있다.
- 주요 메소드 : abs(), slice(), pow(), print() 등
os - 운영체제와 상호 작용하기 위한 기능을 제공한다.
- 주요 메소드 : getcwd(), chdir(), system() 등
re - 고급 문자열 처리를 위한 기능을 제공한다.
- 주요 메소드 : findall(), sub() 등
math - 복잡한 수학 연산을 위한 기능을 제공한다.
- 주요 메소드 : cos(), log() 등
random - 무작위 선택을 위한 기능을 제공한다.
- 주요 메소드 : choice(), sample(), random(), randrange() 등
statistics - 통계값 산출을 위한 기능을 제공한다.
- 주요 메소드 : mean(), median(), variance() 등
datetime - 날짜와 시간 조작을 위한 기능을 제공한다.
- 주요 메소드 : today(), date(), strftime() 등

SECTION 018. 예외처리

1. 예외 처리의 개요

– 프로그램의 정상적인 실행을 방해하는 조건이나 상태를 예외 (Exception) 라고 하며, 이러한 예외가 발생했을 때를 대비하여 작성해 놓은 처리 루틴을 수행하도록 하는 것을 예외 처리 (Exception Handling) 라고 한다.

  • 예외가 발생했을 때 일반적인 처리 루틴은 프로그램을 종료시키거나 로그를 남기도록 하는 것이다.
    – C++, Ada, Java 자바스크립트와 같은 언어에는 예외 처리 기능이 내장되어 있으며, 그 외 언어에서는 필요한 경우 조건문을 이용해 예외 처리 루틴을 작성한다.
    – 예외의 원인에는 컴퓨터 하드웨어 문제, 운영체제의 설정 실수, 라이브러리 손상, 사용자의 입력 실수, 받아들일 수 없는 연산, 할당하지 못하는 기억장치 접근 등 다양하다.

2. Java의 예외 처리

  • Java는 예외를 객체로 취급하며, 예외와 관련된 클래스를 java.lang 패키지에서 제공한다.

  • Java 에서는 try~catch 문을 이용해 예외를 처리한다.
    – try 블록 코드를 수행하다 예외가 발생하면 예외를 처리하는 catch 블록으로 이동하여 예외 처리 코드를 수행하므로 예외가 발생한 이후의 코드는 실행되지 않는다.
    – catch 블록에서 선언한 변수는 해당 catch 블록에서만 유효하다.
    – try~catch 문 안에 또 다른 try~catch 문을 포함할 수 있다.
    – try~catch 문 안에서는 실행 코드가 한 줄이라도 중괄호({ }) 를 생략할 수 없다.

1) 기본 형식

  try {
    // 예외가 발생할 가능성이 있는 코드
  } catch (예외객체1 매개변수) {
    // 예외객체1에 해당하는 예외 발생 시 처리 코드
  } catch (예외객체2 매개변수) {
    // 예외객체2에 해당하는 예외 발생 시 처리 코드
    ...
  } catch (예외객체n 매개변수) {
    // 예외객체n에 해당하는 예외 발생 시 처리 코드
  } catch (Exception 매개변수) {
    // 예외객체 1~n 에 해당하지 않는 예외 발생 시 처리 코드
  } finally {
    // 예외의 발생 여부와 관계 없이 무조건 처리되는 코드
  }

– 일반적으로 예외가 발생한 경우에는 ‘try → catch → finally’ 문 순서로 진행되며, 예외가 발생하지 않은 경우에는 ‘try → finally’ 문 순서로 진행된다.
– finally 문은 예외 발생과 관계없이 무조건 수행되는 블록이며, 생략이 가능하다.

3. Java의 주요 예외 객체

예외 객체 발생 원인
ClassNotFoundException 클래스를 찾지 못한 경우
NoSuchMethodException 메소드를 찾지 못한 경우
FileNotFoundException 파일을 찾지 못한 경우
InterruptedIOException 입출력 처리가 중단된 경우
ArithmeticException 0으로 나누는 등의 산술 연산에 대한 예외가 발생한 경우
IllegalArgumentException 잘못된 인자를 전달한 경우
NumberFormatException 숫자 형식으로 변환할 수 없는 문자열을 숫자 형식으로 변환한 경우
ArrayIndexOutOfBoundsException 배열의 범위를 벗어난 접근을 시도한 경우
NegativeArraySizeException 0보다 작은 값으로 배열의 크기를 지정한 경우
NullPointerException 존재하지 않는 객체를 참조한 경우