๐ŸฉนInner class may be 'static'

์ตœ์žฌํ˜ยท2022๋…„ 7์›” 21์ผ
1
post-thumbnail

๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ์ •์ ์œผ๋กœ ์„ ์–ธํ•ด๋ผ. ๊ฒฝ๊ณ  ๋ฐœ๊ฒฌ

IntelliJ์—์„œ JAVA๋กœ ์ฝ”ํ…Œ ์ค€๋น„๋ฅผ ํ•˜๋˜ ์™€์ค‘,
Main ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Point ํด๋ž˜์Šค๋ฅผ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ๋‹ค.

public class Problem8_8 {

    ...
    
    class Point {
        int x;
        int y;
	
    ...
    
    

๊ทธ๋Ÿฐ๋ฐ, Point ํด๋ž˜์Šค์— ๋ฐ‘์ค„์ด ๊ทธ์–ด์ ธ ์žˆ๊ธธ๋ž˜ ๋‚ด์šฉ์„ ํ™•์ธํ•ด ๋ณด๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ๊ณ ๋ฅผ ๋‚˜ํƒ€๋‚ด์—ˆ๋‹ค.

๋Œ€์ถฉ ๐Ÿ“๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ์ •์  ํด๋ž˜์Šค์—ฌ์•ผ ํ•œ๋‹ค. ๋ผ๋Š”๋ฐ..
์ผ๋‹จ ์‹œํ‚ค๋Š” ๋Œ€๋กœ static ์„ ๋ถ™์—ฌ์ฃผ๋‹ˆ ๊ฒฝ๊ณ  ๋ฉ”์„ธ์ง€๋Š” ์‚ฌ๋ผ์กŒ๋‹ค.

public class Problem8_8 {

	...

	static class Point{
		int x;
    	int y;
    
    ...
    

์™œwhy...?

์™œ ์—ฌ๊ธฐ์„œ ์ •์ ์œผ๋กœ ์„ ์–ธํ•ด์•ผ ํ•˜๋Š”์ง€ ๋‚˜๋ฆ„๋Œ€๋กœ ์ƒ๊ฐํ•ด ๋ณด์•˜๋‹ค.

๋‚ด๋ถ€์˜ ์ •์  ํด๋ž˜์Šค๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ •์ ์ด ์•„๋‹Œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜๊ฐ€ ์—†๋Š”๋ฐ(์—ฌ๋Ÿฌ๋ฒˆ ์ ‘ํ•ด๋ณธ ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์•Œ๊ฒŒ ๋จ), ์–ด์ฐจํ”ผ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š์„ ๊ฑฐ๋ผ๋ฉด, ์ •์ ์œผ๋กœ ๋ช…์‹œํ•˜๋Š”๊ฒŒ ๋‚ซ์ง€ ์•Š์„๊นŒ..? (๋” ์ด์ƒ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์„ ํด๋ž˜์Šค๋ฅผ final ๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ)

--> ๐Ÿ’ฅ์ˆ˜์ •) ๋‚ด๋ถ€์˜ ์ •์  ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ์ •์  ๋ฉ”์†Œ๋“œ

๐Ÿคจ ใ…‡ใ…‡ ๊ทธ๋ž˜์„œ ์™œ ๋‚˜์€๋ฐ?

์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ, ๋ฉ”๋ชจ๋ฆฌ(!) ์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

์กฐ์Šˆ์•„ ๋ธ”๋กœํฌ, ใ€Ž์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ”ใ€์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ๋‚˜์˜จ๋‹ค. (์•„์ดํ…œ 24)

์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค์™€ ๋น„์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค์˜ ๊ตฌ๋ฌธ์ƒ ์ฐจ์ด๋Š” ๋‹จ์ง€ static์ด ๋ถ™์–ด์žˆ๊ณ  ์—†๊ณ  ๋ฟ์ด์ง€๋งŒ, ์˜๋ฏธ์ƒ ์ฐจ์ด๋Š” ์˜์™ธ๋กœ ๊ฝค ํฌ๋‹ค. ๋น„์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ์•”๋ฌต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ๋น„์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์—์„œ ์ •๊ทœํ™”๋œ this๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ”๊นฅ ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ๋ฐ”๊นฅ ์ธ์Šคํ„ด์Šค์˜ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ •๊ทœํ™”๋œ this๋ž€ ํด๋ž˜์Šค๋ช….this ํ˜•ํƒœ๋กœ ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์„ ๋ช…์‹œํ•˜๋Š” ์šฉ๋ฒ•์„ ๋งํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋…์ƒ ์ค‘์ฒฉ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ”๊นฅ ์ธ์Šคํ„ด์Šค์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ๋น„์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋Š” ๋ฐ”๊นฅ ์ธ์Šคํ„ด์Šค ์—†์ด๋Š” ์ƒ์„ฑํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋น„์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ๋ฐ”๊นฅ ์ธ์Šคํ„ด์Šค ์‚ฌ์ด์˜ ๊ด€๊ณ„๋Š” ๋ฉค๋ฒ„ ํด๋ž˜์Šค๊ฐ€ ์ธ์Šคํ„ด์Šคํ™”๋  ๋•Œ ํ™•๋ฆฝ๋˜๋ฉฐ, ๋” ์ด์ƒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. ์ด ๊ด€๊ณ„๋Š” ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์—์„œ ๋น„์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒŒ ๋ณดํ†ต์ด์ง€๋งŒ, ๋“œ๋ฌผ๊ฒŒ๋Š” ์ง์ ‘ ๋ฐ”๊นฅ ์ธ์Šคํ„ด์Šค์˜ ํด๋ž˜์Šค.new MemberClass(args)๋ฅผ ํ˜ธ์ถœํ•ด ์ˆ˜๋™์œผ๋กœ ๋งŒ๋“ค๊ธฐ๋„ ํ•œ๋‹ค. ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋“ฏ, ์ด ๊ด€๊ณ„ ์ •๋ณด๋Š” ๋น„์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์•ˆ์— ๋งŒ๋“ค์–ด์ ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋ฉฐ, ์ƒ์„ฑ ์‹œ๊ฐ„๋„ ๋” ๊ฑธ๋ฆฐ๋‹ค.

๋ฉค๋ฒ„ ํด๋ž˜์Šค์—์„œ ๋ฐ”๊นฅ ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ•  ์ผ์ด ์—†๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด static์„ ๋ถ™์—ฌ์„œ ์ •์  ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์ž. static์„ ์ƒ๋žตํ•˜๋ฉด ๋ฐ”๊นฅ ์ธ์Šคํ„ด์Šค๋กœ์˜ ์ˆจ์€ ์™ธ๋ถ€ ์ฐธ์กฐ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค. ์•ž์„œ๋„ ์–˜๊ธฐํ–ˆ๋“ฏ ์ด ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•˜๋ ค๋ฉด ์‹œ๊ฐ„๊ณผ ๊ณต๊ฐ„์ด ์†Œ๋น„๋œ๋‹ค. ๋” ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ˆ˜๊ฑฐํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ์ฐธ์กฐ๊ฐ€ ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š์œผ๋‹ˆ ๋ฌธ์ œ์˜ ์›์ธ์„ ์ฐพ๊ธฐ ์–ด๋ ค์›Œ ๋•Œ๋•Œ๋กœ ์‹ฌ๊ฐํ•œ ์ƒํ™ฉ์„ ์ดˆ๋ž˜ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

โœจ ์š”์•ฝ

  • ๋‚ด๋ถ€ ํด๋ž˜์Šค์—์„œ static ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด, ์™ธ๋ถ€ ํด๋ž˜์Šค๋กœ์˜ ์ˆจ์€ ์ฐธ์กฐ๊ฐ€ ์ €์žฅ์ด ๋˜๋Š”๋ฐ, ์ด ๋•Œ ์‹ฌ์ง€์–ด ๋‚ด๋ถ€ ํด๋ž˜์Šค -> ์™ธ๋ถ€ ํด๋ž˜์Šค ์ฒ˜๋Ÿผ ์ ‘๊ทผํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉด ์ด ์ฐธ์กฐ๋Š” ์“ธ๋ชจ๊ฐ€ ์—†๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋กœ ์ด์–ด์ง€๊ฒŒ ๋œ๋‹ค. (์ด๋•Œ ์ˆจ์€ ์ฐธ์กฐ๋Š” ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์— ์ €์žฅ์ด ๋œ๋‹ค.)

  • ๋˜ํ•œ, GC ๊ฐ€ ์ด ์ˆจ์€ ์ฐธ์กฐ๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜์—ฌ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋ฅผ ํ•˜์ง€ ๋ชปํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(!)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.


๐Ÿ“š ๋„์›€ ๋ฐ›์€ ๋ธ”๋กœ๊ทธ

  1. ์ž๋ฐ”์˜ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” static์œผ๋กœ ์„ ์–ธํ•˜์ž
  2. ๋ฉค๋ฒ„ ํด๋ž˜์Šค/ ์ค‘์ฒฉ ํด๋ž˜์Šค (nested class)
  3. [์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” 3ํŒ] ์•„์ดํ…œ 24. ๋ฉค๋ฒ„ ํด๋ž˜์Šค๋Š” ๋˜๋„๋ก static์œผ๋กœ ๋งŒ๋“ค๋ผ
๐Ÿคฃํ‹€๋ฆฐ ๋‚ด์šฉ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!
profile
์ž˜๋ชป๋œ ๊ณ ๋ฏผ์€ ์—†์Šต๋‹ˆ๋‹ค

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

comment-user-thumbnail
2022๋…„ 9์›” 15์ผ

ํ•ญ์ƒ ์ž˜๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ใ…Žใ…Ž

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ