Java - API

API

* API : Application Programming Interface
* '๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ'๋ผ๊ณ ๋„ ํ•จ.

Mathํด๋ž˜์Šค

* ์ˆ˜ํ•™๊ณผ ๊ด€๋ จ๋œ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค
* java.lang.math์— ์œ„์น˜ํ•ด ์žˆ์Œ.
* ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋“ค์ด static, ๋ชจ๋“  ํ•„๋“œ๋“ค์ด ์ƒ์ˆ˜ํ•„๋“œ์ž„
* => ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ•  ํ•„์š”๊ฐ€ ์—†์Œ.
*
* Math m = new Math();
* [์˜ค๋ฅ˜] The constructor Math() is not visible
* Ctrlํ‚ค๋ฅผ ๋ˆ„๋ฅด๊ณ  Open declaration์„ ๋ณด๋ฉด ์ƒ์„ฑ์ž๊ฐ€ private๋กœ ๋˜์–ด์žˆ์Œ
*
* static : ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰๊ณผ ๋™์‹œ์— ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์˜ฌ๋ ค๋†“์Œ.
* 		   ๊ณต์œ (์žฌ์‚ฌ์šฉ)์˜ ๊ฐœ๋…์ด ๊ฐ•ํ•จ.
* 		   => ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด(ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ API๋ฌธ์„œ์— ๋‹จ ํ•œ๋ฒˆ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ์‚ฌ์šฉํ•จ)

package com.kh.chap01_math.run;
// import java.lang.Math; => ์ƒ๋žต๊ฐ€๋Šฅ(ํ•ญ์ƒ import๋˜์–ด์žˆ์Œ)

public class MathRun {
	public static void main(String[] args) {
//		์ƒ์ˆ˜
//		ํŒŒ์ด(์›์ฃผ์œจ) => Mathํด๋ž˜์Šค ๋‚ด์— ์ƒ์ˆ˜ํ•„๋“œ๋กœ ์ •์˜๋˜์–ด ์žˆ์Œ.
		System.out.println("ํŒŒ์ด : "+ Math.PI);
		
//		๋ฉ”์†Œ๋“œ
//		๊ฐ์ฒด๋ช….๋ฉ”์†Œ๋“œ๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜) : ๋ฐ˜ํ™˜ํ˜•
//		1. ์˜ฌ๋ฆผ์ฒ˜๋ฆฌ => Math.ceil(double) : double
		double num1 = 4.349;
		System.out.println("์˜ฌ๋ฆผ : "+Math.ceil(num1)); // 5.0
		
//		2. ๋ฐ˜์˜ฌ๋ฆผ์ฒ˜๋ฆฌ => Math.round(double) : long
		System.out.println("๋ฐ˜์˜ฌ๋ฆผ : "+Math.round(num1)); // 4
		
//		3. ๋ฒ„๋ฆผ์ฒ˜๋ฆฌ => Math.floor(double) : double
		System.out.println("๋ฒ„๋ฆผ : "+Math.floor(num1)); // 4.0
		
//		4. ์ ˆ๋Œ€๊ฐ’(absolute) => Math.abs(int,double,long,float) : int, double, long, float(์˜ค๋ฒ„๋กœ๋”ฉ ๋˜์–ด์žˆ์Œ.)
		int num2 = -10;
		System.out.println("์ ˆ๋Œ€๊ฐ’ : "+Math.abs(num2)); // 10
		
//		5. ์ตœ์†Œ๊ฐ’ => Math.min(int,int) : int
		System.out.println("์ตœ์†Œ๊ฐ’ : "+Math.min(5, 10)); // 5
		
//		6. ์ตœ๋Œ€๊ฐ’ => Math.max(int,int) : int
		System.out.println("์ตœ๋Œ€๊ฐ’ : "+Math.max(5, 10)); // 10
		
//		7. ์ œ๊ณฑ๊ทผ(square root) => Math.sqrt(double) : double
		System.out.println("4์˜ ์ œ๊ณฑ๊ทผ : "+Math.sqrt(4)); // 2.0
		
//		8. ์ œ๊ณฑ => Math.pow(double, double) : double
		System.out.println("2์˜ 10์ œ๊ณฑ : "+Math.pow(2, 10)); // 1024.0
	}
}

Stringํด๋ž˜์Šค

์ƒ์ˆ˜ํ’€(String Pool)

* String์€ "๋ถˆ๋ณ€ํด๋ž˜์Šค"(๋ณ€ํ•˜์ง€ ์•Š๋Š” ํด๋ž˜์Šค)๋ผ๊ณ  ๋ถˆ๋ฆผ.
* => String ๊ฐ์ฒด ๊ธฐ์ค€์œผ๋กœ ๊ฐ’์ด ์ˆ˜์ •๋˜๋Š” ์ˆœ๊ฐ„, ๊ธฐ์กด์— ๋‹ด๊ธด ๊ณต๊ฐ„์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, 
* => ์ƒˆ๋กœ์šด ๊ณณ์—์„œ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์ด ์ƒ๊ธฐ๊ณ  ๊ทธ ์œ„์น˜๋ฅผ ์ฐธ์กฐํ•จ.
*
* String ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋•Œ, ๋ฆฌํ„ฐ๋Ÿด์„ ์ œ์‹œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋ฉด
* ๊ทธ ๋‚ด์šฉ๋ฌผ์ด heap์˜์—ญ์— ์žˆ๋Š” "์ƒ์ˆ˜ํ’€(StringPool)"์˜ ์˜์—ญ์— ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋จ.
* ์ด ์˜์—ญ์—์„œ๋Š” ์ค‘๋ณต๋˜๋Š” ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด, ์ค‘๋ณต๋œ ๋‚ด์šฉ์„ ๋นผ๋Š” ๋Œ€์‹ , ๊ฐ™์€ ์ฃผ์†Œ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ฒŒ ํ•จ.
package com.kh.chap02_String.controller;

public class A_StringPoolTest {

//	Stringํ˜•ํƒœ์˜ ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ
//	1. ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ ๋ฌธ์ž์—ด ๋‹ด๊ธฐ => String str = new String();
	public void method1() {
		String str1 = new String("Hello");
		String str2 = new String("Hello");
//		Stack				Heap
//		
//		0123	-------->	Hello
//		str1				0123
//		
//		1234	-------->	Hello
//		str2				1234
		System.out.println(str1 == str2); // false, ์ฃผ์†Œ๊ฐ’ ๋น„๊ต
		System.out.println(str1/*.toString*/);	// Hello
//		์™œ toString์ธ๋ฐ๋„ ์ฃผ์†Œ๊ฐ’์ด ์•„๋‹Œ ์‹ค์ œ๊ฐ’์ด ๋‚˜์˜ค๋Š”๊ฐ€?
//		Objectํด๋ž˜์Šค์˜ toString()๋ฉ”์†Œ๋“œ์™€ ๋‹ฌ๋ฆฌ,
//		Stringํด๋ž˜์Šค์˜ toString()๋ฉ”์†Œ๋“œ์˜ ๊ฒฝ์šฐ
//		์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ•˜์—ฌ ์‹ค์ œ ๋‹ด๊ฒจ์žˆ๋Š” ์ฃผ์†Œ๊ฐ’์ด ์•„๋‹Œ, ์‹ค์ œ ๋‹ด๊ฒจ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ๋” ํ•จ.
		System.out.println(str1.equals(str2));	// true, ์‹ค์ œ ๋ฌธ์ž์—ด ๋น„๊ต
//		String ํด๋ž˜์Šค์˜ equals()๋ฉ”์†Œ๋“œ์˜ ๊ฒฝ์šฐ,
//		์›๋ž˜๋Š” ์‹ค์ œ ๋‹ด๊ฒจ์žˆ๋Š” ์ฃผ์†Œ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ์—ญํ• ์—์„œ
//		์‹ค์ œ ๋‹ด๊ฒจ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•œ ๊ฒƒ์ž„.
		
		System.out.println(str1.hashCode()); // 69609650
		System.out.println(str2.hashCode()); // 69609650
//		์ฐธ์กฐํ˜•๋ณ€์ˆ˜(๊ฐ์ฒด)์—์„œ ์ฃผ์†Œ๊ฐ’์„ 10์ง„์ˆ˜์˜ ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ
//		str1๊ณผ str2์˜ ์ฃผ์†Œ๊ฐ’์ด ๊ฐ™๊ฒŒ ๋‚˜์˜ด.
//		์ด์œ ๋Š” Stringํด๋ž˜์Šค์˜ hashcode()๋ฉ”์†Œ๋“œ์˜ ๊ฒฝ์šฐ
//		์‹ค์ œ ๋‹ด๊ฒจ์žˆ๋Š” ์ฃผ์†Œ๊ฐ’์„ 10์ง„์ˆ˜ ํ˜•ํƒœ๋กœ ๋‚ด๋ณด๋‚ด๋Š” ์—ญํ• ์€ ๋งž์œผ๋‚˜,
//		์ด ์—ญํ• ์—์„œ ์‹ค์ œ ๋‹ด๊ฒจ์žˆ๋Š” ๋ฌธ์ž์—ด ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ 10์ง„์ˆ˜ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์„œ ๋‚ด๋ณด๋‚ด๊ฒŒ๋” ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•จ.
//		์ฆ‰, ๋‘˜๋‹ค "Hello"๋กœ ๋ฌธ์ž์—ด์ด ๋™๋“ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ™์€ ์ฃผ์†Œ๊ฐ’์ด ๋‚˜์˜ด.
		
//		๊ทธ๋ ‡๋‹ค๋ฉด ์ง„์งœ ์ฃผ์†Œ๊ฐ’์˜ ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ์•Œ๊ณ ์‹ถ๋‹ค๋ฉด?
//		System.identityHashCode(์ฐธ์กฐํ˜•๋ณ€์ˆ˜๋ช…)
//		=> ํ•ด๋‹น ๊ฐ์ฒด์˜ ์‹ค์ œ ์ฃผ์†Œ๋ฅผ ํ•ด์‹œ์ฝ”๋“œ๋กœ ์ถœ๋ ฅ
		System.out.println(System.identityHashCode(str1));
		System.out.println(System.identityHashCode(str2));
	}

//	2. ๊ฐ’์„ ๋ฆฌํ„ฐ๋Ÿด๋กœ์จ ๋Œ€์ž…ํ•ด๋ฒ„๋ฆฌ๊ธฐ => String str = "~";
	public void method2() {
		String str1 = "hello";
		String str2 = "hello";
//									  โ”Œ> hello(์ค‘๋ณต๋œ ๋‚ด์šฉ)
//		Stack				Heap     โ”€โ”˜
//						   [์ƒ์ˆ˜ํ’€]
//		0123	โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€> hello
//		str1				0123
//							 โ†‘
//		1234	โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜	
//		str2
		
//		String ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋•Œ, ๋ฆฌํ„ฐ๋Ÿด์„ ์ œ์‹œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋ฉด
//		๊ทธ ๋‚ด์šฉ๋ฌผ์ด heap์˜์—ญ์— ์žˆ๋Š” "์ƒ์ˆ˜ํ’€(StringPool)"์˜ ์˜์—ญ์— ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋จ.
//		์ด ์˜์—ญ์—์„œ๋Š” ์ค‘๋ณต๋˜๋Š” ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด, ์ค‘๋ณต๋œ ๋‚ด์šฉ์„ ๋นผ๋Š” ๋Œ€์‹ , ๊ฐ™์€ ์ฃผ์†Œ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ฒŒ ํ•จ.
		
		System.out.println(str1 == str2); // true, ์ฃผ์†Œ๊ฐ’ ๋น„๊ต
		System.out.println(str1/*toString*/);
		System.out.println(str2/*toString*/);
		System.out.println(str1.equals(str2)); // true, ์‹ค์ œ๊ฐ’ ๋น„๊ต
		
		System.out.println(str1.hashCode());
		System.out.println(str2.hashCode()); // ์‹ค์ œ ๋‚ด์šฉ๋ฌผ(๋ฌธ์ž์—ด)์„ ๊ธฐ๋ฐ˜์œผ๋กœ 10์ง„์ˆ˜ํ™”
		
		System.out.println(System.identityHashCode(str1));
		System.out.println(System.identityHashCode(str2));	// ์‹ค์ œ ์ฃผ์†Œ๊ฐ’์„ ๋ฐ˜ํ™˜
	}

//	๋ถˆ๋ณ€ํด๋ž˜์Šค
//	=> ๊ธฐ์กด์˜ ๋‚ด์šฉ๋ฌผ์ด ๋ณ€ํ•˜์ง€ ์•Š๊ณ , ์ƒˆ๋กœ์šด ์ฃผ์†Œ์— ์ƒˆ๋กœ์šด ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ฐธ์กฐํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ๋ฐ”๊ฟˆ.
	public void method3() {
		String str = "hello";
		System.out.println(System.identityHashCode(str));
		
		str = "goodbye";
		System.out.println(System.identityHashCode(str));
		
		str += "abc";
		System.out.println(str);
		System.out.println(System.identityHashCode(str));
		
//										 โ”Œ> hello(0123), goodbye(1234) => ์—ฐ๊ฒฐ์ด ๋Š๊ฒจ, ์–ธ์  ๊ฐ€ GC๊ฐ€ ์ง€์›Œ์คŒ.
//		Stack				Heap		โ”€โ”˜
//						  [์ƒ์ˆ˜ํ’€]
//		2345			  goodbyeabc
//		str				  2345	
//						  
		/*
		 * ๊ธฐ์กด์˜ ์ƒ์ˆ˜ํ’€์˜ ์—ฐ๊ฒฐ์ด ๋Š๊ธด ๋ฌธ์ž์—ด๋“ค์€ GC์— ์˜ํ•ด ์ •๋ฆฌ๋จ.
		 * "๋ถˆ๋ณ€"์ด๋ผ๊ณ  ํ•ด์„œ ์ˆ˜์ •์ด ์•„์˜ˆ ์•ˆ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ(์ด ๊ฒฝ์šฐ๋Š” "์ƒ์ˆ˜"์ž„)
		 * ๊ธฐ์กด์˜ ๊ทธ ์ž๋ฆฌ์—์„œ ์ˆ˜์ •๋˜๋Š” ๊ฐœ๋…์ด ์•„๋‹Œ, ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์ฃผ์†Œ๊ฐ’์„ ์ฐธ์กฐํ•˜๋Š” ๊ฐœ๋…
		 */
	
	}
}

String ๋ฉ”์†Œ๋“œ

package com.kh.chap02_String.controller;

import java.util.Arrays;
import java.util.Scanner;

public class B_StringMethodTest {
	public void method() {
		String str1 = "Hell world";
		
//		๋ฉ”์†Œ๋“œ๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜) : ๋ฐ˜ํ™˜ํ˜•
		
//		1. ๋ฌธ์ž์—ด.charAt(int index) : char
//		=> ๋ฌธ์ž์—ด๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ index ์œ„์น˜์˜ ๋ฌธ์ž ํ•˜๋‚˜๋งŒ์„ ์ถ”์ถœํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ
		char ch = str1.charAt(3);
		System.out.println("ch : "+ch);	// l
		
//		2. ๋ฌธ์ž์—ด.concat(String str) : str
//		=> ๋ฌธ์ž์—ด๊ณผ ์ „๋‹ฌ๋œ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์„œ ๋ฐ˜ํ™˜ํ•ด์คŒ.
//		=> ๋ฌธ์ž์—ด = ๋ฌธ์ž์—ด + str๊ณผ ๊ฐ™์€ ์—ญํ• 
//		=> ๋‹จ, ๋‘ ๋ญ‰ํ……์ด๋กœ๋งŒ ๋ฌถ์„ ์ˆ˜ ์žˆ์Œ.
		String str2 = "!!!";
		System.out.println(str1.concat(str2));
		System.out.println(str1 + str2);
		
//		3. ๋ฌธ์ž์—ด.length() : int
//		=> ํ˜„์žฌ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์คŒ.
		System.out.println("str1์˜ ๊ธธ์ด : "+str1.length()); // 10(๋„์–ด์“ฐ๊ธฐ ํฌํ•จ)
		
//		4-1. ๋ฌธ์ž์—ด.substring(int ์‹œ์ž‘index) : String
//		=> ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘index์œ„์น˜์—์„œ๋ถ€ํ„ฐ ๋๊นŒ์ง€์˜ ๋ถ€๋ถ„๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ์ž„.
		System.out.println("Str1์˜ ๋ถ€๋ถ„๋ฌธ์ž์—ด : "+str1.substring(6)); // orld
		
//		4-2. ๋ฌธ์ž์—ด.substring(int ์‹œ์ž‘index, int ๋index) : String  => ์˜ค๋ฒ„๋กœ๋”ฉ
//		=> ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘index์œ„์น˜์—์„œ๋ถ€ํ„ฐ ๋ index์˜ ์œ„์น˜์˜ ๋ถ€๋ถ„๋ฌธ์ž์—ด์„ ์ถ”์ถœํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ์ž„.
		System.out.println("str1์˜ ๋ถ€๋ถ„๋ฌธ์ž์—ด : "+str1.substring(0,6)); // Hell w (0 <= ์ธ๋ฑ์Šค ๋ฒ”์œ„ < 6)
		
//		5. ๋ฌธ์ž์—ด.replace(char old, char new) : String
//		=> old์— ํ•ด๋‹นํ•˜๋Š” ๋ฌธ์ž์—ด์„ new๋กœ ๋ณ€ํ™˜์‹œ์ผœ์„œ, ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜์‹œ์ผœ์ฃผ๋Š” ๋ฉ”์†Œ๋“œ
		String str3 = str1.replace('l', 'c');
		System.out.println("str3 : "+str3);
		
//		6. ๋ฌธ์ž์—ด.trim() : String
//		=> ๋ฌธ์ž์—ด์—์„œ์˜ ์•ž๋’ค ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ
		String str4 = "    JA VA    ";
		System.out.println("str4.trim()์ ์šฉ : " + str4.trim()); // JA VA
//		QUIZ) ์ค‘๊ฐ„์˜ ๊ณต๋ฐฑ์„ ์—†์• ๊ณ  ์‹ถ๋‹ค๋ฉด?
		System.out.println((str4).replace(" ", ""));
		
//		7-1. ๋ฌธ์ž์—ด.toUpperCase() : String
//		=> ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ ํ›„, ๊ทธ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜์‹œ์ผœ์คŒ.
		System.out.println("๋Œ€๋ฌธ์ž : " + str1.toUpperCase());
//		7-2. ๋ฌธ์ž์—ด.toLowerCase() : String
//		=> ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ ํ›„, ๊ทธ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜์‹œ์ผœ์คŒ.
		System.out.println("์†Œ๋ฌธ์ž : " + str1.toLowerCase());
		
		/*
		 * ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ
		 * ์ข…๋ฃŒ๋ฅผ ์›ํ•˜๋ฉด Y๋ฅผ ์ž…๋ ฅํ•˜์‹œ์˜ค. ๋ผ๊ณ  ์œ ๋„
		 */
		System.out.println("---------------------------------------------------");
		
		Scanner sc = new Scanner(System.in);
		System.out.println("์ข…๋ฃŒํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (Y,N) : ");
		
//		์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•
		char answer1 = sc.nextLine().charAt(0); // 'y' / 'Y'
			if(answer1 == 'y' || answer1 =='Y') {
				System.out.println("์‹œ์Šคํ…œ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.");
			}else {
				System.out.println("์‹œ์Šคํ…œ์„ ์ข…๋ฃŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
			}
		
		
//		๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•
		char answer2 = sc.nextLine().toUpperCase().charAt(0);
//		์ง์ ‘์ ‘๊ทผ์—ฐ์‚ฐ์ž(.)๋กœ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋ชจ๋‘ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ์‹คํ–‰๋จ.
//		์‚ฌ์šฉ์ž์ž…๋ ฅ => ๋Œ€๋ฌธ์ž => ๋ฌธ์ž์ถ”์ถœ(๋ฉ”์†Œ๋“œ Chaining)
		if(answer2 =='Y') {
			System.out.println("์‹œ์Šคํ…œ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.");
		}else {
			System.out.println("์‹œ์Šคํ…œ์„ ์ข…๋ฃŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
		}
		
		System.out.println("---------------------------------------------------");
//		๋ฌธ์ž์—ด => char[]
//		str1๋ฌธ์ž์—ด ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์ถ”์ถœํ•ด์„œ ๋ฌธ์ž ๋ฐฐ์—ด์— ๋‹ด๊ฒ ๋‹ค.
		char[] arr = new char[str1.length()];
		for(int i=0; i<arr.length; i++) {
			arr[i] = str1.charAt(i);	
		}
		System.out.println(Arrays.toString(arr));
		
//		8. ๋ฌธ์ž์—ด.toCharArray() : char[]
//		=> ๋ฌธ์ž์—ด์˜ ๊ฐ ๋ฌธ์ž๋“ค์„ char๋ฐฐ์—ด์— ์˜ฎ๊ฒจ๋‹ด์•„
//		=> ๊ทธ ๋ฐฐ์—ด ์ž์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ
		char[] arr2 = str1.toCharArray();
		System.out.println(Arrays.toString(arr2));
		
//		char[] => ๋ฌธ์ž์—ด
		char[] arr3 = {'a','p','p','l','e'};
		String result = "";
		for(int i=0; i<arr3.length; i++) {
			result = result+arr3[i];	// ๋ฌธ์ž์—ดํ˜• + ๋‹ค๋ฅธ์ž๋ฃŒํ˜• = ๋ฌธ์ž์—ดํ˜•
		}
		System.out.println("result : "+ result);
		
//		9. static valueOf(char[] data) : String
//		=> ์ „๋‹ฌ๋œ char๋ฐฐ์—ด์— ๋‹ด๊ธด ๋ฌธ์ž๋“ค์„ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ์—ฐ์ด์–ด์„œ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ
		System.out.println("๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ ํ›„ : "+String.valueOf(arr3));
		
	}
}

StringTokenizer

package com.kh.chap02_String.controller;

import java.util.StringTokenizer;

public class C_StringTokenizerTest {
	public void method1() {
		
		String str = "Java,Oracle,JDBC,HTML,Server,Spring";
		
//		[๋ฐฉ๋ฒ•1]
//		1. ๊ตฌ๋ถ„์ž๋ฅผ ์ œ์‹œํ•ด์„œ ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ๋‹จ์–ด ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ
//		๋ถ„๋ฆฌ๋œ ๋ฌธ์ž์—ด๋“ค์„ String๋ฐฐ์—ด์— ์ฐจ๊ณก์ฐจ๊ณก ๋‹ด์•„์„œ ๊ด€๋ฆฌ
		String[] arr = str.split(",");
//		split์ด๋ผ๋Š” ๋ฌธ์ž์—ด์„ ์ชผ๊ฐœ์ฃผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉ(String ํด๋ž˜์Šค)
//		[ํ‘œํ˜„๋ฒ•] ๋ฌธ์ž์—ด.split(String๊ตฌ๋ถ„์ž) : String[]
		
//      2. ๊ฐ ์ธ๋ฑ์Šค์˜ ๊ฐ’์ด ๋นˆ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์ฃผ๊ธฐ
		for(int i=0; i<arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
		
		System.out.println();

//		3. ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ธฐ
//		๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ, for๋ฌธ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ์Œ(ํ–ฅ์ƒ๋œ for๋ฌธ, for each๋ฌธ)
//		[ํ‘œํ˜„๋ฒ•]
//		for(๊ฐ’์„ ๋‹ด์•„์ค„ ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ : ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์€ ๋ฐฐ์—ด๋ช… ๋˜๋Š” ์ปฌ๋ ‰์…˜๋ช…) { ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ฝ”๋“œ } 
		for(String s : arr) {	// ์ฃผ์˜์‚ฌํ•ญ : ํ•ด๋‹น ๋ฐฐ์—ด์˜ ํƒ€์ž…์— ๋งž๊ฒŒ ๋ณ€์ˆ˜์„ ์–ธ๋ฌธ์„ ์ž‘์„ฑํ•ด์•ผ ํ•จ!!
//			arr[0] = s => system.out.print(s) : Java
//			arr[1] = s => system.out.print(s) : Oracle
//			arr[2] = s => system.out.print(s) : JDBC
//			...
//			arr[5] = s => system.out.print(s) : Spring
			
//			๋‚ด๋ถ€์ ์œผ๋กœ s๋ผ๋Š” ๋ฌธ์ž์—ด ํƒ€์ž…์˜ ๋ณ€์ˆ˜์— arr[i] ๋ฐฉ์— ๋“ค์€ ๊ฐ’์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋‹ด๊ธฐ๋ฉด์„œ, ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•จ.
//			๊ฐ’์„ ์ด๋ฏธ ๋ฝ‘์•„์„œ ๋ณ€์ˆ˜์— ๋‹ด์•„ ์ œ๊ณต๋˜๋Š” ํ˜•์‹์ด๋ผ, ๋ฐฐ์—ด์— ๋“ค์€ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ์šฉ๋„๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅ
//			๋‹จ์ง€, ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉํ•จ.
			System.out.print(s+" ");
		}
		
		System.out.println();
		System.out.println("-----------------------------------------");
//		[๋ฐฉ๋ฒ•2] 
//		๋ถ„๋ฆฌ๋œ ๊ฐ๊ฐ์˜ ๋ฌธ์ž์—ด๋“ค์„ "ํ† ํฐ"์ด๋ผ๋Š” ๋‹จ์œ„๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
//		์—ฌ๊ธฐ์„œ ํ† ํฐ์ด๋ž€? ๋‹จ์–ด์˜ ํ•œ ๋ญ‰ํ……์ด๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ž„.

//		1. StringTokenizer ํด๋ž˜์Šค ํ™œ์šฉ(java.util.StringTokenizer)
//		[ํ‘œํ˜„๋ฒ•]
//		StringTokenizer ๊ฐ์ฒด๋ช… = new StringTokenizer(๋ถ„๋ฆฌ์‹œํ‚ค๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ž์—ด, ๊ตฌ๋ถ„์ž);
		StringTokenizer stn = new StringTokenizer(str, ",");
		
//		2. countTokens();
//		๋ถ„๋ฆฌ๋˜์–ด ์กด์žฌํ•˜๋Š” ๋ฌธ์ž์—ด์˜ ๋ญ‰ํƒฑ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ด์คŒ.
		System.out.print("๋ถ„๋ฆฌ๋œ ๋ฌธ์ž์—ด์˜ ๊ฐœ์ˆ˜ : "+stn.countTokens() + "๊ฐœ"); // 6๊ฐœ
		
//		3. nextToken();
//		Java, Oracle, JDBC, HTML, Server, Spring
//		์ชผ๊ฐœ์ง„ ๋‹จ์–ด๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์คŒ.
//		System.out.println();
		System.out.println(stn.nextToken());	// Java
		System.out.println(stn.nextToken()); 	// Oracle
		System.out.println(stn.nextToken());	// JDBC
		System.out.println(stn.nextToken());	// HTML
		System.out.println(stn.nextToken());	// Server
		System.out.println(stn.nextToken());	// Spring
		System.out.println(stn.nextToken());
//		[์˜ค๋ฅ˜๋ฉ”์„ธ์ง€]
//		java.util.NoSuchElementException
//		ํ˜„์žฌ ๋‚จ์•„์žˆ๋Š” ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ, ํ† ํฐ ๊ฐœ์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์ž„.
		System.out.println();
		System.out.println("ํ˜„์žฌ ๋‹ด๊ฒจ์žˆ๋Š” ํ† ํฐ์˜ ๊ฐœ์ˆ˜ : "+stn.countTokens() + "๊ฐœ"); // 0๊ฐœ
//		nextToken์œผ๋กœ ๋ฝ‘์•„๋‚ด๋ฉด, ํ˜„์žฌ์˜ ํ† ํฐ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ์†Œํ•จ
		
//		ํ† ํฐ์ด ์ถœ๋ ฅ๋ ์ˆ˜๋ก countTokens()์˜ ๊ฒฐ๊ณผ๊ฐ’์ด -1์”ฉ ๋˜์„œ,
//		๋ฏธ๋ฆฌ ๋ณ€์ˆ˜์— ๋‹ด์•„๋†“๊ณ , ์ด๋ฅผ ์กฐ๊ฑด์‹์— ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต์„ ์‹œ์ž‘ํ•ด์•ผ ํ•จ.
		int end = stn.countTokens();
		for(int i=0; i<end; i++) {
			System.out.print(stn.nextToken()+" ");
		}
		
//		๋”์ด์ƒ ๋ฝ‘์•„๋‚ผ ํ† ํฐ์ด ์žˆ๋‚˜?๋ผ๋Š” ์กฐ๊ฑด์„ ์ œ์‹œํ•˜๋ฉด while๋ฌธ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
//		StingTokenizerํด๋ž˜์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” hasMoreTokens()๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉ
//		=> StringTokenizer ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ๋ฝ‘์•„๋‚ผ ํ† ํฐ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์— true๋ฅผ ๋ฐ˜ํ™˜
		while(stn.hasMoreTokens()) {	// true๋ฉด ์ถœ๋ ฅ๋ฌธ์„
			System.out.print(stn.nextToken()+" ");
		} 	// false๋ฉด ๋ฒ—์–ด๋‚จ.
		
	}
}

Wrapper ํด๋ž˜์Šค

* ์ž๋ฃŒํ˜• => ๊ธฐ๋ณธ์ž๋ฃŒํ˜•(8๊ฐ€์ง€), ์ฐธ์กฐ์ž๋ฃŒํ˜•(1๊ฐ€์ง€)
* ๊ธฐ๋ณธ์ž๋ฃŒํ˜•์€ Stack์— ์‹ค์ œ๊ฐ’์„ ๋ฐ”๋กœ ๋‹ด์•˜์—ˆ์Œ.
* ๊ธฐ๋ณธ์ž๋ฃŒํ˜•์€ .๋ฉ”์†Œ๋“œ() ํ˜ธ์ถœ์ด ๋ถˆ๊ฐ€ํ•จ.
*
* ์ฐธ์กฐ์ž๋ฃŒํ˜•์€ Stack์— ์ฃผ์†Œ๊ฐ’, Heap์— ์‹ค์ œ๊ฐ’์„ ๋‹ด์•˜์—ˆ์Œ.
* ์ฐธ์กฐ์ž๋ฃŒํ˜•์€ .๋ฉ”์†Œ๋“œ() ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ–ˆ์Œ.
* 
* Wrapperํด๋ž˜์Šค
* ๊ธฐ๋ณธ์ž๋ฃŒํ˜•์„ ๊ฐ์ฒดํ˜•์‹์œผ๋กœ ํฌ์žฅํ•ด์ฃผ๋Š” ํด๋ž˜์Šค๋ฅผ Wrapperํด๋ž˜์Šค๋ผ๊ณ  ํ•จ.
* 	
* ๊ธฐ๋ณธ์ž๋ฃŒํ˜•	<------->	Wrapperํด๋ž˜์Šค
* boolean					Boolean	
* char						Character
* byte 						Byte
* short 					Short
* int 						Integer
* long						Long
* float 					Float
* double					Double
* 
* => ๊ธฐ๋ณธ์ž๋ฃŒํ˜•์„ Wrapperํด๋ž˜์Šค ํ˜•ํƒœ๋กœ ๋ฐ”๊พธ์–ด์ฃผ๋Š” ์ž‘์—…์„ Boxing์ด๋ผ๊ณ  ํ•จ.
* => Wrapperํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ณธ์ž๋ฃŒํ˜•์œผ๋กœ ๋ฐ”๊พธ์–ด์ฃผ๋Š” ์ž‘์—…์„ UnBoxing์ด๋ผ๊ณ  ํ•จ.

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ