Core API Tour I

신 정호
138-229 서울 특별시 송파구 잠실 본동 193
미소테크(주) 기술 개발실
E-mail : mikimous@disney.misotech.com
URL : http://www.misotech.com/~mikimous /
Abstract:
프로그래머에게 있어서 라이브러리는 상당히 유용한 도구 이다. 라이브러리를 사용하게 되면 그만큼 개발 시간이나 생산성 면에서 큰 효과를 볼 수 있다. 그러나 이러한 라이브러리를 사용하기 위해서는 반드시 라이브러리의 사용법을 알아야 한다. 자바에서는 패키지(Package)라 불리는 라이브러리가 있다. C나 C++ 프로그래머가 라이브러리의 함수들을 사용하듯이 자바에서는 이 패키지의 클래스들과 클래스의 멤버 메쏘드들을 가져다 쓰면 된다. 패키지란 관련 있는 클래스와 인터페이스들을 한데 묶어 놓은 것으로 기본적으로 사용되는 패키지들은 JDK 1.02에 포함 되어 있는 패키지다.
본 API Tour에서는 JDK 1.02를 기준으로 사용 할 수 있는 클래스들과 메쏘드들의 종류와 기능을 알아 본다. 자바 패키지의 클래스들이 워낙 많으므로 여기서는 자세하게 다루지는 않을 것이다.
Keywords:
Java, WWW(World Wide Web), JDK(Java Developers Kit), API

1. JDK 1.02의 패키지 구조

JDK 1.02에는 8개의 패키지가 있다. 각 패키지에는 일반적으로 사용되는 클래스와 인터페이스 외에도 에러 처리를 위한 예외상황(Exception)과 에러(Error)에 관계된 클래스들도 있다. 여기서는 인터페이스와 예외상황, 에러에 대한 클래스들은 다루지 않을 것이며 java.applet, java.awt, java.awt.image,java.awt,peer 패키지는 Core API Tour II에서 다루고 있으므로 생략하겠다.

2. java.lang 패키지

가장 기본이 되는 클래스들을 포함한 패키지로 다른 패키지들과 달리 모든 프로그램에 자동적으로 import된다. 이 패키지에는 자료형에 관련된 클래스들과 시스템이나 쓰레드, 클래스를 다루는 클래스들이 포함 되어 있으며, 클래스들 중 자료형에 관계된 클래스들(Boolean, Cahracter, Dobule, Float, Integer, Long, String, StringBuffer)은 final로 선언이 되어 있어 이들 클래스는 상속해서 사용할 수 없게 되어 있다.

2.1 java.lang 패키지의 구조

2.2 Object 클래스

이 클래스는 모든 자바 클래스의 슈퍼 클래스로 root클래스이다. 심지어는 프로그래머가 만든 클래스도 이 클래스를 슈퍼 클래스로 가진다. 따라서 자바의 모든 클래스( 프로그래머가 만든 클래스 포함 )안에는 이 클래스의 멤버들이 계승된다.

2.3 Boolean 클래스

이 클래스의 객체에는 boolean 값을 저장하는 필드가 있고, 멤버 메쏘드들은 boolean 값을 다루기 위한 여러가지 유용한 메쏘드들이 있다. 예를 들면 boolean값을 String으로 변환 한다거나, String으로 저장된 boolean값("true" 또는 "false")을 boolean 값으로 바꿔주는 메쏘드가 있다.

2.4 Character 클래스

이 클래스의 객체는 char 값을 저장하기 위한 멤버 변수를 가지고 있고 이 변수는 접근이 불가능하다. 이 클래스는 char 기본 자료형을 다루는데 유용한 메쏘드들을 제공한다. 예를 들어 숫자인지 문자인지 검사하는 메쏘드도 있고, 대문자를 소문자로 소문자를 대문자로 바꿔주는 메쏘드도 있다.

2.5 Number 클래스

이 클래스는 abstract 클래스로 new 연산자나 newInstance()메쏘드를 이용해서 직접적으로 객체를 만들 수 없다. Double, Float, Integer, Long 클래스들이 이 클래스를 계승 받고 있다.

2.6 Double 클래스

이 클래스의 객체는 double을 저장하기 위한 멤버 변수를 가지고 있으며 double 기본 자료형을 다루는데 유용한 메쏘드들을 가지고 있다. 예를 들어 long 값으로 표현된 비트들을 double 이 사용하는 비트로 바꿔주기도 하며 문자열로 저장된 값을 double 값으로 바꿔주기도 하고, 그 반대의 메쏘드도 존재 한다.

2.7 Integer 클래스

이 클래스의 객체는 int 값을 저장하고 있으며 int 기본 자료형을 다루는데 유용한 메쏘드를 제공하고 있다. 예를 들면 10진수로 주어진 값을 2진수나, 16진수, 8진수로 바꿔주는 메쏘드들이 있다.

2.8 String 클래스

문자열을 다루기 위한 클래스로 이 클래스에는 문자열을 다루기 위한 여러가지 메쏘드가 존재 한다. 각 자료형의 값을 문자열로 바꿔주기도 하고, 문자열의 일부분만 넘져주는 메쏘드, 대문자나 소문자로 바꿔주는 메쏘드들이 있다.

2.9 StringBuffer 클래스

String 클래스와 마찬가지로 문자열을 다루기 위한 클래스로 객체에 저장된 내용을 임의대로 바꿀 수 있다. 따라서 문자열의 중간에 삽입하거나 추가 시키는 메쏘드들이 대부분이다.

2.10 Math 클래스

복잡한 수학적 계산을 위한 메쏘드들과 상수들이 제공된다. 이 클래스는 다 른 클래스들과 달리 모든 메쏘드와 변수들이 static으로 선언이 되어 있기 때문에 new 연산자나 newInstance () 메쏘드를 이용하여 객체를 생성할 수 없다. 또한 이 클래스는 다른 클래스들의 슈퍼 클래스가 될 수 없다.

2.11 System 클래스

표준 입출력과 표준에러를 제공하고 있어서 많이 사용되는 클래스로 시스템을 사용하는데 있어서 기본이 되는 메쏘드들을 제공한다. 이 클래스도 자료형에 관련된 클래스들과 마찬가지로 final로 선언이 되어 있어 상속해서 사용할 수 없다.

2.12 Runtime 클래스

모든 자바 프로그램은 Runtime 클래스의 single 객체로 Runtime클래스는 프로그램이 실행 되는 환경과의 인터페이스를 가능하게 해준다. 프로그램은 자신의 Runtime클래스 객체를 만들지 못한다. 따라서 이 클래스에는 생성자가 존재하지 않는다.

2.13 Thread 클래스

이 클래스는 자바가 지원하는 멀티 쓰레딩을 사용하기 위해서 사용된다. 응용 프로그램을 만들 때 여러 쓰레드를 사용하고자 할 경우는 이 클래스의 객체나 이 클래스의 서브 클래스의 객체를 만들어서 사용한다. 이 클래스에서는 쓰레드의 동작에 관한 기본적인 메쏘드들을 제공하고 있다.

2.14 ThreadGroup 클래스

자바의 모든 쓰레드들은 쓰레드 그룹의 멤버이다. 이 클래스는 이러한 쓰레드들을 그룹 단위로 다루기 위한 메쏘드들을 제공하고 있다. 쓰레드 그룹은 다른 쓰레드 그룹을 멤버로 가질 수 있다.

Class 클래스

이 클래스의 객체는 실행중인 자바 프로그램에 있는 클래스나 인터 페이스들을 나타 낼 수 있다. 이 클래스에는 public 생성자가 없기 때문에 객체를 new 연산자를 이용해서 직접 만들 수 없다.

3. java.util 패키지

Utility 패키지는 다양한 표준 프로그래밍 데이터 구조체를 지원하는 클래스들을 제공한다. 이 클래스들은 자바 프로그래밍을 할 때 유용하게 사용 될 수 있다.

3.1 java.util 패키지의 구조

3.2 Date 클래스

이 클래스는 날짜와 시간에 관계된 메쏘드들을 가지고 있다.

3.3 Stack 클래스

이 클래스는 stack의 동작을 하는 멤버들을 가지고 있다.

3.4 Vector 클래스

이 클래스는 객체의 동적으로 할당된 리스트를 지원한다. Vector 클래스의 객체의 저장 능력 이상으로 저장 할 때 저장 능력을 자동으로 증가 시켜 준다.

4. java.io 패키지

데이터의 입력과 출력을 하지 않는 유용한 프로그램은 존재 하지 않을 것이다. 대부분의 프로그램은 사용자로부터 입력을 요구하거나 프린트나 화면 또는 파일 등으로 출력을 한다. java.io 패키지는 이러한 다양한 입출력에 관계된 클래스를 제공한다.
입력에 관련된 클래스들의 메쏘드들은 대부분 InputStream 클래스에 있는 메쏘드들과 같다. 출력에 관련된 메쏘드들도 OutputStream 클래스의 메쏘드들과 비슷하며 각 클래스의 생성자들은 InputStrema이나 OutputStream클래스의 서브클래스를 매개변수로 받아서 스트림 연결을 한다. 여기서는 InputStream 클래스와 OutputStream 클래스를 중심으로 메쏘드의 구성이 다른 클래스들과 메쏘드만 보겠다.

4.1 java.io 패키지 구성

4.2 InputStream 클래스

모든 입력 스트림 클래스의 슈퍼 클래스로 기본적인 입력에 관련된 메쏘드들을 제공한다. 이 클래스는 abstract 클래스로 new 연산자나 newInstance() 메쏘드를 이용하여 직접적으로 객체를 생성할 수 없다.

4.3 ByteArrayInputStream 클래스

이 클래스의 객체는 별도의 입력장치가 아닌 byte의 배열에서 자료를 읽어 들인다. 다른 입력 스트림들과 달리 이 클래스의 입력 메쏘드들은 block되지 않는다.

4.4 DataInputStream 클래스

여러 종류의 입력 메쏘드를 가지고 있다. 라인 단위로 처리를 할 수 있으며, 각종 데이터 형식으로 읽어 들일 수 있다.

 

4.5 PipedInputStream 클래스

이 클래스는 파이프의 양 끝을 이용해서 서로 통신할 경우 사용되는데, 한 쓰레드가 파이프의 한쪽을 이용해서 데이터를 보내면 다른 쓰레드가 다른 파이프의 한쪽을 이용해서 데이터를 읽어 들일 수 있다.

4.6 PushbackInputStream 클래스

이 클래스는 1바이트 push back buffer를 제공하는 입력 스트림 필터로, 응용 프로그램에서 마지막으로 읽은 한 문자를 "unread"할 수 있다. 따라서 "unread"한 문자는 다시 읽어 들일 수있다.

4.7 FileInputStream 클래스

이 클래스는 파일로부터 입력을 받기 위해 사용 된다. 읽어들이기 위한 메쏘드는 InputStream 클래스와 같다. 여기서는 DataInputStream 클래스와 연동하는 예제만 보이도록 하겠다.

4.8 OutputStream 클래스

이 클래스는 모든 출력 스트림 클래스들의 슈퍼 클래스이며, abstract 클래스라 new 연산자나 newInstance()메쏘드를 이용해서 직접적으로 객체를 생성할 수 없다. 대부분의 출력 스트림 클래스는 이 클래스와 멤버가 비슷한다.

4.9 ByteArrayOutputStream 클래스

이 클래스는 바이트 배열에 출력을 하기 위한 출력 스트림을 가진다. 버퍼는 쓸 때 자동적으로 그 크기가 증가된다.

4.10 DataOutputStream 클래스

이 클래스는 간단한 방식으로 출력 스트림에 자바 기본 데이터형을 출력하는데 유용하다.

4.11 PipedOutputStream 클래스

이 클래스는 파이프의 보내는 쪽에 위치한다. 두 쓰레드간의 통신에서 이 클래스는 보내는 쪽에 위치해서 데이터를 보내는 역할을 한다.

4.12 PrintStream 클래스

이 클래스는 주로 텍스트로 출력 데이터를 출력하기 위해서 디자인 되었다. 이 클래스에는 다수의 print()와 println()메쏘드가 각각 매개 변수로 서로 다른 자료형을 받아 들이도록 overload 되어 있다. 코드의 구현은 println()메쏘드는 print()메쏘드를 이용하도록 되어 있고, print()메쏘드는 write()메쏘드를 이용해서 출력 하도록 되어 있다. Println()메쏘드와 print()메쏘드는 줄바꿈 기능의 여부이다. 여기서는 println()메쏘드만 설명하도록 하겠다.

4.13 FileOutputStream 클래스

이 클래스는 파일로 출력을 하기 위해 사용 된다. 쓰기위한 메쏘드들은 OutputStream 클래스와 같다. 여기서는 PrintStream 클래스와 연동하는 예제만 보이도록 하겠다.

5. Java.net 패키지

자바의 네트워킹 기능을 포함하고 있다. TCP는 물론 UDP를 다룰 수 있는 클래스가 제공되며, URL형식으로 데이터를 읽어 올 수 있는 URL관련 클래스들도 제공되고 있다.

5.1 java.net 패키지 구조

5.2 Socket 클래스

이 클래스는 클라이언트의 소켓 구현을 위해 사용된다. 물론 두 컴퓨터 간의 통신에서 양쪽 끝을 담당하는 것이 소켓이다. 따라서 서버 쪽에서도 소켓을 가지고 클라이언트와 통신을 하게 된다.

5.3 ServerSocket 클래스

이 클래스는 서버쪽의 소켓 구현을 제공한다. 서버 소켓은 클라이언트의 접속 요청이 있을 때까지 기다린다.

5.4 DatagramSocket 클래스

UDP를 이용하여 통신 하고자 할 때 사용할 수 있는 송수신을 위한 메쏘드들을 제공하고 있다.

5.5 DatagramPacket 클래스

UDP를 이용하여 통신 하고자 할 때 DatagramSocket에서 보내는 패킷으로 사용한다.

 

5.6 URL 클래스

이 클래스를 이용하면 자바 코드에서 웹상의 어느 곳에 있는 자원에나 접근이 가능한다. 또한 프로토콜과 포트를 지정할 수가 있어 어떤 프로토콜도 사용 할 수 있으며 따라서 인터넷 상의 모든 자원에 접근이 가능 할 수 있다.

6 결 론

지금까지 자바 패키지중 GUI와 applet에 관련된 것을 제외 하고 자바 프로그램에 있어서 기본이 되는 패키지들과 그 패지들의 클래스들에 대해서 살펴 보았다. 모든 클래스들에 대해서 자세하게 살피기 보다는 자주 사용되는 클래스 위주로 패키지의 특성과 클래스들의 특성 및 메쏘드들이 하는 역할 등을 간단하게 살펴 보았다. 자바 프로그래밍을 하는 사람이라면 반드시 알아야 할 것들이 JDK에 포함된 API들로 프로그램 개발중에도 계속적으로 살펴야 할 내용들이다.

참고문헌(References)

[SUN 96]
SunSoft, Java API Documentation, 1996
URL:http://www.javasoft.com:80/products/JDK/1.0.2/api/
[SUN 96}
SunSoft, The Java Tutorial, 1996
URL:http://www.javasoft.com/books/Series/Tutorial/index.html
[Michael Morrison 96]
Michael Morrison 외 19인, 박 철우 역, 대림, 1996
[신 정호 96]
신 정호, 제갈 영, 조 국, 자바를 자바라, 미래정보사, 1996
URL:http://www.misotech.com/~mikimous/java/book/
[미소테크 96]
신기술 교육센터, 자바 프로그래밍, 1996
URL:http://www.misotech.com/road/miso/n-tec/index.html

Tuesday, 09-Dec-2014 17:25:27 UTC Last-Modified : Sunday, 19-Oct-96 KDT