๊ฐœ๋ฐœ์ผ์ง€

๋น„ํŠธ์—ฐ์‚ฐ์ž(Bitwise operator)๊ฐ€ ์‚ฐ์ˆ ์—ฐ์‚ฐ์ž(Arithmetic operator)๋ณด๋‹ค ๋” ๋น ๋ฅผ๊นŒ? - JVM, ๋ฐ”์ดํŠธ์ฝ”๋“œ, ์ปดํŒŒ์ผ๋Ÿฌ ๋ณธ๋ฌธ

Backend๐Ÿงฑ

๋น„ํŠธ์—ฐ์‚ฐ์ž(Bitwise operator)๊ฐ€ ์‚ฐ์ˆ ์—ฐ์‚ฐ์ž(Arithmetic operator)๋ณด๋‹ค ๋” ๋น ๋ฅผ๊นŒ? - JVM, ๋ฐ”์ดํŠธ์ฝ”๋“œ, ์ปดํŒŒ์ผ๋Ÿฌ

doublejune 2024. 11. 12. 12:51

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๊ฐ€, 

๋‚˜๋Š” 

answer = a / 2

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด์—์„œ๋Š”

answer = a >> 1

์ธ ๊ฒƒ์„ ๋ณด์•˜๋‹ค.

 

์œ„๋Š” ์‚ฐ์ˆ ์—ฐ์‚ฐ์ž( / , *, +, -) ์•„๋ž˜๋Š” ๋น„ํŠธ์—ฐ์‚ฐ์ž(shift, and, or, not)์ด๋‹ค. ๊ทธ์ค‘ >>๋Š” shift ์—ฐ์‚ฐ์ž์ด๋‹ค.

 

๋น„ํŠธ์—ฐ์‚ฐ์ž๊ฐ€ ์‚ฐ์ˆ ์—ฐ์‚ฐ์ž๋ณด๋‹ค ๋” ๋น ๋ฅด๋‹ค๋Š” ๊ธ€๋“ค์„ ๋ณด์•˜๋Š”๋ฐ, ์ง์ž‘ํ•ด๋ด๋„ ๊ทธ๋Ÿด ๊ฒƒ ๊ฐ™๋‹ค. ์–ด์งœํ”ผ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  shift๋Š” ๊ธฐ๊ณ„์–ด๊ฐ€ ํ•œ ๋ฒˆ์—(ํ•œ ํด๋Ÿญ์—) ์‹คํ–‰๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ๋ช…๋ น์–ด ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ๊ฒฐ๊ตญ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ธ // ์€ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ตญ shift๋กœ ๋ณ€ํ™˜๋˜๊ฑฐ๋‚˜, ๋˜ ๋‹ค๋ฅธ ๋‹จ์ˆœํ•œ ๋ช…๋ น์–ด๋“ค์˜ ์กฐํ•ฉ์œผ๋กœ ๊ณ„์‚ฐ ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ๋น„ํŠธ์—ฐ์‚ฐ์ž๊ฐ€ ๋” ๋น ๋ฅผ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

 

A. ๊ฒฐ๋ก ์€?

 ๋น ๋ฅผ ์ˆ˜๋„ ์žˆ๊ณ , ๋น ๋ฅด์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

n / d ์—์„œ,

 

- d์ด 2์˜ ๋ฐฐ์ˆ˜์ด๋ฉด ๋น„ํŠธ์—ฐ์‚ฐ์ž๊ฐ€ ๋น ๋ฅธ ๊ฒƒ์ด ๋งž๋‹ค. ํ•˜์ง€๋งŒ ์‚ฐ์ˆ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ Optimization์„ ์ง„ํ–‰ํ•˜๋ฉฐ shfit์—ฐ์‚ฐ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฑฐ์˜ ์ฐจ์ด๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋ณด๋Š”๊ฒŒ ๋งž๋‹ค. *๊ทธ๋Ÿฌ๋‚˜ ์ž„๋ฒ ๋””๋“œ ํ™˜๊ฒฝ์—์„œ ์ œํ•œ๋œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ”๋”ฉํ•  ๋•Œ๋Š” ์œ ์˜๋ฏธํ•œ ์ฐจ์ด๊ฐ€ ๋‚  ์ˆ˜ ์žˆ๋‹ค.

 

- d๊ฐ€ 2์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋น„ํŠธ์—ฐ์‚ฐ์ž๊ฐ€ ๋น ๋ฅธ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. 2์˜ ๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด shift์—ฐ์‚ฐ์ด ๋ถˆ๊ฐ€ํ•˜๊ณ , ๊ณฑ์…‰๊ณผ ๋นผ๊ธฐ์˜ ๋ฐ˜๋ณต์œผ๋กœ ๋” ๋ณต์žกํ•œ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋‹ค. ๋น„ํŠธ์—ฐ์‚ฐ์ž๊ฐ€ ์ด ๋ณต์žกํ•œ ์—ฐ์‚ฐ์—์„œ ๋” ๋น ๋ฅผ๊ฒƒ์ด๋ผ๊ณ  ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค.

 

๊ณ ๋กœ, ์ œํ•œ๋œ ํ™˜๊ฒฝ์—์„œ low level ์–ธ์–ด๋กœ ์ฝ”๋”ฉํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ๊ตณ์ด ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ ค ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

B. ์™œ๋ƒ๋ฉด

(1) JavaํŒŒ์ผ์ด ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜๋˜๋Š”๊ณผ์ •

๊ฒฐ๋ก ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด, ์šฐ์„  ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜๋˜๋Š”์ง€ ๋ณด์ž.

์ž๋ฐ”๋ฅผ ์˜ˆ๋กœ๋“ค์–ด

์ถœ์ฒ˜: https://www.happykoo.net/@happykoo/posts/242

 

.java ํŒŒ์ผ์€ .class(๋ฐ”์ดํŠธ์ฝ”๋“œ)๋กœ ๋ฐ”๋€Œ๊ณ , JVM์„ ํ†ตํ•ด ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

 

- ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ: javaํŒŒ์ผ์„ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜

- JVM : ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ OS์— ๋งž๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค./ ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌํ•œ๋‹ค. ๋•๋ถ„์— OS์— ๋Œ€ํ•ด์„œ ๋…๋ฆฝ์ ์ด๋‹ค. ์ปดํ“จํ„ฐ์—์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• ์„ ํ•˜๋Š” JVM์„ ํ†ตํ•ด ์‹คํ–‰ํ•œ๋‹ค.

 

๊ฒฐ๊ตญ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜๋œ๋‹ค.

์ด ๊ณผ์ •์—์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ฝ”๋“œ๋ฅผ ๋ณ€ํ™˜ํ•จ๊ณผ ๋™์‹œ์— Optimization(์ตœ์ ํ™”)๋ฅผ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๊ทธ ๋•Œ ๋น„ํŠธ์—ฐ์‚ฐ์œผ๋กœ ๋ณ€ํ™˜ ๋  ์ˆ˜ ์žˆ๋Š” ์‚ฐ์ˆ ์—ฐ์‚ฐ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๋ณ€ํ™˜๋œ๋‹ค.

 

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ตœ์ ํ™”๋ฅผ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ์ œํ•œ๋œ ํ™˜๊ฒฝ(๋ฉ”๋ชจ๋ฆฌ ์ œ์•ฝ ๋“ฑ)์—์„œ์˜ low-level์–ธ์–ด ์ฝ”๋“œ ์ž‘์„ฑ์ด ์•„๋‹ˆ๋ผ๋ฉด ๊ตณ์ด ๋น„ํŠธ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

(2) ๊ฐ’์ด 2์˜ ๋ฐฐ์ˆ˜์ผ ๋•Œ, ์•„๋‹ ๋•Œ 

 bit ๋Š” 0๊ณผ 1์˜ ๊ฐ’๋งŒ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” 2์ง„์ˆ˜์ด๋‹ค. ๋น„ํŠธ์—ฐ์‚ฐ์ž shift(์ž๋ฆฟ์ˆ˜ ์˜ค๋ฅธ์ชฝ ์ด๋™, ์™ผ์ชฝ ์ด๋™)

์ถœ์ฒ˜: https://wikidocs.net/258135

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— n / d ์˜ ๊ฒฝ์šฐ, d๊ฐ€ 2์˜๋ฐฐ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, shift ๊ฐ€ ์•„๋‹ˆ๋ผ 

ex) 10 / 3 

=>

10 - 3 = 7

7 - 3 = 4

4 - 3 = 1

3๋ฒˆ ๋บ์œผ๋ฏ€๋กœ ๋ชซ์€ 3, ๋‚˜๋จธ์ง€ ๊ฐ’์€ 1

๊ณผ ๊ฐ™์ด ๋ฐ˜๋ณต๋˜๋Š” ๋นผ๊ธฐ์™€ ๋”ํ•˜๊ธฐ๋กœ ์—ฐ์‚ฐํ•ด์•ผํ•œ๋‹ค.

 

์ด ๊ฒฝ์šฐ ๋น„ํŠธ์—ฐ์‚ฐ์ž๊ฐ€ ์‚ฐ์ˆ ์—ฐ์‚ฐ์ž๋ณด๋‹ค ๋” ๋‚ซ์ง€ ์•Š๋‹ค.

 

C. ๋” ์•Œ์•„๋ณผ ๋‚ด์šฉ

- ์ž๋ฐ” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ JIT๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€

- Runtime Data Areas ์—์„œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”

 

์ฐธ์กฐ

https://velog.io/@yoondoong/%EB%B0%94%EC%9D%B4%ED%8A%B8-%EC%BD%94%EB%93%9C%EB%A5%BC-%EC%9D%BD%EB%8A%94-%EB%B0%A9%EC%8B%9D

 

๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๋ฐฉ์‹

.java ์ฝ”๋“œ๋ฅผ ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ(Javac)๊ฐ€ ์ปดํŒŒ์ผ ํ•˜๊ฒŒ๋˜๋ฉด .Class ํ˜•ํƒœ์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ์ด .Class ํŒŒ์ผ๋กœ ๋œ ์ฝ”๋“œ๋ฅผ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ผ๊ณ  ํ•จ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, JVM์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ณ€ํ™˜๋œ ์ž๋ฐ” ์†Œ์Šค

velog.io

https://www.happykoo.net/@happykoo/posts/242

 

ํ•ดํ”ผ์ฟ  ๋ธ”๋กœ๊ทธ - [Java] ์ž๋ฐ”์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

๋ˆ„๊ตฌ๋‚˜ ์†์‰ฝ๊ฒŒ ์šด์˜ํ•˜๋Š” ๋ธ”๋กœ๊ทธ!

www.happykoo.net

https://beststar-1.tistory.com/2