Skip to content

[item63] String '+' ์—ฐ์‚ฐ ์„ฑ๋Šฅ์€ ๊ฐœ์„ ๋œ๊ฑธ๊นŒย #89

@jun108059

Description

@jun108059
  • ์งˆ๋ฌธ 1) JDK 6์—์„œ ์–ด๋–ค ๋ถ€๋ถ„์ด ๊ฐœ์„ ๋์„๊นŒ์š”?
  • ์งˆ๋ฌธ 2) ์ด๋ ‡๊ฒŒ ๊ฐœ์„ ๋๋Š”๋ฐ ์™œ ์•„์ง๋„ String '+' ์—ฐ์‚ฐ์€ ์—„์ฒญ ๋А๋ฆด๊นŒ์š”?

์งˆ๋ฌธ 1) JDK 6์—์„œ ์–ด๋–ค ๋ถ€๋ถ„์ด ๊ฐœ์„ ๋์„๊นŒ์š”?

366p ๋งˆ์ง€๋ง‰ ๋ฌธ๋‹จ
์ž๋ฐ” 6 ์ดํ›„ ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ ์„ฑ๋Šฅ์„ ๋‹ค๋ฐฉ๋ฉด์œผ๋กœ ๊ฐœ์„ ํ–ˆ์ง€๋งŒ, โ€ฆ

์ฑ…์—๋Š” ์ž๋ฐ”6 ์ดํ›„ ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ–ˆ๋‹ค๊ณ  ๋˜์–ด์žˆ์ง€๋งŒ ์•„๋ฌด๋ฆฌ ์ฐพ์•„๋ด๋„ ์ž๋ฐ”5 ๋ถ€ํ„ฐ String โ€˜+โ€™ operator๋Š” ์ปดํŒŒ์ผ ์‹œ StringBuilder(๋˜๋Š” StringBuffer)๋กœ ๋ณ€ํ™˜๋˜๋„๋ก ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ ๋ฐ–์— ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž๋ฐ”6์—์„œ ์–ด๋–ค ๋ถ€๋ถ„์ด ๊ฐœ์„ ๋๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜ญ

image

์ถœ์ฒ˜ : JDK 5 docs : String

์ด๊ฒƒ๋งˆ์ €๋„ String โ€˜+โ€™ ์—ฐ์‚ฐ๋ณด๋‹ค ๊ฐ์ฒด ์ƒ์„ฑ ๋น„์šฉ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค.

  1. StringBuilder์™€ String Buffer๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ดˆ๊ธฐ capacity๊ฐ€ 16 characters๋กœ ์„ค์ •๋˜๊ณ , ์ด๋Š” ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘์•„์„œ ์žฌํ• ๋‹น์œผ๋กœ ์ธํ•œ ์ถ”๊ฐ€ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
  2. loop๋ฅผ ๋Œ ๋•Œ StringBuilder ๊ฐ์ฒด๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

์ถ”๊ฐ€์ ์œผ๋กœ, JDK 9 ๋ฒ„์ „ ๋ถ€ํ„ฐ๋Š” ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด StringConcatFactory ๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

JDK8 ๋ฒ„์ „๊ณผ JDK 11๋ฒ„์ „์œผ๋กœ ๊ฐ๊ฐ ์ปดํŒŒ์ผํ•˜์—ฌ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•œ ๊ธ€์„ ์ฐธ๊ณ ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

image

์ถœ์ฒ˜ : https://jerry92k.tistory.com/50

์ขŒ์ธก JDK8 ๋ฒ„์ „์€ ๋ฐ˜๋ณต๋ฌธ(L5) ์•ˆ์—์„œ NEW java/lang/StringBuilder๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด StringBuilder ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , JDK11 ๋ฒ„์ „์€ StringConcatFatory.makeConcatWithConstants ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์งˆ๋ฌธ 2) ์ด๋ ‡๊ฒŒ ๊ฐœ์„ ๋๋Š”๋ฐ ์™œ ์•„์ง๋„ String '+' ์—ฐ์‚ฐ์€ ์—„์ฒญ ๋А๋ฆด๊นŒ์š”?

JDK ๋ฒ„์ „์ด ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ String โ€˜+โ€™ ์—ฐ์‚ฐ์ด ๊ฐœ์„ ๋๊ธฐ ๋•Œ๋ฌธ์— ๋”์ด์ƒ StringBuilder๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ์˜๊ฒฌ์€ ์–ด๋ ต์ง€ ์•Š๊ฒŒ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ œ๊ฐ€ JDK 18 ๋ฒ„์ „ ๊ธฐ์ค€์œผ๋กœ ํ…Œ์ŠคํŠธํ•ด๋ณด๋‹ˆ ์—ฌ์ „ํžˆ ํฐ ์„ฑ๋Šฅ ์ฐจ์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

image

(10๋ฒˆ ์—ฐ์‚ฐ)

image

(1,000๋ฒˆ ์—ฐ์‚ฐ)

image

(50,000๋ฒˆ ์—ฐ์‚ฐ)

1,000๋ฒˆ 50,000๋ฒˆ ์—ฐ์‚ฐ์€ ๋‹น์—ฐํžˆ ๋А๋ ค์ง€๊ฒ ์ง€๋งŒ, ์ ์–ด๋„ 10๋ฒˆ ์—ฐ์‚ฐ์—์„œ๋Š” โ€˜+โ€™ ์—ฐ์‚ฐ์—์„œ๋„ ๋‚ด๋ถ€์ ์œผ๋กœ StringBuilder๋ฅผ ์ƒ์„ฑํ•ด์„œ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ๊ฑฐ์˜ ์—†์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์€๋ฐ.. (์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ฐจ์ด๋Š” ์žˆ์ง€๋งŒ) 200๋ฐฐ ์ด์ƒ ๋А๋ฆฐ๊ฒŒ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

image

(String โ€˜+โ€™ ์—ฐ์‚ฐ๊ณผ StringBuilder์˜ Bytecode ๋น„๊ต)

ํ˜น์‹œ๋‚˜ ํ•˜์—ฌ ByteCode๋ฅผ ํ™•์ธํ•ด๋ณด์•„๋„ JDK 9 ๋ฒ„์ „์— ์ถ”๊ฐ€๋œ makeConcatWithConstants ๋ฉ”์„œ๋“œ๋กœ โ€˜+โ€™์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์œ ๋ฅผ ์•„์‹œ๋Š” ๋ถ„์ด ์žˆ๋‹ค๋ฉด ๋„์™€์ฃผ์„ธ์š”!

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions