Bibi's DevLog ๐Ÿค“๐ŸŽ

[Java] final (ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ, ๋ณ€์ˆ˜, ์ธ์Šคํ„ด์Šค๋ณ€์ˆ˜) ๋ณธ๋ฌธ

๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ/Java ์ž๋ฐ”

[Java] final (ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ, ๋ณ€์ˆ˜, ์ธ์Šคํ„ด์Šค๋ณ€์ˆ˜)

๋น„๋น„ bibi 2021. 2. 18. 00:20

final

('์ž๋ฐ”์˜ ์‹ ' ์„ ์ฐธ๊ณ ํ•˜๋ฉฐ ๋‚ด์šฉ์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค)

์ž๋ฐ” ์˜ˆ์•ฝ์–ด ์ค‘ ํ•˜๋‚˜์ธ final ์€ ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ, ๋ณ€์ˆ˜์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

final ํด๋ž˜์Šค

ํด๋ž˜์Šค๋ฅผ final๋กœ ์„ ์–ธ ์‹œ, ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ํ™•์žฅํ•ด์„œ ์“ธ ์ˆ˜ ์—†๋‹ค. (extendsํ•  ์ˆ˜ ์—†๋‹ค)

  • public final class FinalClass() { ... }
    ์ ‘๊ทผ์ œ์–ด์ž์™€ class ์‚ฌ์ด์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ๋” ์ด์ƒ ํ™•์žฅํ•ด์„œ๋Š” ์•ˆ ๋˜๋Š” ํด๋ž˜์Šค์— ์‚ฌ์šฉํ•จ
  • ๋ˆ„๊ตฐ๊ฐ€ ์ด ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•จ

final ๋ฉ”์†Œ๋“œ

๋ฉ”์†Œ๋“œ๋ฅผ final๋กœ ์„ ์–ธ ์‹œ, ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๋ฅผ Overridingํ•  ์ˆ˜ ์—†๋‹ค.

  • public final void finalMethods() { ... }
  • ๋ˆ„๊ตฐ๊ฐ€ ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•จ

final ๋ณ€์ˆ˜

๋ณ€์ˆ˜๋ฅผ final๋กœ ์„ ์–ธ ์‹œ, ๊ทธ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค.
๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜๋ฅผ final๋กœ ์„ ์–ธํ•˜๋ฉด, ๋ณ€์ˆ˜ ์ƒ์„ฑ๊ณผ ๋™์‹œ์— ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค.

  • private final int finalVariable = 0
  • ์ƒ์ˆ˜์™€ ๊ฐ™์ด ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ final๋กœ ์„ ์–ธํ•œ๋‹ค.
  • ๊ธฐ๋ณธ ์ž๋ฃŒํ˜• / ์ฐธ์กฐ ์ž๋ฃŒํ˜• ๋ชจ๋‘ final๋กœ ์„ ์–ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

final๋กœ ์„ ์–ธํ•œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜

(์ด ๋‚ด์šฉ์€ ''์ž๋ฐ”์˜ ์ •์„''์„ ์ฐธ๊ณ ํ•ด ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.๐Ÿ™‡โ€โ™€๏ธ)

final๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ์ƒ์ˆ˜๊ฐ€ ๋œ๋‹ค.
๋”ฐ๋ผ์„œ final๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋–„๋Š” ์„ ์–ธ๊ณผ ์ดˆ๊ธฐํ™”๋ฅผ ๋™์‹œ์— ํ•ด์•ผ ํ•œ๋‹ค. (๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค)

๊ทธ๋Ÿฌ๋‚˜ final๋กœ ์„ ์–ธํ•œ ์ธ์Šคํ„ด์Šค๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ, ์˜ˆ์™ธ์ ์œผ๋กœ ์ƒ์„ฑ์ž์—์„œ ์ดˆ๊ธฐํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
์ƒ์„ฑ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ธ์Šคํ„ด์Šค๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋Š” final ์ธ์Šคํ„ด์Šค๋ณ€์ˆ˜๊ฐ€ ๊ฐ ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.