Tiny Bunny
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป/JAVA

[JAVA] String ํด๋ž˜์Šค / StringBuffer ํด๋ž˜์Šค / StringBuilder ํด๋ž˜์Šค · ๋น„๊ต ์ •๋ฆฌ (+StringTokenizer ํด๋ž˜์Šค)

by soonybutter 2024. 9. 3.
728x90

 

 

 String  ,  StringBuffer ,  StringBuilder  ํด๋ž˜์Šค๋Š” ์ž๋ฐ”์—์„œ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๋Š” '์ž๋ฃŒํ˜• ํด๋ž˜์Šค'๋กœ ์ง€์›ํ•˜๋Š” '3๊ฐ€์ง€ ์ž๋ฃŒํ˜•'์ด๋‹ค.

 

 

์œ„ ์„ธ๊ฐ€์ง€ ์ž๋ฃŒํ˜•์€ ๋ชจ๋‘ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃฐ๋•Œ ์‚ฌ์šฉํ•˜๋‚˜, ๊ฐ๊ฐ ์“ฐ์ž„์ƒˆ๊ฐ€ ๋‹ค๋ฅด๋‹ค.

:๋ณดํ†ต ์„ฑ๋Šฅ๊ณผ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋น„๊ตํ•˜์—ฌ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

String ํด๋ž˜์Šค / StringBufferํด๋ž˜์Šค, StringBuilder์— ๋Œ€ํ•ด ๋น„๊ต · ์ •๋ฆฌํ•ด๋ณด์ž! 

 


 

 

String ํด๋ž˜์Šค

 

  • ๋ถˆ๋ณ€ํ˜•(immutable) ์ž๋ฃŒํ˜•
  • ๋”ฐ๋ผ์„œ ์ดˆ๊ธฐ ๊ณต๊ฐ„๊ณผ ์—ฐ์‚ฐ์„ ํ•  ๋•Œ ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด๋‹ค.
  • ๋ถˆ๋ณ€ํ˜•์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š” ์ด์œ : ๋ณด์•ˆ, ๋™๊ธฐํ™”, ์บ์‹ฑ(ํž™ ๊ณต๊ฐ„ ์ ˆ์•ฝ)๋“ฑ์˜ ์„ฑ๋Šฅ์  ์ด์ ์„ ์–ป๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.
  • ๋ฌธ์ž์—ด์„ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ, ์ˆ˜์ •๋œ ๋ฌธ์ž์—ด์ด ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹น๋˜์–ด ์ƒˆ ์ฃผ์†Œ๋ฅผ ๋„˜๊ธฐ๊ฒŒ ๋œ๋‹ค.

 

String str1 = "abc";  // "abc"
str1.toUpperCase();  // "ABC"

System.out.println(str1); // "abc"

 

ใ„ด. str1.toUpperCase()๋ฅผ ํ•ด๋„, str1 ๋ฌธ์ž์—ด ์ž์ฒด๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜์žˆ๋‹ค. = ๋ถˆ๋ณ€ํ˜•

 

String str = "hello";
str = str + " world!";

System.out.println(str); // hello world! ๊ฐ€ ์ถœ๋ ฅ๋จ.

ใ„ด. ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์€ ๋งˆ์น˜ str ๊ฐ’์ด ์ƒˆ๋กญ๊ฒŒ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์•„๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ƒˆ๋กœ "hello world!" ๊ฐ’์„ ์ €์žฅํ•œ ์˜์—ญ์„ ๋งŒ๋“ค๊ณ , ๋ณ€์ˆ˜ str์„ ๋‹ค์‹œ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

 

 

 


 

 

 

StringBuffer ํด๋ž˜์Šค & StringBuilder ํด๋ž˜์Šค

 

StringBuffer ํด๋ž˜์Šค์™€ StringBuilder ํด๋ž˜์Šค๋Š” ์‚ฌ์šฉ ๋ฌธ๋ฒ•์ด ์„œ๋กœ ๋™์ผํ•˜๋‹ค. ๋‘˜์˜ ์ฐจ์ด๋Š” ๋‚ด๋ถ€์ ์ธ ๋™์ž‘์— ์žˆ๋‹ค.

๋จผ์ € StringBuffer ํด๋ž˜์Šค์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์ž.

 

 

i) StringBuffer ํด๋ž˜์Šค

  • ๊ฐ€๋ณ€ํ˜• ์ž๋ฃŒํ˜•
  • ๋ฌธ์ž์—ด์„ ์ถ”๊ฐ€ or ๋ณ€๊ฒฝํ• ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • 'concat() ๋ฉ”์†Œ๋“œ'์™€ '+ ์—ฐ์‚ฐ'์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ด์–ด๋ถ™์ผ๋•Œ , StringBuffer ํด๋ž˜์Šค๋Š” ๋‚ด๋ถ€์˜ ๋ฒ„ํผ(buffer)๋ผ๋Š” ๋…๋ฆฝ์ ์ธ ๊ณต๊ฐ„์„ ๊ฐ€์ ธ, ๊ทธ๊ณณ์— ๋ฌธ์ž์—ด์„ ๋ฐ”๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ Stringํด๋ž˜์Šค๋ณด๋‹ค ๊ณต๊ฐ„์˜ ๋‚ญ๋น„๊ฐ€ ์ ๊ณ , ์—ฐ์‚ฐ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  • ๋‚ด๋ถ€์˜ ๋ฒ„ํผ ํฌ๊ธฐ์˜ ๊ธฐ๋ณธ๊ฐ’์€ 16๊ฐœ ๋ฌธ์ž๊ฐ€ ์ €์žฅ๋˜๋Š” ํฌ๊ธฐ์ด๋‹ค. ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๋ณ„๋„ ์ง€์ •ํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค.
StringBuffer str1 = new StringBuffer(); // ๊ธฐ๋ณธ 16 ๋ฒ„ํผ ํฌ๊ธฐ๋กœ ์ƒ์„ฑ

// str1.capacity() - StringBuffer ๋ณ€์ˆ˜์˜ ๋ฐฐ์—ด ์šฉ๋Ÿ‰์˜ ํฌ๊ธฐ ๋ฐ˜ํ™˜
System.out.println(str1.capacity()); // 16 
 
str1.append("1111111111111111111111111111111111111111"); // 40๊ธธ์ด์˜ ๋ฌธ์ž์—ด์„ append
System.out.println(str1.capacity()); // 40 (์ถ”๊ฐ€๋œ ๋ฌธ์ž์—ด ๊ธธ์ด๋งŒํผ ๋Š˜์–ด๋‚จ)

 

 

i-1) StringBuffer ๋‚ด์žฅ ๋ฉ”์†Œ๋“œ

 

  • StringBufferํด๋ž˜์Šค ๋ฉ”์„œ๋“œ์™€ StringBuilder ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ๋ฒ•์€ ๋™์ผํ•˜๋‹ค.
StringBuffer( )
๋ฒ„ํผ์˜ ๊ธธ์ด๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํฌ๊ธฐ๊ฐ€  16 ์ธ ๋ฒ„ํผ๋ฅผ ์ƒ์„ฑ


StringBuffer(int length)
length ๊ธธ์ด๋ฅผ ๊ฐ€์ง„  StringBuffer ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค(buffer)๋ฅผ ์ƒ์„ฑ


StringBuffer(String str)
์ง€์ •ํ•œ ๋ฌธ์ž์—ด( str )์˜ ๊ธธ์ด๋ณด๋‹ค  16 ๋งŒํผ ๋” ํฐ ๋ฒ„ํผ๋ฅผ ์ƒ์„ฑ


StringBuffer append(boolean b)
StringBuffer append(char c)
StringBuffer append(char[ ] str)
StringBuffer append(double d)
StringBuffer append(float f)
StringBuffer append(int i)
StringBuffer append(long l)
StringBuffer append(Object obj)
StringBuffer append(String str)
๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ž…๋ ฅ๋œ ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ  StringBuffer ์ธ์Šคํ„ด์Šค๊ฐ€ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๋ฌธ์ž์—ด์˜ ๋’ค์— ๋ง๋ถ™์ž„


int capacity( )
 StringBuffer ์ธ์Šคํ„ด์Šค์˜ ๋ฒ„ํผํฌ๊ธฐ ๋ฐ˜ํ™˜ (์ž๋ฃŒํ˜•์˜ ํ• ๋‹น๋œ ํฌ๊ธฐ๋ฅผ ๋ฐ˜ํ™˜)


int length( )
 StringBuffer ์ธ์Šคํ„ด์Šค์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด ๋ฐ˜ํ™˜ (๋ฒ„ํผ์— ๋‹ด๊ธด ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜)


char charAt(int index)
์ง€์ •๋œ ์œ„์น˜( index )์— ์žˆ๋Š” ๋ฌธ์ž๋ฅผ ๋ฐ˜ํ™˜


StringBuffer delete(int start, int end)
์‹œ์ž‘์œ„์น˜( start )๋ถ€ํ„ฐ ๋ ์œ„์น˜( end )์‚ฌ์ด์— ์žˆ๋Š” ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐ
๋‹จ,  end ์œ„์น˜์˜ ๋ฌธ์ž๋Š” ์ œ์™ธ(start <= x < end)


StringBuffer deleteCharAt(int index)
์ง€์ •๋œ ์œ„์น˜( index )์˜ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐ


StringBuffer insert(int pos, boolean b)
StringBuffer insert(int pos, char c)
StringBuffer insert(int pos, char[ ] str)
StringBuffer insert(int pos, doule d)
StringBuffer insert(int pos, float f)
StringBuffer insert(int pos, int i)
StringBuffer insert(int pos, long l)
StringBuffer insert(int pos, Object obj)
StringBuffer insert(int pos, String str)
๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ง€์ •๋œ ์œ„์น˜( pos )์— ์ถ”๊ฐ€
( pos ๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘)


StringBuffer replace(int start, int end, String str)
์ง€์ •๋œ ๋ฒ”์œ„( start  ~  end )์˜ ๋ฌธ์ž๋“ค์„ ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊พผ๋‹ค.
๋‹จ,  end ์˜ ์œ„์น˜๋Š” ๋ฒ”์œ„์— ํฌํ•จ๋˜์ง€ X (start <= x < end)


StringBuffer reverse( )
 StringBuffer ์ธ์Šคํ„ด์Šค์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์˜ ์ˆœ์„œ๋ฅผ ๊ฑฐ๊พธ๋กœ ๋‚˜์—ด


void setCharAt(int index, char ch)
์ง€์ •๋œ ์œ„์น˜( index )์˜ ๋ฌธ์ž๋ฅผ ์ฃผ์–ด์ง„ ๋ฌธ์ž( ch )๋กœ ๋ฐ”๊พผ๋‹ค.


void setLength(int newLength)
์ง€์ •๋œ ๊ธธ์ด๋กœ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ๋ณ€๊ฒฝ
๊ธธ์ด๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‚˜๋จธ์ง€ ๋นˆ๊ณต๊ฐ„๋“ค์„ ๋„๋ฌธ์ž( \u0000 )๋กœ ์ฑ„์šด๋‹ค.


String toString( )
 StringBuffer ์ธ์Šคํ„ด์Šค์˜ ๋ฌธ์ž์—ด์„  String ์œผ๋กœ ๋ณ€ํ™˜


String substring(int start)
String substring(int start, int end)
์ง€์ •๋œ ๋ฒ”์œ„ ๋‚ด์˜ ๋ฌธ์ž์—ด์„  String ์œผ๋กœ ๋ฝ‘์•„์„œ ๋ฐ˜ํ™˜
(์‹œ์ž‘์œ„์น˜( start )๋งŒ ์ง€์ •ํ•˜๋ฉด ์‹œ์ž‘์œ„์น˜๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋ฝ‘์•„์„œ ๋ฐ˜ํ™˜)

 

*์ถœ์ฒ˜: @Inpa Dev ํ‹ฐ์Šคํ† ๋ฆฌ

 

 

 

๐ŸŒŸ 

String ํด๋ž˜์Šค๋Š” ๊ฐ’์ด ๋ณ€๊ฒฝ๋ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กญ๊ฒŒ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ˜๋ฉด, StringBuffer ํด๋ž˜์Šค์™€ StringBuilder ํด๋ž˜์Šค๋Š” ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๊ธฐ์กด ๋ฌธ์ž์—ด์— ์ˆ˜์ •๋˜์–ด ์ ์šฉ๋จ์œผ๋กœ, ๋ฌธ์ž๋ฅผ ์ˆ˜์ •, ์‚ญ์ œ, ํ•ฉ์น˜๋Š” ๊ฒฝ์šฐ์—๋Š” StringBuilder ํด๋ž˜์Šค/ StringBuffer ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋ฐ”๋žŒ์งํ•˜๋‹ค. 

 

 

 


 

 

 

ii. StringBuffer / StringBuilder ํด๋ž˜์Šค ๋น„๊ต

 

 

 

 

1. ๋‘ ํด๋ž˜์Šค์˜ ์ฐจ์ด์ 

StringBuffer ํด๋ž˜์Šค StringBuilder ํด๋ž˜์Šค
๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•จ. ๋ฌธ์ž์—ด ํŒŒ์‹ฑ ์„ฑ๋Šฅ์ด ๊ฐ€์žฅ ์šฐ์ˆ˜ํ•จ.
์Šค๋ ˆ๋“œ safe ๊ธฐ๋Šฅ ์ œ๊ณต ใ…‡
(์„ฑ๋Šฅ ์ €ํ•˜ ์š”์ธ)
์Šค๋ ˆ๋“œ safe ๊ธฐ๋Šฅ ์ œ๊ณต x

 

 

 

 

2. ๋™๋“ฑ๋น„๊ต

 

StringBuffer ํด๋ž˜์Šค/ StrtingBuilder ํด๋ž˜์Šค-> String ํด๋ž˜์Šค ๊ฐ์ฒด์™€ ๋‹ฌ๋ฆฌ equals() ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋กœ๋”ฉ X

 

StringBuffer sb = new StringBuffer("hello");
StringBuffer sb2 = new StringBuffer("hello");

System.out.println(sb == sb2); // false
System.out.println(sb2.equals(sb)); // false

๊ทธ๋Ÿฌ๋ฏ€๋กœ  toString() ์œผ๋กœ ๊ฐ์ฒด๋ฅผ String๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ ํ•œ ๋’ค์— equals() ๋กœ ๋น„๊ต ํ•ด์ค˜์•ผํ•œ๋‹ค..

 

String sb_tmp = sb.toString();
String sb2_tmp = sb2.toString();
System.out.println(sb_tmp.equals(sb2_tmp)); // true

 

 

 

3. ๋ฌธ์ž์—ด ํ•ฉ์น˜๊ธฐ 

 

๐ŸŒŸ

  • '+' ์—ฐ์‚ฐ์ž๋กœ ํ•ฉ์น˜๊ธฐ
  • String.concat() ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉํ•˜๊ธฐ
  • StringBuffer() ๊ฐ์ฒด ์‚ฌ์šฉํ•˜๊ธฐ
  • StringBuilder() ๊ฐ์ฒด ์‚ฌ์šฉํ•˜๊ธฐ

 

String str ="hello ";

//1. + ์—ฐ์‚ฐ์ž ์ด์šฉ
String a = str +"world!";

//2. string.concat() ๋ฉ”์„œ๋“œ
String b = str.concat("world!");

//3. StringBuffer() ๊ฐ์ฒด ์ƒ์„ฑ
String c = new StringBuffer("hello ").appned("world!").toString();

//4. StringBuilder() ๊ฐ์ฒด ์ƒ์„ฑ
String d = new StringBuilder("hello ").append("world!").toString();

 

+์ฐธ๊ณ ๋กœ ์ด์ค‘์—์„œ ์„ฑ๋Šฅ์ด ๊ฐ€์žฅ ์ข‹์€ ๊ฒƒ์€ StringBuilder ๊ฐ์ฒด์™€ StringBuffer ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.! 

 

.

.

.

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ

๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ๋งŽ์€ ๊ฒฝ์šฐ, ์ฒ˜์Œ๋ถ€ํ„ฐ "StringBuilder() ๊ฐ์ฒด์ƒ์„ฑ ->  ๋ฌธ์ž์—ด๋กœ ์ „ํ™˜ .to.String() ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ!)" ํ•ด์„œ ๋‹ค๋ฃจ์ž..

StringBuilder a = new StringBuilder();

for(int i = 0; i < 10000; i++) {
    a.append(i);
}

final String b = a.toString();

 

 

 

 

 


 

StringTokenizer ํด๋ž˜์Šค

 

  • Stringํด๋ž˜์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” split() ๋ฉ”์†Œ๋“œ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํด๋ž˜์Šค
  • ์ „๋‹ฌ ๋ฐ›์€ ๋ฌธ์ž์—ด์„ ๊ตฌ๋ถ„์ž๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ ํ† ํฐ์— ์ €์žฅํ•œ๋‹ค.

 

public static void main(String[] args) {

		String str ="์ด๋–ก๋ณถ,22,์„œ์šธํŠน๋ณ„์‹œ ์–‘์ฒœ๊ตฌ ๋ชฉ๋™ ,์—ฌ";
		StringTokenizer st = new StringTokenizer(str,",");
		System.out.println(st.countTokens());
		
		while(st.hasMoreTokens()) {
			System.out.println(st.nextToken());
		}
          
}

 

  • countTokens() : ํ† ํฐ์˜ ๊ฐœ์ˆ˜ ๋‚˜ํƒ€๋‚ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ

์ถœ๋ ฅ๊ฒฐ๊ณผ

 

 

 

  • StringTokenizer ํด๋ž˜์Šค์™€ String์˜ split() ๋ฉ”์„œ๋“œ์˜ ์ฐจ์ด์ : split์€ Stringํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ, ์ถ”์ถœํ•œ ๋ฌธ์ž๋ฅผ ๋ฐฐ์—ด(!=ํ† ํฐ)๋กœ ์ €์žฅํ•จ.
  • coundtToken(), nextToken(), hasMoreTokens()...

 

 

 

 

 


 

 

๐ŸŒŸ๋ฌธ์ž์—ด ์ž๋ฃŒํ˜• ์ด์ •๋ฆฌ 

  String StringBuffer StringBuilder
๊ฐ€๋ณ€ ์—ฌ๋ถ€ ๋ถˆ๋ณ€ ๊ฐ€๋ณ€ ๊ฐ€๋ณ€
์Šค๋ ˆ๋“œ ์„ธ์ดํ”„(thread safe) O O X
์—ฐ์‚ฐ์†๋„ ๋Š๋ฆผ ๋น ๋ฆ„ ์•„์ฃผ๋น ๋ฆ„
์‚ฌ์šฉ์‹œ์  ·๋ฌธ์ž์—ด ์ถ”๊ฐ€ ์—ฐ์‚ฐ์ด ์ ์œผ๋ฉฐ
·์Šค๋ ˆ๋“œ ์„ธ์ดํ”„ ํ™˜๊ฒฝ์—์„œ
·๋ฌธ์ž์—ด ์ถ”๊ฐ€ ์—ฐ์‚ฐ์ด ๋งŽ๊ณ 
·์Šค๋ ˆ๋“œ ์„ธ์ดํ”„ ํ™˜๊ฒฝ์—์„œ
·๋ฌธ์ž์—ด ์ถ”๊ฐ€ ์—ฐ์‚ฐ์ด ๋งŽ๊ณ 
·๋น ๋ฅธ ์—ฐ์‚ฐ์ด ํ•„์š”ํ• ๋•Œ
·๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์ผ๋•Œ

 

 

 

 

 

 


 

 

 

 

 

 

ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด๋‚˜ ์ด์ƒํ•œ ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ์ง€์ ํ•ด์ฃผ์„ธ์š”! 

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

 

 

 

 

*์ •๋ณด ๋ฐ’ ์ž๋ฃŒ ์ถœ์ฒ˜: @Inpa Dev ํ‹ฐ์Šคํ† ๋ฆฌ, pdf ์ž๋ฃŒ ์ฐธ๊ณ 

728x90

TOP

Designed by ํ‹ฐ์Šคํ† ๋ฆฌ