Socket & Thread를 이용한 은행 입출금 프로그램







Server 프로그램

ServerBank 폴더 / serverbank 패키지

1. ServerBank 클래스(Main)


package serverbank;

import java.net.*;
import java.util.*;

public class ServerBank {

   
    public static void main(String[] args) {

        ServerSocket serverSocket = null;
 
        ArrayList<ClientInfo> client = null;
       
        client = new ArrayList<ClientInfo>();
        client.add(new ClientInfo(11, "조주희", 5000));
        client.add(new ClientInfo(22, "박선혜", 3000));
        client.add(new ClientInfo(33, "황혜정", 2000));
        client.add(new ClientInfo(44, "장민혜", 4000));
      
        try{
           
            serverSocket = new ServerSocket(9000);
           
            while(true) {
               
                Socket socket = serverSocket.accept();
                Thread thread = new ServerThread(socket, client);
                thread.start();
            }
           
        }
        catch(Exception e) {
           
            System.out.println(e.getMessage());
           
        }
    }

}





2. ClientInfo 클래스


package serverbank;

public class ClientInfo extends ServerBank{
   
    int account;
    String sname;
    int balance;

    ClientInfo(int account, String sname, int balance){
        this.account = account;
        this.sname = sname;
        this.balance = balance;
       
    }

}



3. ServerThread 클래스
package serverbank;

import java.net.*;
import java.util.*;
import java.io.*;

public class ServerThread extends Thread {
   
    static List<PrintWriter> list = new ArrayList<PrintWriter>();
   
    Socket socket;
    int account;
    String sname;
    int balance;
    int depomoney;
    int amount;
    String menu = "< 거래 메뉴 >    1. 예  금     2. 출  금     3. 예금 현황     4. 종  료        ▶ 메뉴번호를 입력해주세요 ";
    int menunum;
    boolean flag = true;
    String err = "잔액이 부족합니다.                                                             ";
   
    PrintWriter writer;
    ArrayList<ClientInfo> client;
  
    ServerThread(Socket socket, ArrayList<ClientInfo> client) {

        this.socket = socket;
        this.client = client;

        try {
            writer = new PrintWriter(socket.getOutputStream());
            list.add(writer);
           
        }
        catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
   
    public void run(){
       
        while(flag) {
           
            try {
               
                BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
               
                //계좌번호를 읽음
                account = Integer.parseInt(reader.readLine());
               
                //계좌번호, 이름, 잔액을 보내기 위해 검색
                Iterator it = client.iterator();
               
                while(it.hasNext()) {
                   
                    try {
                       
                        //ClientInfo 클래스에 한 고객을 객체로 만듬
                        ClientInfo out = (ClientInfo) it.next();
                       
                        //계좌번호를 비교함
                        if(out.account == account) {
                           
                            //계좌번호, 이름, 잔액을 보냄
                            writer.println("* 계좌번호 : " + out.account + " * 이름 : " + out.sname + " * 잔액 : " + out.balance);
                            writer.flush();
                           
                            flag = true;
                            while(flag) {
                               
                                //메뉴를 보냄
                                writer.println(menu);
                                writer.flush();
                               
                                //메뉴번호를 받음
                                menunum = Integer.parseInt(reader.readLine());
                               
                                //메뉴를 선택했을 때 내용
                                switch(menunum) {
                                   
                                    //입금 메뉴
                                    case 1:
                                       
                                        //입금액을 읽어옴
                                        depomoney = Integer.parseInt(reader.readLine());
                                       
                                        //잔액에 입금액을 더해줌
                                        out.balance += depomoney;
                                       
                                        writer.println("현재 잔액은 "+ out.balance+"원 입니다.");
                                        writer.flush();
                                       
                                        break;
                                       
                                    //출금 메뉴
                                    case 2:
                                       
                                        //출금액을 읽어옴
                                        amount = Integer.parseInt(reader.readLine());
                                       
                                        //출금액이 잔액보다 클 경우
                                        if(out.balance < amount) {
                                       
                                            //에러 메시지를 보냄
                                            writer.println(err+menu);
                                            writer.flush();
                                           
                                        }
                                           
                                        //그렇지 않을 경우 잔액에 출금액을 빼줌   
                                        else {
                                           
                                            out.balance -= amount;
                                            writer.println("현재 잔액은 "+ out.balance+"원 입니다.");
                                            writer.flush();
                                        }
                                       
                                        break;
                                       
                                    //예금현황 메뉴
                                    case 3:
                                       
                                        writer.println(out.account);
                                        writer.flush();
                                       
                                        writer.println(out.sname);
                                        writer.flush();
                                       
                                        writer.println(out.balance);
                                        writer.flush();
                               
                                        break;
                                       
                                    //1,2,3입력 받지 않은 경우 종료   
                                    default:
                                       
                                        flag = false;                             
                                }   
                               
                            }
                        }   
                    }
                    catch(Exception e) {
                        System.out.println(e.getMessage());
                    }
                }
            }
            catch(Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }



Client 프로그램

ClientBank 폴더 / clientbank 패키지

1. ClientBank 크래스 ( Main)


package clientbank;

import java.net.*;

public class ClientBank {
   
    public static void main(String[] args) {
       
        try {
           
            Socket socket = new Socket("127.0.0.1", 9000);
            Thread thread = new ClientThread(socket);
            thread.start();
        }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

}



2. ClientThread 클래스

package clientbank;

import java.net.*;
import java.io.*;

public class ClientThread extends Thread{  

    Socket socket;
    int account;
    String sname;
    int balance;
    int depomoney;
    int amount;
    String menu = null;
    int menunum;
    boolean flag = true;   
   
    ClientThread(Socket socket) {
        this.socket = socket;
    }
   
    public void run() {
       
       while(flag) {

           try{
           
                BufferedReader reader = new BufferedReader (new InputStreamReader(socket.getInputStream()));
                BufferedReader in = new BufferedReader (new InputStreamReader(System.in));
                PrintWriter writer = new PrintWriter(socket.getOutputStream());
           
                System.out.println("계좌번호를 입력해주세요");
               
                //계좌번호를 입력받음
                account = Integer.parseInt(in.readLine());
               
                //계좌번호를 보냄
                writer.println(account);
                writer.flush();
               
                // 계좌번호, 이름, 잔액을 읽음
                Object client = reader.readLine();
                System.out.println(client);   
                   
                flag = true;
                while(flag) {
                   
                    //메뉴를 읽음
                    menu = reader.readLine();
                    System.out.println(menu);
                   
                    //메뉴번호를 입력받음
                    menunum = Integer.parseInt(in.readLine());
                   
                    //메뉴번호를 보냄
                    writer.println(menunum);
                    writer.flush();
                   
                    //선택할 수 있는 메뉴 내용
                    switch(menunum) {
                       
                        //입금메뉴
                        case 1:
                           
                            //입금액을 입력받음
                            System.out.println("* 입금액 :");
                            depomoney = Integer.parseInt(in.readLine());
                           
                            //입금액을 보냄
                            writer.println(depomoney);
                            writer.flush();
                           
                            System.out.println(reader.readLine());
                            System.out.println("    ");
                           
                            break;
                           
                        //출금메뉴
                        case 2:
                           
                            //출금액을 입력받음
                            System.out.println("* 출금액 :");
                            amount = Integer.parseInt(in.readLine());
                           
                            //출금액을 보냄
                            writer.println(amount);
                            writer.flush();
                           
                            System.out.println(reader.readLine());
                            System.out.println("    ");
                           
                            break;
                           
                        //예금현황 메뉴
                        case 3:
                           
                            //계좌번호를 읽음
                            account = Integer.parseInt(reader.readLine());
                           
                            //이름을 읽음
                            sname = reader.readLine();
                           
                            //잔액을 읽음
                            balance = Integer.parseInt(reader.readLine());
                           
                            //예금현황 형식
                            System.out.println("-----------*예금 현황*------------");
                            System.out.println(" 계좌번호        이름         잔액 ");
                            System.out.println("    " + account + "         " + sname + "         " + balance);
                            System.out.println("---------------------------------");
                           
                            break;
                           
                        default:
                           
                            flag = false;
                    }
                   
                }              
           }
           catch(Exception e) {
           System.out.println(e.getMessage());
           } 
       }
    }
}

by 씩씩한아이 | 2009/02/11 18:13 | JAVA | 트랙백 | 덧글(0)

Object 클래스


1. Object 클래스 : 여러 클래스의 공통된 특성(공통 필드&메서드)을 추출해서 만들어 놓은 클래스를 Object클래스라고 한다. 다른 모든 클래스들은 Object 클래스를 상속받도록 만들어져 있다. 그렇기 때문에 Object를 제외한 자바의 모든 클래스는 직접 또는 간접적으로 Object의 자식클래스가 된다.

2. Object 클래스의 메서드

 (1) toString 메서드 : 객체가 가지고 있는 값을 문자열로 만들어서 리턴하는 메서드이다. ( 예: String str = obj.toString(); )
    ① Object 클래스에 있는 toString메서드가 public로 선언되어 있기 때문에 toString메서드 앞에 public키워드를 붙어야 한다.     
    ② 자동으로 호출되는 toString메서드 : 문자열과 다른 종류의 객체를 + 연산자로 연결 할 경우 ( 예: String str = "재고 =" + obj; )

 (2) equals 메서드 : 객체가 가지고 있는 값을 비교하는 데 사용하는 메서드, 문자열 또는 객체를 비교할 경우 사용한다.
    ( 예: obj1.equals(obj2) )

 (3) clone 메서드 : 객체를 복제하는데 사용하는 메서드이다. 똑같은 값을 갖는 객체를 하나 더 만들 수 있다. 
    ( 예: GregorianCalendar obj2 = (GregorianCalendar) obj1.clone(); )
    ① 이 메서드는 복제 가능한 클래스에 대해서만 호출할 수 있다. (Cloneable 인터페이스를 구현하는 클래스만이 복제 가능한
    클래스이다.)
    ② 복제가능한 클래스는 Cloneable 인터페이스를 구현하도록 만드는 것과 이 클래스가 Object 클래스로부터 상속받은 clone 
    메서드를 오버라이드하는 방법으로 만들 수 있다.

 (4) finalize 메서드 : 객체가 제거되기 전에 자동으로 호출되는 메서드이다.
    ① 가비지 컬렉터(garbage collector) : 객체를 변수에 대입할 경우 그 변수에는 객체가 담기는게 아니라 객체의 참조값이 저장
    된다. 실제로 객체는 힙이라는 메모리 영역에 저장된다. 객체의 참조값은 힙안에 있는 객체 위치를 찾을 때 사용된다. 힙이 가비
    지로 가득 차서 새로운 객체를 생성할 메모리가 부족하거나, 프로그램에서 특별히 할 일이 없을 경우 임의로 작동하여 힙에 있는
     가비지를 자동적으로 제거한다.
    ② finalize 메서드를 오버라이드해 놓으면 가비지 컬렉터가 객체를 제거하기 전에 자동으로 특정 메서드를 호출한다.
    
 (5) getClass 메서드 : 객체가 속하는 클래스의 정보를 알아내어 Class 타입의 객체로 만들어서 리턴하는 메서드 이다.
    ( 예: Class cls = obj.getClass();  - 객체가 속하는 클래스 정보를 리턴한다)
    ① String str = cls.getName(); - 클래스의 이름을 가져오는 메서드이다.
    ② Class superCls = cls.getSuperclass(); - 슈퍼클래스의 정보를 가져오는 메서드이다.
    ③ Field field[] = cls.getDeclaredFields(); - 클래스에 선언되어 있는 필드정보를 가져오는 메서드이다.
    ④ Method method[] = cls.getDeclaredMethods(); - 클래스에 선언되어 있는 메서드 정보를 가져오는 메서드이다.



    
hashCode
wait
notify
notifyAll

by 씩씩한아이 | 2009/02/02 22:08 | JAVA | 트랙백 | 덧글(2)

Exception 클래스


1. 정의 : 자바에서 프로그램 실행 중에 발생하는 에러를 익셉션(Exception, 예외)이라 한다.

2. 발생 : 메서드 호출에 발생할 수도 있으며, throw문을 이용하여 인위적으로 발생시킬 수도 있다.

3. 처리 : try-catch 문에 의해 처리되거나 메서드 밖으로 던져진다. 던져진 익셉션은 그 메서드 호출문이 속하는 try-catch문에 의해 처리되거나 다시 메서드 밖으로 던져진다. 이렇게 계속 메서드 밖으로 던져진 익셉션은 try-catch문에 의해 처리되고 나면 소멸되지만 try-catch문이 처리하지 못한 익셉션은 main 메서드 밖으로 던져진다. 그렇게 되면 자바 가상 기계가 그 익셉션을 잡아서 에러메시지를 출력하고 프로그램을 종료한다.

4. 익셉션 객체와 익셉션 클래스 : 

    (1) 익셉션 객체 : 자바 프로그램에서 익셉션은 객체로 표현된다. 그런 객체를 익셉션 객체라고 한다.

    ① 익셉션 객체 생성 : throw new Exception("재고가 부족합니다.");
    ② throw 문으로 던져진 익셉션은 Exception 타입의 변수를 이용해 잡는다. : catch(Exception e) { ... }

    (2) 익셉션 클래스 : 자바에서는 익셉션을 만들 수 있는 클래스를 다른 클래스와 구분하여 익셉션 클래스라고 한다.
    익셉션을 만들 수 있는 클래스는 Throwable 클래스의 서브 클래스만 익셉션 클래스가 될 수 있다.

5. 익셉션의 종류    

    (1) Exception 클래스와 Exception의 서브클래스들은 비교적 덜 심각한 익셉션을 표현한다.
    (2) Error클래스와 Error의 서브 클래스들은 상대적으로 심각한 익셉션을 표현한다. 에러라고 부르기도 하는데 발생위치를 파악
    하기도 어렵고 복구하기도 어렵기 때문에 사실상 try-catch문으로 처리가 불가능하다.

    (3) checked exception
    (4) unchecked exception

6. 익셉션 클래스의 사용방법

    (1) 익셉션 클래스의 메서드 : Throwable 클래스에 몇몇 메소드들이 선언되있다. 그 메서드들은 모든 서브클래스에 상속되기 
    때문에 모든 종류의 익셉션 객체에 대해 호출할 수 있다.

    ① getMessage 메서드 : 에러메시지를 가져오는 메서드 ( 예 : String str = e.getMessage(); )
        throw new Exception(); - 에러 메시지를 포함하지 않는 Exception 객체를 생성
        throw new Ecception("잘못된 값입니다."); - 에러 메시지를 포함하는 Exception 객체륵 생성
        - 정수를 0으로 나누면 /by zero 라는 에러메시지가 출력된다.

    ② printStackTrace 메서드 : getMessage 메서드가 리턴하는 간단한 에러 메시지보다 더 상세한 익셉션 정보를 알고 싶을 때
        사용하는 메서드 (예 :  e.printStackTrace(); )

    (2) 익셉션 파라미터 변수의 다형성

    ① 익셉션 파라미터 변수 : catch 절에서 익셉션을 받을 때 사용하는 변수, 익셉션 객체를 대입할 수 있는 타입으로 선언해야
        한다. ( 예 : catch(ArithmeticException e) {
        - FileNotFoundException은 IOException의 서브클래스이기 때문에 IOException타입의 익셉션 파라미터 변수는 
        FileNotFoundException도 잡을 수 있다.

7. 익셉션 클래스의 선언 방법 

    (1) checked exception으로 만드는 것이 가장 좋다.  checked exception을 선언할 때는 Exception 클래스를 상속받아 선언]
    해야 한다.

    (2) 사용 예

    class InvalidInputEcception extends Exception {
         InvalidInputEcception() {
            super("잘못된 입력입니다.");
        }
    }

    



by 씩씩한아이 | 2009/02/01 16:26 | JAVA | 트랙백 | 덧글(0)

배열, ArrayList, LinkedList를 비교분석 & HashTable

<배열>

1. 정의 : 데이터 타입이 모두 같고, 사용하는 목적도 비슷하다면 모든 데이터를 한 곳에 저장해두고 하나의 변수를 가지고 사용하는 것을 말한다. 배열에는 1차원배열과 다차원 배열이 있다.

2. 배열의 특징
   ① 둘이상의 변수를 선언하는 효과를 지닌다.    
   ② 많은 양의 데이터를 일괄적으로 처리해야 하는 경우에 유용하다.
   ③ 지역적 특성을 지닐 수 있고, 전역적 특성을 지닐 수도 있다.

3. 배열 선언, 생성, 이용
 (1) 배열의 선언 : 배열도 변수처럼 선언을 해야 사용할 수 있다. 
      형식 - 타입 식별자[]; ( 예:  int arr[]; )
 
 (2) 배열의 생성 : 자바에서는 배열을 생성해서 배열 변수에 대입해야 한다.
      형식 - new 타입[크기]; ( 예:  arr = new int[10]; )

 (3) 배열 이용 : 배열을 생성해서 배열 변수에 대입히가 난 다음에 배열을 사용할 수 있다.
      형식 - 배열이름[인덱스]; ( 예: arr[0] = 12; )

4. 배열을 생성해야 하는 이유 : 자바에서는 프리미티브 타입의 변수를 선언하면 그와 동시에 데이터를 젖아할 수 있는 메모리가 확보된다. 그렇기 때문에 프리미티브 타입의 변수를 선언하고 나서 바로 값을 대입할 수 있다. 하지만 배열 변수의 경우에는 선언을 해도 배열 항목을 위한 메모리가 확보되지 않는다. 그 대신 단 하나의 값을 저장할 수 있는 메모리가 확보되는데 그 메모리도 배열 항목을 위한 메모리가 아니기 때문에 배열 항목의 메모리를 확보하는 일은 따로 해야한다. 그 일이 배열의 생성식이다. 배열 변수를 선언할 때 확보했던 메모리는 배열 생성식의 결과를 담는데 사용된다.
 
<ArrayList>

1. 정의 :

2. ArrayList 특징 (처리하는 데이터의 갯수가 변하지 않는 경우 사용)
   ① 자료의 내부적인 자동 동기화 기능이 없다.
   ② 내부적으로 자료를 배열구조로 가지고 있는 객체로 데이터의 추가/삭제를 위해 내부적 임시배열을 작성 후 데이터를 복사
    하는 방법을 사용한다.
   ③ 레퍼런스 타입의 데이터만 저장할 수 있다.
   ④ 데이터 내용의 중복이 능하다. null값을 허용한다.
   ⑤ 단점 :  대량의 자료를 추가/삭제하는 경우에 내부적인 처리량이 늘어나서 상당한 성능저하를 가져온다.
    장점 : 각 데이터의 인덱스를 가지고 있기 때문에, 필요한 데이터의 접근이 한번만에 가능하다. 많은 데이터를 한 번에 다 
    가져와서 여러번 참조해 쓸 때 최상의 성능을 나타낸다.

3. ArrayList 선언, 생성, 이용 
 
 (1) 선언 : 리스트에 저장할 데이터의 타입을 정한다.

 (2) 생성 타입 파라미터를 정했으면 ArrayList객체를 생성한다. 클래스 이름 뒤에 꺽쇠 괄호를 쓰고, 그 안에 타입파라미터를 쓴다.
      ArrayList<String> list = new ArrayList<String>(); 

 (3) 이용
    ① add 메서드 : 데이터 추가 ( 예 : list.add("포도")'; )
    ② get  메서드 : 데이터를 가져오는 것 ( 예 : String str = list.get(2); )
    ③ size 메서드 : 데이터의 수를 알아내는 것 ( 예 : int num = list.size(); )
 
4. ArrayList 데이터를 삽입/ 수정/ 삭제하는 방법
    
 (1) add : 데이터 삽입  ( 예 : list.add(2,"키위"); )
 
 (2) set : 데이터 수정 ( 예 : list.set(0, "오렌지"); )

 (3) remove : 데이터 삭제 ( 예 : list.remove(1); )

5. ArrayList 데이터를 검색하는 방법

 (1) indexOf : 검색할 데이터와 똑같은 값의 데이터를 파라미터로 넘겨주면 리스트에서 똑같은 값을 갖는 첫번째 데이터를 찾아서 
  그 위치의 인덱스를 리턴한다. ( 예 : int index = list.indexOf("사과"); )

<LinkedList>

1. 정의 :

2. LinkedList 특징 (처리하는 데이터의 갯수가 변하는 경우 사용)

    ① 다음에 나올 자료의 위치정보만 가지고 있고, 내부적인 인덱스는 가지고 있지 않다.
    ② 단점 : 데이터가 많은 경우의 검색 시 처음 자료로 부터 순차적으로 찾아 나가야하기 떄문에 성능이 저하된다.   
     장점 : 데이터의 추가/삭제는 위치정보의 수정만으로 가능하기 때문에 정보의 추가/삭제 처리가 필요할 때 유용하다.

3. LinkedList 선언, 생성, 이용 
 
 (1) 선언 : 리스트에 저장할 데이터의 타입을 정한다.

 (2) 생성타입 파라미터를 정했으면 LinkedList객체를 생성한다. 클래스 이름 뒤에 꺽쇠괄호를 쓰고, 그 안에 타입파라미터를 쓴다.
      LinkedList <String> list = new LinkedList<String>(); 

 (3) 이용
    ① add 메서드 : 데이터 추가 ( 예 : list.add("포도")'; )
    ② get  메서드 : 데이터를 검색 ( 예 : String str = list.get(2); )
    ③ size 메서드 : 데이터의 수를 알아내는 것 ( 예 : int num = list.size(); )


4. LinkedList 데이터를 삽입/ 수정/ 삭제하는 방법
    
 (1) add : 데이터 삽입  ( 예 : list.add(2,"키위"); )
 
 (2) set : 데이터 수정 ( 예 : list.set(0, "오렌지"); )

 (3) remove : 데이터 삭제 ( 예 : list.remove(1); )

5. LinkedList 데이터의 순차 접근
 
 (1) Iterator : Iterator 타입의 객체를 리턴하는 메서드
    Iterator<String> iterator = list.iterator();

 (2) next : next라는 메서드를 호출해서 LinkedList의 데이터를 순서대로 읽어올수 있다. Iterator를 통해 데이터를 읽어오는 메서드
    String str = iterator.next();

 6. LinkedList 스택/ 큐로 사용하는 방법

 (1) 스택(stack) : 리스트처럼 일차원적으로 데이터를 저장하는 자료구조로 가장 나중에 넣었던 데이터를 가장 먼저 꺼내는 LIFO 
    방식을 사용한다.
    LinkedList <String> stack = new LinkedList<String>(); 

    ① addLast : 스택의아래쪽으로 부터 순서대로 저장 ( 예 : list.addLast(new Integer(12); )
    ② removeLast : 스택의 제일 위에 있는 데이터를 가져오면서 스택에 데이터를 제거 ( 예 : Integer obj = removeLast(); )
    ③ getLast : 스택의 제일 위에 있는  데이터를 가져오면서 스택에 데이터를 제거하지 않는다. ( 예 : Integer obj = getLast(); )

 (2) 큐( queue) : 가장 처음 넣었던 데이터를 가장 먼저 꺼내는 FIFO 입출력 방식을 사용한다.
    LinkedList <String> queue = new LinkedList<String>(); 
    
    ① offer : 파라미터로 넘겨준 데이터를 큐에 저장( 예 : queue.offer("토끼"); )
    ② poll : 큐에 저장된 데이터 중 제일 앞에 있는 데이터를 가져오면서 큐에 데이터를 제거한다.( 예 : str = queue.poll(); )
    ③ peek: 큐에 저장된 데이터 중 제일 앞에 있는 데이터를 가져오면서 큐에 데이터를 제거하지 않는다.
     ( 예 : str = queue.peekt(); )


<HashTable>

1. 정의 : 여러 개의 통에 번호를 붙여놓고, 키 값을 이용하여 데이터가 들어갈 통 번호를 계산하는 자료구조이다.

2. HashMap 클래스의 사용 방법

 (1) 해쉬 테이블에 저장할 데이터 타입과, 키 타입 두 가지 데이터 타입을 정해야 한다.

 (2) 타입들을 이용해 HashMap 객체를 생성한다.
      형식 - HashMap<키의타입, 데이터의 타입> 해쉬테이블 이름 = new HashMap<키의 타입, 데이터의 타입>();
      ( 예 : HashMap<String, Integer> hashtable = new hashmap<String, Integer>(); )

3. HashMap 사용

 (1) put : HashMap에 데이터를 저장 할 때 사용한다. (예 : hashtable.put("해리", new Integer(95)); )

 (2) get : 해쉬테이블에 저장된 데이터를 읽어오기 위해 사용한다. ( 예 : Integer num = hashtable.get("해리"); )

 (3) remove : 해쉬테이블에 있는 데이터를 삭제 할 때 사용한다. ( 예 : hashtable.remove("해리"); ) 

4. HashMap 클래스가 해쉬 테이블의 통번호를 계산하는 방법 : hashCode 메서드를 사용

5. HashSet 클래스의 사용방법

 (1) 해쉬 테이블에 저장할 데이터 타입과, 키 타입 두 가지 데이터 타입을 정해야 한다.

 (2) 타입들을 이용해 HashSet 객체를 생성한다.
      형식 - HashSet<키의타입, 데이터의 타입> 해쉬테이블 이름 = new HashSet<키의 타입, 데이터의 타입>();
      ( 예 : HashSet<String, Integer> set = new hashset<String, Integer>(); )

6. HashSet 사용

 (1) add: HashSet에 데이터를 저장 할 때 사용한다. (예 : set.add("자바"); )

 (2) size : HashSet에 있는 데이터의 수를 알고 싶을 때 사용한다. ( 예 : int num = set.size(); )

 (3) contains : 집합에 특정 데이터가 있는지 확인할 떄 사용한다.

 (4) remove : 특정 데이터를 삭제할 때 사용한다.

 (5) clear : 집합에 있는 모든데이터를 삭제하고 집합을 비운다.


* 정리*
 

종류

특징

ArrayList

배열 기반, 데이터의 추가와 삭제 유용하지 못함, 순차적인 추가 삭제는 제일 빠름, 인덱스가 있어 임의의 요소에 대한 접근성이 뛰어남.

LinkedList

연결 기반, 데이터의 추가와 삭제에 유용함, 임의의 요소에 대한 접근성이 좋지 못함.

HashMap

배열과 연결이 결합된 형태, 추가, 삭제, 검색, 접근성이 모두 뛰어남, 검색에는 최고 성능을 보인다.

HashSet

HashMap을 이용해서 구현



* 클래스 상관 관계







http://www.javacafe.or.kr/lecture/cafeLecture/general/My%20Webs/Collection%20Framework.htm

by 씩씩한아이 | 2009/02/01 13:41 | JAVA | 트랙백 | 덧글(1)

한글 API 사이트 주소

한글 API 사이트 주소

http://xrath.com/javase/ko/6/docs/ko/api/

by 씩씩한아이 | 2009/01/12 19:50 | API | 트랙백 | 덧글(0)

◀ 이전 페이지          다음 페이지 ▶