String , StringBuffer , StringBuilder and Synchronized

์žฅํ˜„์ง„ยท2022๋…„ 12์›” 6์ผ
0

๐Ÿ’กJava ์—์„œ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃจ๋ฅผ ๋Œ€ํ‘œ์ ์ธ ํด๋ž˜์Šค๋กœ String , StringBuffer, StringBuilder ์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.

String

  • String์€ ๋ฌธ์ž๋“ค์„ ์œ ๋‹ˆ์ฝ”๋“œ๋กœ ๋ณด๊ด€ ํ•œ๋‹ค.

    • HTML / ๋งˆํฌ์—… ๋ฌธ์ž๋“ค์„ ์ €์žฅ ํ• ์ˆ˜ ์—†๋‹ค
    • ์œ ๋‹ˆ์ฝ”๋“œ ๋ฒ”์œ„๋ฅผ ๋„˜์„ ๊ฒฝ์šฐ ์—๋Ÿฌ๋ฐ˜ํ™˜
  • String์€ ๋ถˆ๋ณ€์„ฑ์„ ๊ฐ€์ง

    • ์ €์žฅ๋˜๋Š” value๊ฐ€ final๋กœ ์„ ์–ธ๋จ
       private final byte[] value;
    • ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ• ์ˆ˜ ์—†๊ณ  ์—ฐ์‚ฐํ• ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ƒ์„ฑ
  • ๋•Œ๋ฌธ์— ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ž์—ด์„ ์ž์ฃผ ์ฝ์–ด๋“ค์ด๋Š” ๊ฒฝ์šฐ String์„ ์‚ฌ์šฉํ•ด ์ฃผ์‹œ๋ฉด ์ข‹์€ ์„ฑ๋Šฅ ๋ณด์—ฌ์ค€๋‹ค.

  • ๋ฌธ์ž์—ด ์ถ”๊ฐ€,์ˆ˜์ •,์‚ญ์ œ ๋“ฑ์˜ ์—ฐ์‚ฐ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— String ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํž™ ๋ฉ”๋ชจ๋ฆฌ(Heap)์— ๋งŽ์€ ์ž„์‹œ ๊ฐ€๋น„์ง€(Garbage)๊ฐ€ ์ƒ์„ฑ๋˜์–ด GC ๋˜๋Š” full GC๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ• ์ˆ˜ ์žˆ์Œ.

StringBuffer / StringBuilder

String์˜ ๋‹จ์ ์„ ๋ณด์•ˆํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค

  • String ๊ณผ๋Š” ๋ฐ˜๋Œ€๋กœ StringBuffer/StringBuilder ๋Š” ๊ฐ€๋ณ€์„ฑ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— .append() .delete() ๋“ฑ์˜ API๋ฅผ ์ด์šฉํ•˜์—ฌ ๋™์ผ ๊ฐ์ฒด๋‚ด์—์„œ ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ

StringBuffer : ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ๋งŽ๊ณ  ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์ผ ๊ฒฝ์šฐ
StringBuilder : ๋ฌธ์ž์—ด ์—ฐ์‚ฐ์ด ๋งŽ๊ณ  ๋‹จ์ผ์“ฐ๋ ˆ๋“œ์ด๊ฑฐ๋‚˜ ๋™๊ธฐํ™”๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒฝ์šฐ

StringBuffer + Synchronized

@Override
public synchronized int length() {
	return count;
}
    
@Override
public synchronized void setCharAt(int index, char ch) {
    toStringCache = null;
    super.setCharAt(index, ch);
}

synchronized ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์ œ์–ด๊ฐ€๋Šฅ

Synchronized

synchronized๋Š” 4๊ฐ€์ง€ ์„ ์–ธ ๋ฐฉ์‹์œผ๋กœ ์ œ์–ด๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.

1. synchronized method

synchronized method๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•˜์—ฌ lock์„ ๊ฑด๋‹ค.

๋™์ผํ•œ ์ธ์Šคํ„ด์Šค

	์Šค๋ ˆ๋“œ1 lock
	์Šค๋ ˆ๋“œ1 unlock
	์Šค๋ ˆ๋“œ2 lock
	์Šค๋ ˆ๋“œ2 unlock

์ˆœ์„œ๋Œ€๋กœ lock์„ ํš๋“ํ•˜๊ณ  ๋ฐ˜๋‚ฉ ( ์Šค๋ ˆ๋“œ1unlock ->์Šค๋ ˆ๋“œ2lock ๋ฐ”๋กœ ์ถœ๋ ฅ)

๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค

	์Šค๋ ˆ๋“œ1 lock
	์Šค๋ ˆ๋“œ2 lock
    ์Šค๋ ˆ๋“œ1 unlock
	์Šค๋ ˆ๋“œ2 unlock

์ด ์ƒํ™ฉ์—์„œ๋Š” lock์„ ๊ณต์œ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋™๊ธฐํ™”๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ฐ™์€ ์ธ์Šคํ„ด์Šค ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ

์ธ์Šคํ„ด์Šค ๊ธฐ์ค€์œผ๋กœ ๊ด€๋ฆฌ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ์—ฌ๋„ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค ์•ˆ์—์„œ synchronizedํ‚ค์›Œ๋“œ๋ฅผ ์ ์šฉํ–ˆ์„๊ฒฝ์šฐ ๋™๊ธฐํ™”๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๐Ÿ’กsynchronize๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค ๋‹จ์œ„๋กœ lock์„ ๊ฑด๋‹ค. ์ด๋•Œ, synchronized๊ฐ€ ์ ์šฉ๋œ ๋ชจ๋“  object์— ๋Œ€ํ•ด์„œ lock์„ ๊ณต์œ ํ•œ๋‹ค.

2. static synchronized method

static์ด ํฌํ•จ๋œ synchronized method๋ฐฉ์‹์€ ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” static์˜ ์„ฑ์งˆ์„ ๊ฐ–๋Š”๋‹ค. ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค ๋‹จ์œ„๋กœ lock์ด ๋ฐœ์ƒํ•œ๋‹ค.

๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค์ด์ง€๋งŒ ๋™์ผํ•œ ํด๋ž˜์Šค์ด๊ธฐ ๋•Œ์šด์— ํด๋ž˜์Šค ๋‹จ์œ„๋กœ lock์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€