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의 패키지 구조
- java.applet
- java.awt
- java.awt.image
- java.awt.peer
- java.io
- java.lang
- java.net
- java.util
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 패키지의 구조
- java.lang.Object
- java.lang.Boolean
- java.lang.Character
- java.lang.Class
- java.lang.ClassLoader
- java.lang.Compiler
- java.lang.Math
- java.lang.Number
- java.lang.Double
- java.lang.Float
- java.lang.Integer
- java.lang.Long
- java.lang.Process
- java.lang.Runtime
- java.lang.SecurityManager
- java.lang.String
- java.lang.StringBuffer
- java.lang.System
- java.lang.Thread ( implements Runnable )
- java.lang.ThreadGroup
- java.lang.Throwable
2.2 Object 클래스
이 클래스는 모든 자바 클래스의 슈퍼 클래스로 root클래스이다. 심지어는
프로그래머가 만든 클래스도 이 클래스를 슈퍼 클래스로 가진다. 따라서
자바의 모든 클래스( 프로그래머가 만든 클래스 포함 )안에는 이 클래스의
멤버들이 계승된다.
- 멤 버
- Object clone() - 이 메쏘드를 호출한 객체와 같은 클래스의 객체를 생성한다. 멤버 변수의 값은 호출할 때의 값과 같다.
- boolean equals( Object obj ) - 매개 변수로 받은 객체와 이 메쏘드를 호출한 객체와 같은지를 비교한다.
- int hashCode() - hash code값을 계산한다.
- Class getClass() - 객체의 run-time 클래스를 결정한다.
- String toString() - 객체의 값을 가지고 문자열을 리턴한다.
- wait(), notify() - 쓰레드를 제어 한다.
2.3 Boolean 클래스
이 클래스의 객체에는 boolean 값을 저장하는 필드가 있고, 멤버 메쏘드들은 boolean 값을 다루기 위한 여러가지 유용한 메쏘드들이 있다.
예를 들면 boolean값을 String으로 변환 한다거나, String으로 저장된 boolean값("true" 또는 "false")을 boolean 값으로 바꿔주는 메쏘드가 있다.
- 멤 버
- 상수
-
- static final Boolean TRUE = new Boolean(true)
- static final Boolean FALSE = new Boolean(false)
- 메쏘드
-
- Boolean ( boolean value ) - value값을 가지는 객체를 생성한다.
- Boolean ( String s ) - s가 null이 아니고 대소문자 구별없이 "true"와 같으면 객체는 true값을 가지고 그 외엔 false 값을 가진다.
- boolean booleanValue() - 이 메쏘드를 호출한 객체의 boolean 값을넘겨준다.
- static boolean getBoolean( String name ) - 시스템 property의 boolean값을 넘겨준다.( name - 시스템 property 이름 )
- static Boolean valueOf( String s ) - Boolean 객체의 생성, 문자열이 null이 아니고 대소문자 구별 없이 "true"와 같다면 객체는 true 값을 가진다.
2.4 Character 클래스
이 클래스의 객체는 char 값을 저장하기 위한 멤버 변수를 가지고 있고 이 변수는 접근이 불가능하다.
이 클래스는 char 기본 자료형을 다루는데 유용한 메쏘드들을 제공한다. 예를 들어
숫자인지 문자인지 검사하는 메쏘드도 있고, 대문자를 소문자로 소문자를 대문자로 바꿔주는 메쏘드도 있다.
- 멤 버
- 상수
-
- final static int MAX_RADIX = 36
- final static char MAX_VALUE = '\uffff'
- final static int MIN_RADIX = 2
- final static char MIN_VALUE='\u0000'
- 메쏘드
-
- Character( char value ) - value 값으로 객체를 초기화 한다.
- char charValue() - 이 메쏘드를 호출한 객체의 char 값을 넘겨준다.
- static boolean isDigit( char ch ) - 숫자인지 판단 한다.
- static boolean isLetter( char ch ) - 문자인지 판단 한다.
- static boolean isLetterOrDigit( char ch ) - 문자이거나 숫자( $, _ 포함)인지 판단 한다.
- static boolean isLowerCase( char ch ) - 소문자인지 판단 한다.
- static boolean isUpperCase( char ch ) - 대문자인지 판단 한다.
- static boolean isSpace( char ch ) - 공백( \t, \n, \f, \r, ' ')인지 판단 한다.
- static char toLowerCase( char ch ) - 소문자로 바꾼다
- static char toUpperCase( char ch ) - 대문자로 바꾼다.
2.5 Number 클래스
이 클래스는 abstract 클래스로 new 연산자나 newInstance()메쏘드를 이용해서
직접적으로 객체를 만들 수 없다.
Double, Float, Integer, Long 클래스들이 이 클래스를 계승 받고 있다.
- 멤 버
- abstract double doubleValue() - 객체가 가지고 있는 값을 double로 변환해준다.
- abstract float floatValue() - 객체가 가지고 있는 값을 float으로 변환해준다.
- abstract int intValue() - 객체가 가지고 있는 값을 int로 변환해준다.
- abstract long longValue() - 객체가 가지고 있는 값을 long으로 변환해준다
2.6 Double 클래스
이 클래스의 객체는 double을 저장하기 위한 멤버 변수를 가지고 있으며
double 기본 자료형을 다루는데 유용한 메쏘드들을 가지고 있다. 예를 들어
long 값으로 표현된 비트들을 double 이 사용하는 비트로 바꿔주기도 하며
문자열로 저장된 값을 double 값으로 바꿔주기도 하고, 그 반대의 메쏘드도 존재 한다.
- 멤 버
- 상수
-
- public final static double MAX_VALUE =1.79769313486231570e+308
- public final static double MIN_VALUE = 4.94065645841246544e-308
- public final static double NaN = 0.0d / 0.0
- public final static double NEGATIVE_INFINITY = -1.0 / 0.0
- public final static double POSITIVE_INFINITY = 1.0 / 0/0
- 메쏘드
-
- static long doubleToLongBits( double value ) - double로 표현되어 있는 비트를 long형식의 비트로 바꿔준다.
- value가 양의 무한대인 경우 : 0x7ff0000000000000L
- value가 음의 무한대인 경우 : 0xfff0000000000000L
- value가 NaN인 경우 : 0x7ff8000000000000L
- static boolean isNaN( double v ) - 값이 NaN인지 검사
- static boolean isInfinite( double v ) - 값이 무한대 인지 검사
- static Double valueOf( String s ) - s에 저장되어 있는 double 값으로 Double 객체를 만들어서 넘겨준다.
2.7 Integer 클래스
이 클래스의 객체는 int 값을 저장하고 있으며 int 기본 자료형을 다루는데 유용한 메쏘드를 제공하고 있다.
예를 들면 10진수로 주어진 값을 2진수나, 16진수, 8진수로 바꿔주는 메쏘드들이 있다.
- 멤 버
- 상수
-
- final static int MAX_VALUE = 2147483647
- final static int MAX_VALUE = -2147483648
- 메 쏘 드
-
- static int parseInt( String s ) - 문자열로 저장된 값을 int 값으로 바꾼다
- static int parseInt( String s , int radix ) - 문자열로 저장된 값을 주어진 raidx에 해당하는 값으로 바꾼다.
- static String toBinaryString( int i ) - 2진수로 바꿔서 문자열로 저장
- static String toHexString( int i ) - 16진수로 바꿔서 문자열로 저장
- static String toOctalString( int i ) - 8진수로 바꾸서 문자열로 저장
2.8 String 클래스
문자열을 다루기 위한 클래스로 이 클래스에는 문자열을 다루기 위한 여러가지 메쏘드가 존재 한다.
각 자료형의 값을 문자열로 바꿔주기도 하고, 문자열의 일부분만 넘져주는 메쏘드, 대문자나 소문자로 바꿔주는 메쏘드들이 있다.
- 멤 버
- char charAt( int index ) - 문자열에서 index번째 문자를 넘겨준다.
- void getBytes( int srcBegin, int srcEnd, byte dst[], int dstBegin) - 문자열에서 지정한 위치의 내용을 byte배열에 저장한다.
- String substring( int beginIndex ) - 지정한 위치부터 문자열을 끝까지 넘겨준다.
- int length() - 문자열의 길이를 넘겨준다.
- String toUpperCase() - 문자열의 문자들을 대문자로 바꿔서 넘겨준다.
- String toLowerCase() - 문자열의 문자들을 소문자로 바꿔서 넘겨준다.
- String trim() - 문자열의 앞 뒤쪽의 공백문자( ' ' )를 지워서 넘겨준다.
2.9 StringBuffer 클래스
String 클래스와 마찬가지로 문자열을 다루기 위한 클래스로 객체에 저장된 내용을 임의대로 바꿀 수 있다.
따라서 문자열의 중간에 삽입하거나 추가 시키는 메쏘드들이 대부분이다.
2.10 Math 클래스
복잡한 수학적 계산을 위한 메쏘드들과 상수들이 제공된다. 이 클래스는
다 른 클래스들과 달리 모든 메쏘드와 변수들이 static으로 선언이
되어 있기 때문에 new 연산자나 newInstance () 메쏘드를 이용하여
객체를 생성할 수 없다. 또한 이 클래스는 다른 클래스들의 슈퍼 클래스가
될 수 없다.
- 멤 버
- 상수 :
- Math.E = 2.7182818284590452354
- Math.PI = 3.14159265358979323846
- 메쏘드들 :
- sin, cos, tan, asin, scos, atan, exp, log, sqrt, pow,ceil, floor, round, rint, atan2, abs, min, max
2.11 System 클래스
표준 입출력과 표준에러를 제공하고 있어서 많이 사용되는 클래스로 시스템을 사용하는데 있어서 기본이 되는 메쏘드들을 제공한다.
이 클래스도 자료형에 관련된 클래스들과 마찬가지로 final로 선언이 되어 있어 상속해서 사용할 수 없다.
- 멤 버
- System.in - 표준 입력
- System.out - 표준 출력
- System.err - 표준 에러
- static void arraycopy(Object src, int src_position, Object dst,
- int dst_position, int length) - src의 배열의 src_position부터 length만큼 dst배열에 dst_position 부터 복사한다.
2.12 Runtime 클래스
모든 자바 프로그램은 Runtime 클래스의 single 객체로 Runtime클래스는 프로그램이 실행 되는 환경과의 인터페이스를 가능하게 해준다.
프로그램은 자신의 Runtime클래스 객체를 만들지 못한다. 따라서 이 클래스에는 생성자가 존재하지 않는다.
2.13 Thread 클래스
이 클래스는 자바가 지원하는 멀티 쓰레딩을 사용하기 위해서 사용된다.
응용 프로그램을 만들 때 여러 쓰레드를 사용하고자 할 경우는 이 클래스의 객체나
이 클래스의 서브 클래스의 객체를 만들어서 사용한다.
이 클래스에서는 쓰레드의 동작에 관한 기본적인 메쏘드들을 제공하고 있다.
- 멤 버
- 상 수
-
- final static int MAX_PRIORITY = 10
- final static int MIN_PRIORITY = 1
- final static int NORM_PRIORITY = 5
- 메 쏘 드
-
- Thread( Runnable target ) - Runnable interface를 implements하고 있는 클래스의 객체를 받아서 Thread 객체를 할당한다.
- Thread( ThreadGroup group, Runnable target ) - 쓰레드가 속할 그룹과 Runnable interface를 implements하고 있는 클래스의 객체를 받아서 Thread 객체를 할당한다.
- void start() - 쓰레드를 실행 시킨다.
- void stop() - 쓰레드의 실행을 중단 시킨다.
- void sleep( long millis ) - 주어진 시간(100분의 1초단위)만큼 쓰레드를 쉬게 한다.
- void suspend() - 쓰레드의 실행을 resume()메쏘드가 호출될때까지 정지 시킨다.
- void resume() - suspend()메쏘드에 의해 정지되어 있는 쓰레드를 다시 실행 시킨다.
- void setPriority( int newPriority ) - 쓰레드의 우선순위를 새로 지정한다.
- int getPriority() - 쓰레드의 우선 순위 값을 넘겨준다.
- static Thread currentThread() - 현재 실행 중인 쓰레드의 객체를 넘겨준다.
- ThreadGroup getThreadGroup() - 쓰레드가 속한 ThreadGroup의 객체를 넘겨준다.
2.14 ThreadGroup 클래스
자바의 모든 쓰레드들은 쓰레드 그룹의 멤버이다.
이 클래스는 이러한 쓰레드들을 그룹 단위로 다루기 위한 메쏘드들을 제공하고 있다.
쓰레드 그룹은 다른 쓰레드 그룹을 멤버로 가질 수 있다.
- 멤 버
- ThreadGroup( String name ) - 지정한 이름으로 쓰레드 그룹을 만든다.
- ThreadGroup(ThreadGroup parent, String name ) - 새로 만들 쓰레드 그룹이 속할 상위 쓰레드 그룹의 객체와 이름을 넘겨 받아서 그룹을 생성한다.
- int activeCount() - 쓰레드 그룹에 속한 쓰레드중 살아있는 쓰레드의 개수를 넘겨준다.
- int enumerate( Thread list[] ) - 쓰레드 그룹에 속한 쓰레드중 살아있는 쓰레드를 배열 list에 채워 준다.
- void setMacPriority( int pri ) - 이 그룹의 멤버 쓰레드가 생성될 때 쓰레드의 우선순위는 지정된 값을 넘지 못한다.
- void resume() - 그룹에 속한 쓰레드와 서브 쓰레드 그룹에 속한 쓰레드까지 suspend()에 의해 정지된 쓰레드들을 다시 실행 시킨다.
- void suspend() - 그룹에 속한 쓰레드와 서브 쓰레드 그룹에 속한 쓰레드들까지 resume()이 호출될 때까지 실행을 멈춘다.
- void stop() - 그룹에 속한 쓰레드와 서브 쓰레드 그룹에 속한 쓰레드까지 실행을 정지 시킨다.
Class 클래스
이 클래스의 객체는 실행중인 자바 프로그램에 있는 클래스나 인터 페이스들을 나타 낼 수 있다.
이 클래스에는 public 생성자가 없기 때문에 객체를 new 연산자를 이용해서 직접 만들 수 없다.
3. java.util 패키지
Utility 패키지는 다양한 표준 프로그래밍 데이터 구조체를 지원하는
클래스들을 제공한다. 이 클래스들은 자바 프로그래밍을 할 때 유용하게
사용 될 수 있다.
3.1 java.util 패키지의 구조
- java.util.BitSet ( implements java.lang.Cloneable )
- java.util.Date
- java.util.Dictionary
- java.util.Hashtable ( implements java.lang.Cloneable )
- java.util.Observable
- java.util.Random
- java.util.StringTokenizer( implements java.util.Enumeration)
- java.util.Vector ( implements java.lang.Cloneable )
3.2 Date 클래스
이 클래스는 날짜와 시간에 관계된 메쏘드들을 가지고 있다.
- 멤 버
- int getDate() - 1 부터 31 까지의 숫자를 넘겨준다.
- int getDay() - 0부터 6까지의 숫자를 넘겨준다. (0이 일요일)
- int getHours() - 0부터 23까지의 숫자를 넘겨준다.(0이 자정)
- int getMonth() - 0부터 11까지의 숫자를 넘겨준다.( 0이 1월)
3.3 Stack 클래스
이 클래스는 stack의 동작을 하는 멤버들을 가지고 있다.
- 멤버
- boolean empty() -stack이 비어 있으면 true, 아니면 false를 넘겨준다.
- Object peek() - stack의 맨 위에 있는 객체를 넘겨준다.
- Object pop() - stack위 맨 위에 있는 객체를 제거
- Object push( Object item ) - stack에 item을 추가한다.
- int search( Object o ) - stack에 o가 있는지 검사해서 인덱스를 넘겨준다. 없으면 -1을 넘겨준다.
3.4 Vector 클래스
이 클래스는 객체의 동적으로 할당된 리스트를 지원한다. Vector
클래스의 객체의 저장 능력 이상으로 저장 할 때 저장 능력을 자동으로
증가 시켜 준다.
- 멤 버
- Vector( int initialCapacity, int capcityIncrement )
- initialCapacity - 초기 저장 능력
- capcityIncrement - 저장 능력을 초과해서 저장하고자 할 때 저어진 값만큼 공간을 추가한다. ( 0이면 초기 저장 능력의 2배 만큼 증가 시킨다.)
- void addElement( Object obj ) - obj를 vector에 추가 한다.
- void insertElementAt( Object obj, int index ) - obj를 지정된 위치에 삽입한다.
- void removeAllElements() - vector에 저장된 모든것을 지우고 vector의 크기를 0으로 한다.
- boolean reamoveElement( Object obj ) - vector에서 첫번째로 obj와 일치하는 객체를 지운다.
- void removeElementAt( int index ) - vector에서 지정한 위치의 객체를 지운다.
- void setElementAt( Object obj, int index ) - obj를 vector의 지정한 위치의 객체로 바꿔준다.
-
Vector 클래스의 사용예
import java.util.Vector;
class TestVector{
public static void main( String args[] ){
Vector vector = new Vector(10,3);
for( int i = 0; i < 10 ; i++ ){
vector.addElement( new Integer(i) );
}
System.out.println("벡터에 저장된 값 ");
for( int i = 0; i < vector.size(); i++ ){
System.out.print( ((Integer)vector.elementAt(i)).intValue()+ " ");
}
System.out.println();
System.out.println("추가한 후의 내용");
vector.addElement("추가된 내용");
for( int i=0 ; i < vector.size(); i++ ){
System.out.print( vector.elementAt(i)+" " );
}
System.out.flush();
}
}
4. java.io 패키지
데이터의 입력과 출력을 하지 않는 유용한 프로그램은 존재 하지
않을 것이다. 대부분의 프로그램은 사용자로부터 입력을 요구하거나
프린트나 화면 또는 파일 등으로 출력을 한다. java.io 패키지는 이러한
다양한 입출력에 관계된 클래스를 제공한다.
입력에 관련된 클래스들의 메쏘드들은 대부분 InputStream 클래스에
있는 메쏘드들과 같다. 출력에 관련된 메쏘드들도 OutputStream 클래스의
메쏘드들과 비슷하며 각 클래스의 생성자들은 InputStrema이나 OutputStream클래스의
서브클래스를 매개변수로 받아서 스트림 연결을 한다. 여기서는 InputStream
클래스와 OutputStream 클래스를 중심으로 메쏘드의 구성이 다른
클래스들과 메쏘드만 보겠다.
4.1 java.io 패키지 구성
- java.io.InputStream
- java.io.ByteArrayInputStream
- java.io.FilterInputStream
- java.io.BufferedInputStream
- java.io.DataInputStream( implements java.io.DataInput )
- java.io.LineNumberInputStream
- java.io.PushbackInputStream
- java.io.FileInputStream
- java.io.SequenceInputStream
- java.io.StringBufferInputStream
- java.io.OutputStream
- java.io.ByteArrayOutputStream
- java.io.FileOutputStream
- java.io.FilterOutputStream
- java.io.BufferedOutputStream
- java.io.DataOutputStream( implements java.io.DataOutput )
- java.io.PrintStream
- java.io.PipedOutputSteam
- java.io.File
- java.io.FileDescriptor
- java.io.RandomAccessFile( implements java.io.DataInput, java.io.DataOutput)
- java.io.StreamTokenizer
4.2 InputStream 클래스
모든 입력 스트림 클래스의 슈퍼 클래스로 기본적인 입력에 관련된
메쏘드들을 제공한다. 이 클래스는 abstract 클래스로 new 연산자나
newInstance() 메쏘드를 이용하여 직접적으로 객체를 생성할 수 없다.
- 멤버
- int available() - 블록킹이 되지 않고 읽을 수 있는 바이트의 수를 넘겨준다.
- void close() - 스트림을 닫는다.
- void mark( int readlimit ) - 스트림내의 현재 위치에 표시를 해둔다.
- boolean markSupported() - 스트림이 마크/리셋을 지원하는 가를 판별한다.
- abstract int read() - 스트림으로부터 한 바이트를 읽어서 넘겨준다.
- int read( byte b [] ) - 스트림으로부터 바이트의 배열만큼 읽어서 b에 채워 준다.
- int read( byte b[] , int off, int length ) - 스트림으로부터 length만큼 읽어서 b의 off부터 채워준다.
- void reset() - 최근에 마크된 위치로 스트림을 재위치시킨다.
- long skip( long n ) - 지정한 바이트 수만큼 건너뛴다.
4.3 ByteArrayInputStream 클래스
이 클래스의 객체는 별도의 입력장치가 아닌 byte의 배열에서 자료를 읽어 들인다.
다른 입력 스트림들과 달리 이 클래스의 입력 메쏘드들은 block되지 않는다.
- 생 성 자
- ByteArrayInputStream(byte buf[]) - 지정한 byte배열로부터 자료를 읽어들이는 객체를 만든다.
- ByteArrayInputStream(byte buf[], int offset, int length) - 지정한 byte 배열로부터 자료를 읽어들이는 객체를 만든다. 단, 배열의 offset부터 length만큼만 읽을 수 있다.
4.4 DataInputStream 클래스
여러 종류의 입력 메쏘드를 가지고 있다. 라인 단위로 처리를
할 수 있으며, 각종 데이터 형식으로 읽어 들일 수 있다.
- 멤버
- DataInputStream( InputStream in ) - 지정한 입력 스트림으로부터 읽어 올 수 있는 객체를 생성한다.
- boolean readBoolean() - 스트림으로부터 한 바이트를 읽어서 0이면 false, 그 외 다른 값이면 true를 넘겨준다.
- char readChar() - 스트림으로부터 Unicode 한문자(2바이트)를 읽어들인다.
- byte readByte() - 스트림으로부터 1바이트를 읽어서 signed byte 값으로 넘겨준다.
- short readShort() - 스트림으로부터 2바이트를 읽어서 signed short 값으로 넘겨준다.
- double readDouble() - 스트림으로부터 readLong()을 이용하여 읽어서 Double클래스의 longBitsToDouble()메쏘드를 이용해서 double값으로 바꾼다.
- float readFloat() - 스트림으로부터 readInt()을 이용하여 읽어서 Float클래스의 intBitsToFloat()메쏘드로 float값으로 변환 한다.
- void readFully( byte b[] ) - 스트림으로부터 b.length만큼 읽어서 b에 채워준다.
- void readFully( byte b[], int off, int length ) - 스트림으로부터 length만큼 읽어 들여서 b의 off부터 채워준다.
- int readInt() - 스트림으로부터 4바이트를 읽어서 signed int값으로 넘겨준다.
- String readLine() - 스트림으로부터 한 줄을 문자열로 읽어 들인다.
- long readLong() - 스트림으로부터 8바이트를 읽어서 signed long값으로 넘겨준다.
- int readUnsignedByte() - 스트림으로부터 1바이트를 읽어서 unsigned int값으로 넘겨준다.
- int readUnsignedShort() - 스트림으로부터 2바이트를 읽어서 unsigned int 값으로 넘겨준다.
- String readUTF() - 스트림으로부터 modified UTF-8형식으로 코딩된 문자열을 읽어서 Unicode String으로 넘겨준다.
- static String readUTF( DataInputStream in ) - 지정된 스트림으로부터 modified UTF-8형식으로 코딩된 문자열을 읽어서 Unicode String으로 넘겨준다.
4.5 PipedInputStream 클래스
이 클래스는 파이프의 양 끝을 이용해서 서로 통신할 경우 사용되는데,
한 쓰레드가 파이프의 한쪽을 이용해서 데이터를 보내면 다른 쓰레드가
다른 파이프의 한쪽을 이용해서 데이터를 읽어 들일 수 있다.
- 멤버
- PipedInputStream(PipedOutputStream src) - 지정된 PipedOutputStream과 연결된 객체를 만든다.
- void connect( PipedOutputStream src ) - 파이프를 이용하여 보내는 쪽과 연결을 한다.
4.6 PushbackInputStream 클래스
이 클래스는 1바이트 push back buffer를 제공하는 입력 스트림
필터로, 응용 프로그램에서 마지막으로 읽은 한 문자를 "unread"할
수 있다. 따라서 "unread"한 문자는 다시 읽어 들일 수있다.
- 멤버
- PushbackInputStream(InputStream in) - 지정한 입력 스트림으로부터 읽을 수 있는 객체를 생성 한다.
- void unread( int ch ) - ch를 push back한다. 이 문자는 다음에 read()메쏘드가 호출될 때 다시 읽어 들인다.
4.7 FileInputStream 클래스
이 클래스는 파일로부터 입력을 받기 위해 사용 된다. 읽어들이기 위한 메쏘드는 InputStream 클래스와 같다.
여기서는 DataInputStream 클래스와 연동하는 예제만 보이도록 하겠다.
4.8 OutputStream 클래스
이 클래스는 모든 출력 스트림 클래스들의 슈퍼 클래스이며, abstract
클래스라 new 연산자나 newInstance()메쏘드를 이용해서 직접적으로
객체를 생성할 수 없다. 대부분의 출력 스트림 클래스는 이 클래스와
멤버가 비슷한다.
- 멤버
- void close() - 스트림을 닫는다. 이 스트림과 관련되었던 시스템자원도 모두 돌려준다.
- void flush() - 스트림에 의해 쓰여진 buffer에 있던 내용을 강제적으로 출력한다.
- void write( byte b[] ) - 스트림에 b.length만큼 쓴다.
- void write( byte b[], int off, int length ) - 스트림에 b의내용을 off부터 length만큼 쓴다.
- abstract void write( int b ) - 스트림에 한바이트를 쓴다.
4.9 ByteArrayOutputStream 클래스
이 클래스는 바이트 배열에 출력을 하기 위한 출력 스트림을 가진다.
버퍼는 쓸 때 자동적으로 그 크기가 증가된다.
- 멤버
- ByteArrayOutputStream() - 크기가 32인 byte 배열을 버퍼로 가지는 객체를 생성
- ByteArrayOutputStream(int size) - 주어진 크기의 byte 배열을 같는 객체를 생성 한다.
- void reset() - 바이트 배열을 길이를 0으로 설정한다. 저장되어 있던 내용은 모두 버린다.
- byte[] toByteArray() - 현재 버퍼에 있는 내용을 새로운 바이트의 배열을 생성한 후 복사해서 넘겨준다.
- String toString() - 현재 버퍼에 있는 내용을 String 클래스의 객체를 만들어서 복사한 후 넘겨준다. 바이트 배열에 있는 문자 b는 (char)(b & 0xff)로 처리를 해서 String에 저장한다.
- String toString( int hibyte ) - 현재 버퍼에 있는 내용을 String 클래스의 객체를 만들어서 복사한 후 넘겨준다. 바이트 배열에 있는 문자 b는 (char)(((hibyte & 0xff) << 8) | (b & 0xff))로 처리를 해서 String에 저장한다.
- void writeTo( OutputStream out ) - 지정된 출력 스트림으로 버퍼의 내용을 보낸다.
4.10 DataOutputStream 클래스
이 클래스는 간단한 방식으로 출력 스트림에 자바 기본 데이터형을
출력하는데 유용하다.
- 멤버
- DataOutputStream ( OutputStream out ) - 지정한 스트림으로 출력을 할 수 있는 객체를 만든다.
- int size() - 스트림에 출력할 수 있는 바이트 수를 넘겨준다.
- void writeBoolean( boolean v ) - 스트림에 1바이트 값을 쓴다. 매개변수의 값이 true이면 (byte)1을, false이면 (byte)0을 쓴다.
- void writeByte( int v ) - 스트림에 1바이트를 쓴다.
- void writeBytes( String s ) -스트림에 상위 8비트를 무시하고 쓴다.
- void writeChar( int v ) - 스트림에 2바이트 값을 상위 비트부터 쓴다.
- void writeChars( String s ) - 스트림에 writeChar() 메쏘드 방식으로 쓴다.
- void writeDouble( double v ) - Double 클래스에 있는 doubleToLongBits() 메쏘드를 이용해서 long값으로 바꾼다음 이 값을 스트림에 상위 비트부터 쓴다.
- void writeFloat( float v ) - Float클래스에 있는 floatToIntBits() 메쏘드를 이용해서 int 값으로 변환한 다음 이 값을 스트림에 상위 비트부터 쓴다.
- void writeInt( int v ) - 스트림에 4바이트를 상위 비트부터 쓴다.
- void writeLong( long v ) - 스트림에 8바이트를 상위 비트부터 쓴다.
- void writeShort( int v ) - 스트림에 2바이트를 상위 비트부터 쓴다.
- void writeUTF( String str ) - 2바이트를 writeShort() 메쏘드와 같은 방식으로 스트림에 쓴다.
4.11 PipedOutputStream 클래스
이 클래스는 파이프의 보내는 쪽에 위치한다. 두 쓰레드간의 통신에서
이 클래스는 보내는 쪽에 위치해서 데이터를 보내는 역할을 한다.
- 멤 버
- PipedOutputStream ( PipedInputStream snk ) - 데이터를 수신하는 snk와 연결된 객체를 생성한다.
- void connect( PipedInputStream snk ) - 데이터를 수신하는 입력 스트림과 연결한다.
4.12 PrintStream 클래스
이 클래스는 주로 텍스트로 출력 데이터를 출력하기 위해서 디자인
되었다. 이 클래스에는 다수의 print()와 println()메쏘드가 각각
매개 변수로 서로 다른 자료형을 받아 들이도록 overload 되어 있다.
코드의 구현은 println()메쏘드는 print()메쏘드를 이용하도록 되어
있고, print()메쏘드는 write()메쏘드를 이용해서 출력 하도록 되어
있다. Println()메쏘드와 print()메쏘드는 줄바꿈 기능의 여부이다.
여기서는 println()메쏘드만 설명하도록 하겠다.
- 멤버
- PrintStream( OutputStream out ) - 지정한 스트림으로 출력 할 수 있는 객체를 만든다.
- void println() - 스트림에 줄바꿈 문자를 출력한다.
- void println(boolean b) - b가 true이면 "true"문자열을 출력하고 줄바꿈을 한다..
- void println(char c) - 하위 8비트를 스트림에 출력하고 줄바꿈을 한다.
- void println(char s[]) - 배열의 각 문자를 하위 8비트만 출력하고 줄바꿈을 한다.
- void println(double d) - double 값을 문자열로 바꿔서 출력하고 줄바꿈을 한다.
- void println(float f) - float 값을 문자열로 바꿔서 출력하고 줄바꿈을 한다.
- void println(int i) - int 값을 문자열로 바꿔서 출력하고 줄바꿈을 한다.
- void println(long l) - long 값을 문자열로 바꿔서 출력하고 줄바꿈을 한다.
- void println(Object obj) - 객체의 값을 문자열로 바꿔서 출력하고 줄바꿈을 한다.
- void println(String s) - 문자열이 null인 경우 "null"이 출력되고 그 외의 경우는 각 문자 당 하위 8비트만 출력이 되고 줄바꿈을 한다.
4.13 FileOutputStream 클래스
이 클래스는 파일로 출력을 하기 위해 사용 된다. 쓰기위한 메쏘드들은 OutputStream 클래스와 같다.
여기서는 PrintStream 클래스와 연동하는 예제만 보이도록 하겠다.
5. Java.net 패키지
자바의 네트워킹 기능을 포함하고 있다. TCP는 물론 UDP를 다룰 수 있는
클래스가 제공되며, URL형식으로 데이터를 읽어 올 수 있는
URL관련 클래스들도 제공되고 있다.
5.1 java.net 패키지 구조
- java.net.ContentHandler
- java.net.DatagramPacket
- java.net.DatagramSocket
- java.net.InetAddress
- java.net.ServerSocket
- java.net.Socket
- java.net.SocketImpl
- java.net.URL
- java.net.URLConection
- java.net.URLEncoder
- java.net.URLStreamHandler
5.2 Socket 클래스
이 클래스는 클라이언트의 소켓 구현을 위해 사용된다. 물론 두 컴퓨터
간의 통신에서 양쪽 끝을 담당하는 것이 소켓이다. 따라서 서버 쪽에서도
소켓을 가지고 클라이언트와 통신을 하게 된다.
- 멤 버
- Socket(InetAddress address, int port) - address로 지정된 호스트에 지정된 port로 소켓 연결을 한다.
- Socket(InetAddress address, int port, boolean stream) - address로 지정된 호스트에 저정된 port로 소켓 연결을 한다. stream이 true이면 stream 소켓 연결을, false이면 datagram 소켓 연결을 한다.
- Socket(String host, int port) - host로 지정된 호스트에 저정된 port로 소켓 연결을 한다
- Socket(String host, int port, boolean stream) - host로 지정된 호스트에 저정된 port로 소켓 연결을 한다. stream이 true이면 stream 소켓 연결을, false이면 datagram 소켓 연결을 한다.
- void close() - 소켓의 연결을 닫는다.
- InetAddress getInetAddress() - 소켓이 연결된 곳의 IP주소를 넘겨준다.
- InputStream getInputStream() - 소켓이 연결된 곳에서 데이터를 읽어 올 수 있는 스트림을 넘겨준다.
- int getLocalPort() - 연결된 소켓이 사용하는 포트를 넘겨준다.
- OutputStream getOutputStream() - 소켓이 연결된 곳으로 데이터를 보내기 위한 스트림을 넘겨준다.
- int getPort() - 소켓이 연결된 곳에서 사용하는 포트를 넘겨준다.
TCP/IP 클라이언트
import java.net.*;
import java.io.*;
class Client {
public static void main( String args[] ){
Socket socket = null;
DataInputStream din=null;
String data;
try{
socket = new Socket("disney.misotech.com",7777);
}catch ( UnknownHostException e ){
System.err.println("알수 없는 서버 입니다.");
}catch( IOException e ) {
System.err.println("소켓을 만들 수 없습니다.");
}
try{
din = new DataInputStream( socket.getInputStream() );
}catch( IOException e ){
System.err.println("InputStream을 얻을 수 없습니다.");
}
System.out.println("서버로부터 받은 내용.");
try{
while( (data = din.readLine()) != null ){
System.out.println( data );
}
}catch( IOException e ){
System.err.println("데이터를 읽어 올 수 없습니다.");
}
}
}
5.3 ServerSocket 클래스
이 클래스는 서버쪽의 소켓 구현을 제공한다. 서버 소켓은 클라이언트의
접속 요청이 있을 때까지 기다린다.
5.4 DatagramSocket 클래스
UDP를 이용하여 통신 하고자 할 때 사용할 수 있는 송수신을 위한 메쏘드들을 제공하고 있다.
- 멤버
- DatagramSocket() - 데이터그램 소켓을 만들고, 사용 가능한 포트와 bind한다.
- DatagramSocket(int port) - 지정한 포트를 이용하는 데이터 그램 소켓을 만든다.
- void close() - 소켓을 닫는다.
- int getLocalPort() - local 호스트에서 사용하고 있는 포트 번호를 넘겨준다.
- void receive(DatagramPacket p) - 소켓으로부터 데이터 그램 패킷을 받아 들인다. 이 메쏘드는 수신 될 때까지 기다린다.
- void send(DatagramPacket p) - 소켓으로 데이터그램 패킷을 보낸다.
5.5 DatagramPacket 클래스
UDP를 이용하여 통신 하고자 할 때 DatagramSocket에서 보내는
패킷으로 사용한다.
- 멤 버
- DatagramPacket(byte ibuf[], int ilength) - ilength의 길이를 갇는수신 패킷을 만든다. ilength <= ibuf.length
- DatagramPacket(byte ibuf[], int ilength, InetAddress iaddr,int iport) - ilength의 길이를 갇는 송신 패킷을 만든다.
- InetAddress getAddress() - 패킷을 보낸 컴퓨터의 IP주소를 넘겨준다.
- byte[] getData() - 보내거나 받은 데이터를 넘겨준다.
- int getLength() - 보내거나 받은 데이터의 길이를 넘겨준다.
- int getPort() - 데이터를 보내거나 받은 상대방 호스트의 사용 포트
5.6 URL 클래스
이 클래스를 이용하면 자바 코드에서 웹상의 어느 곳에 있는 자원에나
접근이 가능한다. 또한 프로토콜과 포트를 지정할 수가 있어 어떤
프로토콜도 사용 할 수 있으며 따라서 인터넷 상의 모든 자원에 접근이
가능 할 수 있다.
- 멤 버
- URL( String spec ) - 주어진 문자열을 이용해서 객체를 만든다.
- spec = "http://www.miso.co.kr/~mikimou"
- Object getContent() - URL의 내용을 넘겨준다.
- String getFile() - 연결된 파일의 이름을 넘겨준다.
- String getHost() - 연결된 곳의 컴퓨터 이름을 넘겨준다.
- int getPort() - 연결된 곳의 포트 번호를 넘겨준다.
- String getProtocol() - 사용하고 있는 프로토콜을 넘겨준다.
- String getRef() - reference를 넘겨준다.
- URLConnection openConnection() - remote객체와의 연결을 하고 URLConnection객체를 만든다.
- InputStream openStream() - 연결된 URL로부터 내용을 읽어 올 수 있는 입력 스트림을 넘겨준다.
- boolean sameFile( URL other ) - other와 객체가 같은 resource를 지정하고 있는지 검사한다.
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