Static Keyword

static keyword๋Š” field, method, class์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

Static Field (๋ณ€์ˆ˜, ์ƒ์ˆ˜)

  • class ์•ˆ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด member ๋ณ€์ˆ˜๋กœ ์„ ์–ธ์ด ๋˜๊ณ , car.name ์ฒ˜๋Ÿผ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค

  • but, static keyword๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด Class๋ฅผ ํ†ตํ•ด์„œ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅ ํ•˜๋‹ค

    • Class๋ฅผ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•˜๊ฒŒ ๋˜๋ฉด, ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค

    • ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, Class๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ถŒ์žฅํ•œ๋‹ค

      • why?

        • member ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ธ์ง€, static ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ธ์ง€ ์‰ฝ๊ฒŒ ๊ตฌ๋ถ„์ด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ!

  • static์œผ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™” ๋œ๋‹ค

    • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„, ๋ณ€์ˆ˜๋Š” ์ด๋ฏธ ์ƒ์„ฑ๋œ ์ƒํƒœ์ด๋‹ค!

  • final static ์œผ๋กœ ์„ ์–ธํ•˜๋ฉด, ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ์ƒ์ˆ˜ ๊ฐ€ ๋œ๋‹ค

    • ๋ณดํ†ต static ์ƒ์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด, ๊ด€์Šต์ ์œผ๋กœ ๋Œ€๋ฌธ์ž์™€ underscore (_) ๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฆ„์„ ์ง“๋Š”๋‹ค

  • ์ ‘๊ทผ ์ œํ•œ์ž

    • static field๋ฅผ ์„ ์–ธํ•  ๋•Œ ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ํ†ตํ•ด ๊ณต๊ฐœํ•˜๊ณ  ์‹ถ์€ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค

  • ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

    • ๋Œ€๋ถ€๋ถ„ static field๋Š” ์ƒ์ˆ˜๋ฅผ ์„ ์–ธ ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค

      • final static keyword๋กœ ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด, ๋‹ค๋ฅธ Class ์—์„œ๋„ ์ƒ์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค

      • member ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด ๊ฐ์ฒด๋งˆ๋‹ค ์ƒ์ˆ˜๋“ค์„ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค

    • static์œผ๋กœ ๋ณ€์ˆ˜๋ฅผ ๋งŽ์ด ์„ ์–ธํ•˜๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ๊ณผ ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€์–ด์ง€๊ณ , ์ž์นซ ์ŠคํŒŒ๊ฒŒํ‹ฐ ์ฝ”๋“œ (๋ณต์žกํ•˜๊ฒŒ ์–ฝํžŒ ์ฝ”๋“œ)๊ฐ€ ๋˜๊ธฐ ์‰ฌ์šธ ์ˆ˜ ์žˆ๋‹ค

Static Method

  • static method๋„ static field์™€ ์œ ์‚ฌํ•˜๋‹ค

    • method ์„ ์–ธ ์‹œ static keyword๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ํ•ด๋‹น method๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค

  • ๊ฐ์ฒด method๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ธ์ง€, static method๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ธ์ง€ ๊ตฌ๋ถ„์ด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— Class๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ˜ธ์ถœ ๋˜์–ด์•ผ ํ•œ๋‹ค

  • ์ฃผ์˜ํ•  ์ 

    • static method ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์€ method๊ฐ€ ๊ฐ์ฒด์™€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋‹ค ๋Š” ์˜๋ฏธ์ด๋‹ค

      • ๊ทธ๋ž˜์„œ method ๋‚ด๋ถ€์—์„œ super , this ์™€ ๊ฐ™์€ keyword๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ ,

      • Class์˜ member ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜๋„ ์—†๋‹ค

    • static method์—์„œ๋Š” method ๋‚ด๋ถ€์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜ ์™ธ์— static field, static method๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค

  • ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

    • static method๋Š” ๋ณดํ†ต Utils , Helper class๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ์— ์‚ฌ์šฉํ•œ๋‹ค

      • ex) Math๋ผ๋Š” Utils class ๋งŒ๋“ค๊ธฐ

        public class Math {
            public static double sqrt(double num) {
                // ....
            }
        
            public static double sum(double num1, double num2) {
                // ....
            }
        }
        • ์ˆ˜ํ•™ ์—ฐ์‚ฐ๊ณผ ๊ด€๋ จ๋œ method๋“ค์„ Math ๋ผ๋Š” class ์•„๋ž˜๋กœ ๋ชจ์•„์ฃผ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค (grouping)

Static Class

  • static keyword๋ฅผ ์ด์šฉํ•˜์—ฌ class๋ฅผ ์„ ์–ธํ•˜๋ฉด, ์ƒ์œ„ class์™€ ๋ถ„๋ฆฌ๋ฅผ ํ•ด ์ค€๋‹ค

    • Inner class ๋Š” ์ƒ์œ„ class์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์œ„ class์˜ member ๋ณ€์ˆ˜์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค

      • static์œผ๋กœ ํ•˜์œ„ class๋ฅผ ์„ ์–ธํ•˜๋ฉด, ์ƒ์œ„ class์˜ member ๋ณ€์ˆ˜์— ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์ง„๋‹ค!

      • ์ด๋ ‡๊ฒŒ static์œผ๋กœ ์„ ์–ธ๋œ ํ•˜์œ„ class ๋ฅผ static nested class ๋ผ๊ณ  ํ•œ๋‹ค

    • Static nested class ๋Š” ์ƒ์œ„ class๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์•„๋„, ์™ธ๋ถ€์—์„œ ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค

      Car.Wheel wheel = new Car.Wheel();

      โ†’ ์ด๊ฒƒ์ด Inner class ์™€ Static nested class ์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์ด๋‹ค

  • ์ฃผ์˜ํ•  ์ 

    • static class๋Š” ํ•˜์œ„ class๋ฅผ ์„ ์–ธํ•  ๋•Œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค

      • ์ƒ์œ„ class๋ฅผ static์œผ๋กœ ์„ ์–ธํ•˜๋ ค๊ณ  ํ•˜๋ฉด, compile error๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค

  • static class ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

    • static class๋กœ Inner class๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ข‹์€ ์ ์€ grouping ์ด๋‹ค

      • ์–ด๋–ค class์™€ ์—ฐ๊ด€๋œ class๋“ค์„ ํ•˜์œ„์— ์„ ์–ธํ•˜์—ฌ ๊ด€๋ จ์žˆ๋Š” class๋ฅผ ๋ชจ์•„๋‘˜ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค

        • ์ด๊ฒƒ์„ Inner class๋กœ๋„ ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, Inner class๋Š” ์ƒ์œ„ class์™€ ์—ฐ๊ฒฐ ๋˜์–ด ์žˆ์–ด ๋…๋ฆฝ๋œ class๊ฐ€ ์•„๋‹ˆ๋‹ค!

Static Keyword ์žฅ์  ์ •๋ฆฌ

  • static keyword์˜ ๊ณตํ†ต์ ์€ ๊ฐ์ฒด์™€์˜ ๋ถ„๋ฆฌ ์ด๋‹ค

    • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค!

  • Grouping ์ด๋ผ๋Š” ์žฅ์ ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค

    • ์–ด๋–ค class ํ•˜์œ„์— ์ด์™€ ๊ด€๋ จ ์žˆ๋Š” method, class ๋ฅผ static์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ํ•œ ๊ณณ์— ๋ชจ์„ ์ˆ˜ ์žˆ๋‹ค!!

Last updated