JAVA/주요 패키지

java.util.Random 클래스

여러 형태의 난수를 발생시켜 제공하는 클래스이다. Math 클래스의 정적 메소드인 random() 메소드도 난수를 제공하는 메소드이지만 0.0 ~ 1.0 사이의 실수 형태만 발생하게 되므로 필요한 여러 형태의 난수를 만들어내기 위해서는 추가적인 연산들을 수행해야 한다. 그래서 자바는 여러 형태의 난수를 발생시켜주는 전용 클래스 Random 클래스를 별도로 제공하고 있다.

 


Random 클래스의 메소드

 

흔히 사용가능한 메소드는 다음과 같다.

(nextInt의 경우 매개변수 없이 실행할 경우 int의 전체 범위내에서 난수를 발생한다.)

(밑의 표에는 없지만 IntStream, DoubleStream, LongStream으로 반환하는 메소드들도 존재한다.)

(Random클래스가 아닌 Math에도 nextDouble() 메소드와 같은 역할을 하는 random()이 존재한다.)

boolean nextBoolean()

 boolean형 난수 반환 

 int nextInt()

 int형 난수 반환 

 long nextLong() 

 long형 난수 반환

 int nextInt(int n)

 0이상 n미만의 범위내에 있는 int형 난수 반환 

 float nextFloat() 

 0,0이상 1.0미만의 float형 난수 반환 

 double nextDouble() 

 0.0이상 1.0미만의 double형 난수 반환 


※ 로또 번호 생성기를 구현한다.
   프로그램이 실행되면 기본적으로 로또를 5게임 수행하는 프로그램을 구현한다.

 실행 예) 
 3 5 12 24 31 41
 1 2 8 23 36 38
 4 9 11 13 22 30
 5 10 13 15 27 40
 22 3 32 33 40 45
 계속하려면 아무 키나 누르세요...

 


 

import java.util.Random;
import java.util.Arrays;

class Lotto
{
	// 배열 변수 선언 및 메모리 할당
	// → 로또 번호를 담아둘 배열방 6칸
	private int[] num = new int[6];
	
	// private 으로 선언된 num 값을 얻어내기 위한 메소드
	// → getter
	public int[] getNum()
	{
		return num;
	}

	// 6개의 난수를 발생시키기 위한 메소드
	public void start()
	{
		Random rd = new Random();
		int n;
		int cnt = 0;
		
		jump:

		while(cnt<6)
		{
			n = rd.nextInt(45)+1;	// 1 ~ 45 중 한 개 발생

			for (int i = 0; i < cnt; i++)
			{
				if (num[i] == n)
				{
					continue jump;
				}
			}
			num[cnt++] = n;
		}
		// 정렬 메소드 호출
		sorting();
	}

	// 정렬 메소드
	private void sorting()
	{
		// Arrays 클래스의 정적 메소드 sort() 호출하며
		// 멤버인 num 을 매개변수로 넘겨주기
		Arrays.sort(num);
	}
}


public class Test151
{
	public static void main(String[] args)
	{
		// Lotto 클래스 기반 인스턴스 생성
		Lotto lotto = new Lotto();

		// 기본 5게임
		for (int i = 1; i <= 5; i++)
		{
			lotto.start();

			// 결과 출력
			for (int n : lotto.getNum())
			{
				System.out.printf("%4d", n);
			}
			System.out.println();
		}	
	}	
}

 

실행 결과

// 실행 결과
/*
   7   9  12  14  26  31
  10  11  13  25  39  42
   7   8  12  19  29  34
   9  10  13  17  19  24
   3   4  16  20  33  34
계속하려면 아무 키나 누르십시오 . . .
*/

java.lang.Math 클래스

수학(Mathmatics)과 관련된 유용한 속성과 함수들을 제공하는 클래스로 생성자가 있긴 하지만... 이 생성자는 『private』으로 선언되어 있기 때문에 외부에서 객체(인스턴스)를 생성할 수 없다.
단, 모든 메소드가 『static』으로 정의되어 있으므로 객체를 생성하지 않고 클래스의 이름을 통해 바로 접근하여 사용하는 것이 가능하다.

 

 

주요 상수 및 메소드

상수

- public static final double E = 2.71...;
     : 자연 로그 상수

- public static final double PI = 3.141592...;
     : 원주율 (π)
 

메소드

- public static double sin(double a)
- public static double cos(double a)
- public static double tan(double a)
  : sin(a), cos(a), tan(a) 값을 반환한다. (삼각함수)
   
- public static double asin(double a)
- public static double asin(double a)
- public static double asin(double a)
  : asin(a), acos(a), atan(a) 값을 반환한다. (삼각함수의 역함수)

- public static double toRadians(double angdeg)
  : 각도(angdeg)를 라디안(radian)으로 바꾸어 반환한다.
- public static double toDegrees(double angrad)
  : 라디안(angrad)을 각도로 바꾸어 반환한다.

- public static double exp(double a)
  : e 의 a 승을 구하여 반환한다.

- public static double log(double a)
  : 로그(log) 값을 구하여 반환한다
   
- public static double sqrt(double a)
  : a 의 제곱근을 구하여 반환한다.

- public static double ceil(double a)
  : a 보다 크거나 같은 정수를 반환한다. (올림의 개념)
   
- public static double (double a)
  : a 보다 작거나 같은 정수를 반환한다. (절삭의 개념)

- public static double pow(double a, double b)
  : a 의 b 승을 구하여 반환한다.

- public static int round(float a)
  public static long round(float a)
   : a를 반올림 하여 결과값을 반환한다.

- public static double random(double a)
   : 0.0 ~ 1.0 사이의 난수(임의의 실수)를 발생시켜 반환한다.

 

- public static int abs(int a)

  public static double abs(double a)

  :

  : 전달된 값이 음수이면 그 값의 절댓값을 반환하며, 전달된 값이 양수이면 전달된 값을 그대로 반환한다.

 

- public static int max(int a, int b)

  public static long max(long a, long b)

  : 

  : 전달된 두 값을 비교하여 큰 값을 반환한다

- public static int min(int a, int b)

  public static int min(int a, int b)

  :

  : 전달된 두 값을 비교하여 작은 값을 반환한다


public class Test150
{
	public static void main(String[] args)
	{
		System.out.println("원주율     : " + Math.PI);
		System.out.println("2의 제곱근 : " + Math.sqrt(2));
		//--==>> 원주율     : 3.141592653589793
		//		 2 제곱근 : 1.4142135623730951

		System.out.println("  파이에 대한 Degree : " + Math.toDegrees(Math.PI));
		System.out.println("2 파이에 대한 Degree : " + Math.toDegrees(2.0*Math.PI));
		//--==>>  파이에 대한 Degree : 180.0
		//		2 파이에 대한 Degree : 360.0

		double radian45 = Math.toRadians(45);
		// 각도를 라디안으로 변환~!!!

		System.out.println("싸인   45 : " + Math.sin(radian45));
		System.out.println("코싸인 45 : " + Math.cos(radian45));
		System.out.println("탄젠트 45 : " + Math.tan(radian45));
		//--==>> 싸인   45 : 0.7071067811865475
		//		 코싸인 45 : 0.7071067811865476
		//		 탄젠트 45 : 0.9999999999999999

		System.out.println("로그 25 : " + Math.log(25));
		//--==>> 로그 25 : 3.2188758248682006

		System.out.println("2의 4승 : " + Math.pow(2, 4));
		//--==>> 2의 4승 : 16.0

		System.out.println("0.0 ~ 1.0 사이의 난수 : " + Math.random());
		//--==>> 0.0 ~ 1.0 사이의 난수 : 0.14236921211523157
		//		 0.0 ~ 1.0 사이의 난수 : 0.47056127764887945

	}
}

※ 오늘 날짜를 기준으로 입력받는 날짜만큼 후의 연, 월, 일, 요일을
 확인하야 결과를 출력하는 프로그램을 구현한다.

 실행 예)
 오늘 날짜 : 2020-8-28 금요일
 몇 일 후의 날짜를 확인하고자 하십니까? : 200

 ========[ 확인 결과 ]=========
 200일 후 : 2021-xx-xx x요일
 ==============================
 계속하려면 아무 키나 누르세요...

 ※ 현재 날짜를 기준으로 날 수를 더하는 연산 메소드
    『객체.add(Calendar.DATE, 날 수)』


import java.util.Calendar;
import java.util.Scanner;

public class Test149
{
	public static void main(String[] args)
	{
		// Scanner 클래스 기반 인스턴스 생성
		Scanner sc = new Scanner(System.in);

		// Calendar 클래스 기반 인스턴스 생성
		Calendar now = Calendar.getInstance();

		// 주요 변수 선언
		int nalsu;			//-- 사용자로부터 입력받은 날 수
		int y,m,d,w;		//-- 연, 월, 일, 요일
		String week[] = {"일","월","화","수","목","금","토"};
		// 현재의 연, 월, 일, 요일 확인(가져오기 → get())
		y = now.get(Calendar.YEAR);
		m = now.get(Calendar.MONTH) + 1;		// check~!!!
		d = now.get(Calendar.DATE);
		w = now.get(Calendar.DAY_OF_WEEK);

		// 현재의 연, 월, 일, 요일 확인결과 출력
		System.out.println("오늘 날짜 : " + y + "-" + m + "-" + d + " " + week[w-1] + "요일");

		do
		{
			System.out.print("몇 일 후의 날짜를 확인하고자 하십니까? : ");
			nalsu = sc.nextInt();
		}
		while (nalsu < 1);

		// check~!!!
		now.add(Calendar.DATE, nalsu);

		// 최종 결과 출력
		System.out.println();
		System.out.println("========[ 확인 결과 ]=========");
		System.out.printf("%d일 후 : %tF %tA\n", nalsu, now, now);
		System.out.println("==============================");

	}
}

실행 결과

//실행결과
/*
오늘 날짜 : 2020-8-28 금요일
몇 일 후의 날짜를 확인하고자 하십니까? : 20

========[ 확인 결과 ]=========
20일 후 : 2020-09-17 목요일
==============================
계속하려면 아무 키나 누르십시오 . . .
*/

 

※ 사용자로부터 연, 월을 입력받아 달력을 그려주는(출력하는) 프로그램을 구현한다.
 단, 만년달력이 아니라 Calendar 클래스를 활용하여 작성할 수 있도록 한다.
 (API Document 적극 참조~!!!)

 실행 예)
 연도 입력 : 0
 연도 입력 : 2020
 월   입력 : -2
 월   입력 : 16
 월   입력 : 8

실행결과 예


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Calendar;

public class Test148
{
	public static void main(String[] args) throws IOException
	{
		//BufferedReader 클래스 기반 인스턴스 생성
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		// Calendar 클래스 기반 인스턴스 생성
		Calendar cal = Calendar.getInstance();

		// 주요 변수 선언
		int y,m;		//-- 년, 월
		int w;			//-- 요일
		int i;			//-- 루프, 변수

		do
		{
			System.out.print("연도 입력 : ");
			y = Integer.parseInt(br.readLine());
		}
		while (y<1);

		do
		{
			System.out.print("월    입력 : ");
			m = Integer.parseInt(br.readLine());
		}
		while (m < 1 || m > 12);
		
		// 사용자로부터 입력받은 연(y), 월(m)을 이용하여
		// 달력 객체의 날짜 세팅
		cal.set(y,m-1,1);
		//-- 월 구성 시 입력값(m)을 그대로 사용하는 것이 아니라
		//   입력값에서 1을 뺀 값으로 월을 설정해야 한다.
		
		// 세팅된 달력 객체로부터 요일 가져오기
        w = cal.get(Calendar.DAY_OF_WEEK);

		// 테스트(확인)
		//System.out.println(w);
		//--==>> 연도 입력 : 2020
		//       월   입력 : 8
		//        7 → 2020년 8월 기준 → 토요일 → 2020년 8월 1일 → 토요일
		
		// Calendar 클래스의 『getActualMaximum()』 메소드 check~!!!
		// 테스트(확인)
		System.out.println(cal.getActualMaximum(Calendar.DATE));
		//--==>> 31


		// 결과 출력 → 달력 그리기
		System.out.println();
		System.out.println("\t[ " + y + "년 " + m + "월 ]\n");
		System.out.println("  일  월  화  수  목  금  토");
		System.out.println("============================");

		// 공백 발생
		for (i = 1; i < w; i++)
		{
			System.out.print("    ");
		}

		// 테스트(확인)
		//System.out.printf("%4d",1);

		// Calendar 클래스의 『getActualMaximum()』 메소드 활용
		for (i=1; i <= cal.getActualMaximum(Calendar.DATE); i++)
		{
			System.out.printf("%4d",i);
			w++;		//-- 반복문을 수행하며 날짜가 증가할 때 마다
						//   요일도 함께 증가해 나갈 수 있도록 처리

			if (w%7==1) //-- 증가한 요일이 일요일이 될 때 마다... 개행 후 출력
				System.out.println();		//-- 개행
		}
		if(w%7!=1)
			System.out.println();			//-- 개행

		System.out.println("=============================");

	}
}

실행 결과

 

// 실행 결과
/*
연도 입력 : 2020
월    입력 : 2
29

        [ 2020년 2월 ]

  일  월  화  수  목  금  토
============================
                           1
   2   3   4   5   6   7   8
   9  10  11  12  13  14  15
  16  17  18  19  20  21  22
  23  24  25  26  27  28  29
=============================
계속하려면 아무 키나 누르십시오 . . .
*/

java.util.Calendar 클래스

java.util.Calendar 클래스는 날짜와 시간을 객체 모델링화 한 클래스로 연, 월, 일, 요일, 시, 분, 초 까지의 시간 및 날짜와 관련된 정보를 제공한다. 그리고, Calendar 클래스는 추상 클래스이므로 직접 객체를 생성할 수 없으며 실제적인 메소드 구현은 Calendar 클래스의 서브 클래스인  GregorianCalendar 클래스에 정의되어 있다.

 

시스템으로부터 현재 시스템 시간 정보를 얻어올 때 getInstance() 라는 정적(static) 메소드를 이용하여 객체를 생성할 수 있다. 생성된 Calendar 클래스 객체는 시스템의 현재 날짜와 시간 정보를 가지며, 이 객체가 생성되면 갖고 있는 시간 정보들은 get() 메소드를 이용하여 쉽게 가져올(사용할)수 있다.

getInstance() 메소드는 내부적으로 GregorianCalendar 객체를 생성하여 돌려주기 때문에 GregorianCalendar 객체를 직접 생성하여 시간 정보를 구할 수도 있다.

 

※ Calendar 클래스는 추상 클래스이기 때문에 객체를 생성할 수 없다.
   (추상 클래스 : 미완성된 클래스)

   Calendar cal = new Calendar();
   → 이와 같은 구문을 통해 인스턴스 생성이 불가.

○ Calendar 클래스 객체(인스턴스)를 생성할 수 있는 방법

   1. Calendar cal = Calendar.getInstance();

   2. Calendar cal = new GregorianCalendar();

   3. GregorianCalendar cal = new GregorianCalendar();

   (※ GregorianCalendar : Calendar 클래스의 하위 클래스)


import java.util.Calendar;
import java.util.GregorianCalendar;

public class Test147
{
	public static void main(String[] args)
	{
		// Calendar 클래스 기반 인스턴스 생성
		//Calendar rightNow = new Calendar();	// 인스턴스 생성 불가
		Calendar rightNow = Calendar.getInstance();
		
		// 생성된 달력(Calendar) 인스턴스를 통해
		// 날짜 관련 정보를 얻어낼 수 있는 메소드 → 『get()』
		int y = rightNow.get(Calendar.YEAR);
		System.out.println(y);
		//--==>> 2020

		int m = rightNow.get(Calendar.MONTH)+1;		//-- check~!!!
													//   가져올 때는 『+1』
													//	 설정할 때는 『-1』
	
		System.out.println(m);
		//--==>> 8 

		int d = rightNow.get(Calendar.DATE);
		System.out.println(d);
		//--==>> 27

		int w = rightNow.get(Calendar.DAY_OF_WEEK);
		System.out.println(w);

		
		/*
		// 테스트(확인)
		System.out.println(Calendar.SUNDAY);	//--==>>  1 → 일요일
		System.out.println(Calendar.MONDAY);	//--==>>  2 → 월요일
		System.out.println(Calendar.TUESDAY);	//--==>>  3 → 화요일
		System.out.println(Calendar.WEDNESDAY);	//--==>>  4 → 수요일
		System.out.println(Calendar.THURSDAY);	//--==>>  5 → 목요일
		System.out.println(Calendar.FRIDAY);	//--==>>  6 → 금요일
		System.out.println(Calendar.SATURDAY);	//--==>>  7 → 토요일
		*/

		System.out.println(y + "-" + m + "-" + d + " " + w);
		//--==>> 2020-8-27 5

		String week = "";
		switch (w)
		{
			//case 1: week = "일요일"; break
			case Calendar.SUNDAY: week = "일요일"; break;

			//case 2: week = "월요일"; break
			case Calendar.MONDAY: week = "월요일"; break;
		
			//case 3: week = "화요일"; break
			case Calendar.TUESDAY: week = "화요일"; break;

			//case 4: week = "수요일"; break
			case Calendar.WEDNESDAY: week = "수요일"; break;

			//case 5: week = "목요일"; break
			case Calendar.THURSDAY: week = "목요일"; break;

			//case 6: week = "금요일"; break
			case Calendar.FRIDAY: week = "금요일"; break;

			//case 7: week = "토요일"; break
			case Calendar.SATURDAY: week = "토요일"; break;
		}

		System.out.println(y + "-" + m + "-" + d + " " + week);
		//--==>> 2020-8-27 목요일
		
		///////////////////////////////////////////////////////////////////////////

		//Calendar 클래스 인스턴스 생성
		Calendar rightNow2 = new GregorianCalendar();

		String[] week2 = {"일요일","월요일","화요일","수요일","목요일","금요일","토요일"};

		
		// 달력의 날짜 세팅 → 『set()』 메소드 활용
		rightNow2.set(2020,9,20); // 10월      -- check~!!!

		System.out.println(rightNow2.get(Calendar.DAY_OF_WEEK));
		//--==>> 3  → 화요일
		//-- 2020년 10월 20일은 화요일~!!!

		System.out.println(week2[rightNow2.get(Calendar.DAY_OF_WEEK)-1]);
		//--==>> 화요일


		// 달력의 날짜 세팅
		rightNow2.set(1994,5,3);	// 1994-06-03

		System.out.println(week2[rightNow2.get(Calendar.DAY_OF_WEEK)-1]);
		//--==>> 금요일

	}
}

■ 캐릭터 셋(Character Set)
   
   ○ 유니코드(unicode)
      
  국제 표준으로 제정된 2바이트계의 만국 공통의 국제 문자부호 체계(UCS: Universal Code System)를 말한다.

애플컴퓨터, IBM, 마이크로소프트 등이 컨소시엄으로 설립한 유니코드가 1990년에 첫 버전을 발표하였고, ISO/IEC JTC1에서 1995년 9월 국제표준으로 제정하였다.

  데이터의 교환을 원활하게 하기 위해 문자 1개에 부여되는 값을 16비트로 통일하였다.

코드의 1문자 당 영어는 7비트, 비영어는 8비트, 한글이나 일본어는 16비트의 값을 가지게 되는데 이들을 모두 16비트로 통일한 것이다.

   ○ UTF-8 과 UTF-16
  
  UTF-8 과 UTF-16 의 차이를 한 마디로 말하면 문자를 표현할 때의 단위가 다르다는 것이다. UTF-8 은 8비트 가변장 멀티바이트에서 문자를 표현하고 UTF-16 은 16비트 가변장 멀티바이트에서 문자를 표현한다.

  - UTF-8(8Bit UCS Transformation Format)
    

  웹에서 기본적으로 사용하는 코드 UCS-2 로 정의되는 문자 집합을 이용하여 기술된 문자열을 바이트 열로 변환하는 방식의 1개 1문자를 1~6바이트 가변장 멀티바이트로 변환한다.

      - UTF-16(16Bit UCS Transformation Format)

  자바의 기본 코드이다.
자바에서는 문자 하나를 저장하면 바이트 수는 영문자이든, 한글문자이든 2바이트를 차지하게 된다.
UCS-2로 정의되는 문자 집합을 이용하여 기술된 문자열에 UCS-4의 일부 문자를 채워넣기 위한 인코딩 방식.
UTF-8과 병용할 수 있다. UCS-2로 이용할 수 있는 문자수를 대폭 늘릴 수 있다.
   ※ 자바단에서는 UTF-16을 사용하고 웹에서는 UTF-8을 사용하기 때문에 경우에 따라 변환해야 하는 상황이 발생할 수 있다.


■ 문자 코드의 종류

   ○ KSC5601
      한글 완성형 표준(한글 2,350자 표현).
  한국공업표준 정보처리분야(C)의 5601번 표준안.

   ○ KSC5636
      영문자에 대한 표준.
  한국공업표준 정보처리분야(C)의 5636번 표쥰안.
  기존 ASCII Code 에서 역슬래스(\)를 원(₩) 표시로 대체.

   ○ EUC-KR(MS949)
      Bell-Laboratories 에서 유닉스 상에서 영문자 이외의 문자를
  지원하기 위해 제안한 확장 유니코드(Extend Unix Code) 중 한글 인코딩 방식.
  영문은 KSC5636으로 처리하고, 한글은 KSC5601로 처리.
  즉, EUC-KR(MS949) = KSC5636 + KSC5601

   ○ UTF-8
      영문과 숫자는 1바이트, 한글은 3바이트로 표현.
  (웹에서 많이 사용. UTF-8 형식으로 JSP를 작성할 때에는 파일도 UTF-8 형식으로 저장해야 한다.)

   ○ UTF-16
      자바 기본 문자 코드
  영문과 숫자는 1바이트, 한글은 2바이트로 표현

   ○ ISO-8859-1
      서유럽 언어 표기에 필요한 US-ASCII 에 없는 94개의 글자의 순차적 나열.


import java.io.UnsupportedEncodingException;

public class Test146
{
	public static void main(String[] args) //throws UnsupportedEncodingException
	{
		byte[] buf;
		String name = new String("윤홍준");

		System.out.println("디폴트 캐릭터셋 : " + System.getProperty("file.encoding"));
		//--==>> 디폴트 캐릭터셋 : MS949
		
		
		// 『String객체.getBytes()』
		//  : 디폴트 캐릭터셋으로 바이트 배열을 반환하는 메소드
		buf = name.getBytes();
		
		System.out.println("Length : " + buf.length);
		//--==>> Length : 6


		for (byte b : buf)
			System.out.println("[" + b + "]");
		System.out.println();
		//--==>> [-64]
		//		 [-79]
		//		 [-56]
		//		 [-85]
		//		 [-63]
		//		 [-40]


		try
		{
			// "utf-8"로 바이트 배열을 반환하는 메소드 호출
			buf = name.getBytes("utf-8");
			
			System.out.println("Length : " + buf.length);
			//--==>> Length : 9
			
			for (byte b : buf)
				System.out.println("[" + b + "]");
			System.out.println();
			//--==>> Length : 9
			//		 [-20]
			//		 [-100]
			//		 [-92]
			//		 [-19]
			//		 [-103]
			//		 [-115]
			//		 [-20]
			//		 [-92]
			//		 [-128]

			//new String("김승범");

			//new String(바이트배열, 인코딩방식);

			//new String(buf, "utf-8");
			
			// utf-8 형태로 저장된 바이트 배열
			// String 객체로 파라미터값 『utf-8』을 부여하여 생성
			// → utf-8 기반으로 buf 바이트 배열을 조립하여
			//    문자열 객체 생성한 후 이를 출력
			System.out.println("Value : " + new String(buf, "utf-8"));
			//--==>> Value : 윤홍준

			// utf-8 형태로 저장된 바이트 배열(→ buf)을
			// String 객체로 파라미터값 없이(→ 디폴트 캐릭터 셋)을 부여하여 생성
			System.out.println("Value2 : " + new String(buf));
			//								 ---------------
			//								 new String(buf, MS949);
			//                                               -----
			//                                               시스템이 사용중인 default character set
			

			System.out.println();
			String convert = new String(name.getBytes("euc-kr"), "utf-8");


			System.out.println("Value3 : " + convert);
			//--==>> Value3 : ????

			buf = convert.getBytes();
			System.out.println("Length : " + buf.length);
			//--==>> Length : 5

			buf = convert.getBytes("utf-8");
			System.out.println("Length : " + buf.length);
			//--==>> Length : 14

			/*
			※ check~!!!
			   
			   euc-kr을 utf-8로 변환하겠다는 의도로
			   위와 같이 코딩을 해버리면...
			   (→ 『new String(name.getBytes("euc-kr), "utf-8");』)
			   이러한 변환으로 인해 바이트 배열이 깨져서
			   euc-kr 이든... utf-8이든...
			   어떠한 바이트 배열로 읽어오든
			   깨져있는 것을 확인할 수 있다.
			
			*/
			

		}
		catch (UnsupportedEncodingException e)
		{
			System.out.println(e.toString());
		}

	}
}

+ Recent posts