๋ชจ๋“  ๊ฒƒ์„ OO๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๊ทธ๊ฒƒ์— ๋Œ€ํ•ญํ•˜๋Š” static์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

Static Method

OO์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๊ฐœ์ฒด์†์— ์žˆ์–ด์™”๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํŽธํ•จ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

  1. ๋‹จ์ˆœํ•œ ๊ณ„์‚ฐ๋„ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋‚˜?: ์ ˆ๋Œ“๊ฐ’ ๊ตฌํ•˜๊ธฐ
  2. ํด๋ž˜์Šค ๋‹จ์œ„์—์„œ ๋ฌด์–ธ๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?: ํด๋ž˜์Šค์—์„œ ์ด ๋ช‡๊ฐœ์˜ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค์—ˆ๋‚˜?

์ด์ „์— C์—์„œ๋Š” ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  OO ์–ธ์–ด์—๋Š” static์ด ์žˆ๋‹ค.

  • static method์˜ ์†Œ์œ ์ฃผ๋Š” instance๊ฐ€ ์•„๋‹ˆ๊ณ  class ์ด๋‹ค.
  • Class diagram์—์„œ๋Š” ๋ฐ‘์ค„์„ ํ†ตํ•ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์ธ์Šคํ„ด์Šค์™€ ๊ด€๋ จ ์—†์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ๋งŒ ๋“ค์–ด์˜จ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ณ ๋ คํ•ด๋ณด์ž.
    • isNullOrWhiteSpace(MyString)๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋Š” ์‚ฌ์‹ค instance method๋กœ ๋งŒ๋“ค์–ด๋„๋œ๋‹ค.
    • ํ•˜์ง€๋งŒ static์œผ๋กœ ๋งŒ๋“ค์–ด๋„ ๋œ๋‹ค. ์™ธ๋ถ€ ๋ณ€์ˆ˜์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—.

Initialization

  • Java์˜ Mathํด๋ž˜์Šค๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.
  • ์ด ๋…€์„์€ ๋‚ด๋ถ€์— static ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋‘์–ด, ์ด๊ณณ ์ €๊ณณ์—์„œ ์ „์—ญ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ์‹ค์ œ ์‚ฌ์šฉ์— ์žˆ์–ด์„œ๋Š” math.abs(-3)๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์—ฌ๊ธฐ์„œ math๋Š” Math ์ธ์Šคํ„ด์Šค๋ฅผ ๋งํ•จ
  • ์ด๊ฑด ์˜๋„ํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋‚ด๋ถ€์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค์—์„œ ํ˜ธ์ถœํ•˜๋”๋ผ๋„ ๋‚ด๋ถ€ method๊ฐ€ ์—†๊ณ , ์–ด์ฐจํ”ผ Class์— ์žˆ๋Š” static ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์ž๋ช…ํ•˜๋‹ˆ ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (class: instance = 1:* ๊ด€๊ณ„)
  • ์ฆ‰, ์Šค์ฝ”ํ”„ ๋ฒ”์œ„๋ฅผ ์„ธ๋ถ€์ ์ธ ๊ฒƒ์—์„œ๋ถ€ํ„ฐ ํฌ๊ด„์ ์ธ ๊ฒƒ์œผ๋กœ ์ฐพ์œผ๋ฉด์„œ ์žˆ์„ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
    • static์€ class ์œ„๊ณ„์— ์žˆ๋Š” scope์— ์žˆ์„ ๊ฑฐ๋‹ˆ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ์Šคํƒ€์ผ์€ ์˜๋„ํ•œ ๋ฐ”๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์œ„์™€ ๊ฐ™์ด static ํ•จ์ˆ˜์˜ ๋ฌถ์Œ์„ ๋ชจ์•„๋‘๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • ๋ฐ”๋กœ ์ƒ์„ฑ์ž๋ฅผ privateํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

C#๊ณผ Swift

  • ์œ„์™€ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•˜๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ฒŒ ๋˜์–ด, ์›ํ•˜๋Š” ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
  • ํ•˜์ง€๋งŒ, ์ด ๋ฐฉ์‹์€ ๋ญ”๊ฐ€ ๊ผผ์ˆ˜๋Š๋‚Œ์ด ๊ฐ•ํ•˜๋‹ค.
  • Java์™€ ๋‹ฌ๋ฆฌ C#์—์„œ๋Š” static class๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
public static class Math
{
    public static int abs(int n)
    {
        return n < 0 ? -n : n;
    }
 
    ...
}
  • class ์•ž์— static signiture๋ฅผ ๋‹ฌ๊ฒŒ๋˜๋ฉด, ์ž๋™์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.
  • ์ด ๋ถ€๋ถ„์€ swift์—์„œ Constant Manangement๋ฅผ ์ •๋ฆฌํ–ˆ๋˜ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๋‹ค.
  • Swift๋Š” ์ด๋Ÿฌํ•œ static class๊ฐ€ ์—†๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Java์˜ ๋ฐฉ์‹๊ณผ ๊ฐ™์ด private Initializer๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ์—๊ฒŒ๋Š” Enum์ด ์žˆ๋‹คโ€ฆ!

Static์— ๋Œ€ํ•œ ๋น„ํŒ

  1. static์€ ์ˆœ์ˆ˜ํ•œ OO๊ฐ€ ์•„๋‹ˆ๋‹ค.
  2. OOP๊ฐ€ ์ ˆ์ฐจ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋Œ€์ฒดํ•œ๋‹ค ํ•ด๋†“๊ณ  static ์“ฐ๋Š” ๊ฒƒ์€ ๋ชจ์ˆœ์ด๋‹ค.
  • ๊ฒฐ๋ก ์ ์œผ๋กœ static์„ ์“ฐ๋Š”๊ฒŒ OO์˜ ๊ฐœ๋…๊ณผ ๋จผ๊ฒƒ์€ ์‚ฌ์‹ค์ด๋‹ค.
  • ์ฆ‰, static์€ ์–ด์ฐŒ๋ณด๋ฉด ๊ฐœ์ฒด ์ง€ํ–ฅ์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์„ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด ์ฆ๋ช…๋œ ์‚ฐ๋ฌผ์ด๋‹ค.
  • ์ž˜๋ชป๋œ ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ์„ ํƒ์  ๊ฐœ๋…์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ๊ฒƒ. ๊ทธ ์ด์ƒ ๊ทธ ์ดํ•˜๋„ ์•„๋‹ˆ๋‹ค.

Singleton์˜ ๋“ฑ์žฅ

  • ์œ„์™€ ๊ฐ™์€ ๋น„ํŒ์˜ ๋งฅ๋ฝ์—์„œ static์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ทธ์™€ ๋น„์Šทํ•œ ํšจ๊ณผ๋ฅผ ๋‚ด๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ฒŒ ๋œ๋‹ค.
  • ๊ฐœ์ฒด์ด๊ธด ํ•œ๋ฐ, static๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ๋…€์„, ๊ทธ๊ฒƒ์„ singleton ํŒจํ„ด์ด๋ผ ํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์š•์„ ๋จน์—ˆ๋‹ค.

Reference