private static ํ•จ์ˆ˜

์ด๋Ÿฐ ๊ฒŒ ํŒ์ด ๋  ์ˆ˜ ์žˆ์„์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋ฌธ๋“ ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ๋‚จ๊น๋‹ˆ๋‹ค.

Visual Studio๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™” ํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ๋ถ€๋ถ„๋“ค์„ ์ œ์‹œํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ๊ณ„์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ€๋ น ๊ธฐ์กด์˜ C# ์ฝ”๋“œ๋ฅผ ์ตœ์‹  ๋ฌธ๋ฒ•์˜ C#์ฝ”๋“œ๋กœ ์ œ์•ˆํ•ด์ฃผ๋Š” ๊ฒƒ์ด์ฃ .

  • foreach๋ฌธ์„ linq๋กœ ๋ฐ”๊ฟ”์ฃผ๊ฑฐ๋‚˜
  • .ToList()๋‚˜ ToArray(), Concat() ๊ฐ™์€ ๊ฒƒ์„ [.. ] ์ด๋Ÿฐ์‹์œผ๋กœ Collection Expression์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ฑฐ๋‚˜
  • SubString() ๊ฐ™์€ ๊ฒƒ์„ [5,3] ์ด๋Ÿฐ์‹์œผ๋กœ Range-Operator๋ฅผ ์ œ์•ˆํ•ด์ค€๋‹ค๊ฑฐ๋‚˜

๊ธฐํƒ€ ๋“ฑ๋“ฑ ์•„์ฃผ ๋งŽ์Šต๋‹ˆ๋‹ค.

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

์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ํ•จ์ˆ˜์—์„œ ์–ด๋–ค ํ–‰์œ„๋“ค์ด ๋ฌถ์–ด์ ธ์„œ ๋™์ž‘ํ•œ๋‹ค๋ฉดโ€ฆ ์ด์ „์—๋Š” ๊ฐœ๋ฐœ ์ดˆ๊ธฐ์—”

// ์ฐฝ๊ณ ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์œ ํšจ์„ฑ ์ฒดํฌ

์ด๋ ‡๊ฒŒ ์ฃผ์„์„ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ๊นŒ์ง€๋Š”

#region ์ฐฝ๊ณ ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์œ ํšจ์„ฑ ์ฒดํฌ

#endregion

์ด๋ ‡๊ฒŒ ๋ฐ”๊ฟจ๊ตฌ์š”.

ํ•˜์ง€๋งŒ region ์—ญ์‹œ ์ฃผ์„๊ณผ ํฐ ์ฐจ์ด์ ์ด ์—†์œผ๋ฉฐ ๊ทธ๋ƒฅ ์ฝ”๋“œ ์ ‘ํžˆ๋Š” ๊ธฐ๋Šฅ๋ง๊ณค ์—†์–ด์„œ private ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์„ ์š”์•ฝํ•œ ๋ฌธ์ž์—ด์„ ์ญ‰ ์“ฐ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜์ด๋ฆ„์œผ๋กœ ๋ช…์‹œํ•˜๊ธฐ์—๋„ ์ข‹์•„์„œ์ธ๋ฐ์š”.

๊ทธ๋Ÿฐ๋ฐ private ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค๋‹ค๋ณด๋‹ˆ VS์—์„œ class ์•ˆ์˜ ์–ด๋–ค ์†์„ฑ์ด๋‚˜ ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์ด๋ผ๋ฉด ๋…๋ฆฝ๋œ ๊ธฐ๋Šฅ์ด๋ผ๋Š” ๊ฑธ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ static์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•˜๋”๊ตฐ์š”.

๊ทธ๋ž˜์„œ private ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ class ์˜ field๋‚˜ property๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ  ์˜ค๋กœ์ง€ parameter์—๋งŒ ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค๋ฉด private static ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š” ๊ตณ์ด ์•ˆํ•ด์ค˜๋„ ๋˜๋Š” ๊ฒƒ์ด์ง€๋งŒ, VS์™€ .NET์˜ ์ฝ”๋“œ ์ตœ์ ํ™” ๊ธฐ๋Šฅ์„ ์ตœ๋Œ€ํ•œ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ถ”์ฒœํ•ด์ฃผ๋Š”๋Œ€๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๋Š” ์˜๊ฒฌ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. var๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๊ฒ ์ง€์š”.

์ฝ”๋“œ ์ตœ์ ํ™”๋ž€, ์ œ๊ฐ€ ์•Œ๊ณ  ์žˆ๊ธฐ๋ก  ๋‚ด๊ฐ€ ๋ˆˆ์œผ๋กœ ๋ณด๊ณ  ์žˆ๋Š” ์ฝ”๋“œํŒŒ์ผ์„ ๊ทธ๋Œ€๋กœ ๋นŒ๋“œํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ms build ์ž…์žฅ์—์„œ ์ง„์งœ๋กœ ๋นŒ๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œ๊ฐ€ ์œ ์šฉํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์ž๊ธฐ ๋ง˜๋Œ€๋กœ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์œผ๋กœ ์‰ฝ๊ฒŒ ์ดํ•ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ์ฝ”๋“œ ์ธ๋ผ์ธ ๊ธฐ๋Šฅ
  • ์ƒ์†์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ํด๋ž˜์Šค์— sealed ์ ์šฉํ•˜๊ธฐ
  • static property ๋กœ ๋ฌธ์ž์—ด์„ ์“ฐ๊ธฐ๋ณด๋‹ค๋Š” const๋กœ ์ ์šฉํ•˜๊ธฐ

๋“ฑ๋“ฑโ€ฆ๋” ๋งŽ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ๋žŒ ์นœํ™”์ ์ธ ์ฝ”๋“œ๋ณด๋‹ค๋Š” ๊ทธ๋ž˜๋„ ๊ธฐ๊ณ„ ์นœํ™”์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ms build๊ฐ€ .NET์„ ๋” ์ž˜ build ํ•ด์ฃผ๊ธธ ๋ฐ”๋ผ๋Š” ๋งˆ์Œ์œผ๋กœ ์˜ค๋Š˜๋„ private static ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ด…๋‹ˆ๋‹ค.

9๊ฐœ์˜ ์ข‹์•„์š”

์ธ์Šคํ„ด์Šค ์ƒํƒœ๊ฐ’์„ ๋ณ€๊ฒฝ/์ฐธ์กฐํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ๋Š” static ํ•œ์ •์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๊ฒŒ ์—ฌ๋Ÿฌ๋ชจ๋กœ ์ด๋“์ธ ๋ถ€๋ถ„์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š” ๋‹จ์ˆœํžˆ ๋‹จ์–ด ํ•˜๋‚˜ ๋” ์ ๋Š” ๊ฐ„๋‹จํ•œ ์ž‘์—…์œผ๋กœ ์„ฑ๋Šฅ์  ์ด์ ์„ ๊ฐ€์ง

  • ์ธ์Šคํ„ด์Šค์˜ ์ƒํƒœ๊ฐ’์„ ๋ณ€๊ฒฝ/์ฐธ์กฐํ•˜๋Š” ๋ฉ”์„œ๋“œ์ธ์ง€ ์•„๋‹Œ์ง€ ์ฆ‰๊ฐ์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ์Œ.
    (Functional programming ์—์„œ ๋งํ•˜๋Š” Stateless ํ•œ ๋ฉ”์„œ๋“œ ์—ฌ๋ถ€)

3๊ฐœ์˜ ์ข‹์•„์š”

static์€ ๋ง์”€ํ•˜์‹  ๋Œ€๋กœ ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•˜์ง€ ์•Š์„ ๋•Œ ์ œ์•ˆ ๋˜๋Š”๋ฐ, ์—ฌ๊ธฐ์—๋Š” ์„ธ ๊ฐ€์ง€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋งค๊ฐœ ๋ณ€์ˆ˜์—๋งŒ ์˜์กด
  2. ์ƒ์ˆ˜์— ์ ‘๊ทผ
  3. ์ •์  ๋ณ€์ˆ˜์— ์ ‘๊ทผ

์˜ˆ๋ฅผ ๋“ค์–ด, ์ธํ…”๋ฆฌ์„ผ์Šค๋Š” ์•„๋ž˜ ์„ธ ๋ฉ”์„œ๋“œ ๋ชจ๋‘์— static ์œผ๋กœ ํ•œ์ •ํ•˜๋ผ๋Š” ์ œ์•ˆ์„ ํ•˜์ง€๋งŒ, Add ์™€ Offset์—๋งŒ static ์„ ๋ถ™์ด๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด์ฃ .

const int Threshold_ = 10;

int Add(int left, int right) => right + left; // ๋งค๊ฐœ ๋ณ€์ˆ˜์—๋งŒ ์˜์กด
int Offset(int number) = number - Threshold_; // ์ƒ์ˆ˜์— ์˜์กด
bool IsFuture(DateTime date) => date > DateTime.Now; // ์ •์  ๋ณ€์ˆ˜์— ์˜์กด.

์ด๋ ‡๊ฒŒ ํ•˜๋Š” ์ด์œ ๋Š” C# ์—์„œ๋Š” Lazy evaluation ๊ณผ ๋น„๋™๊ธฐ ํ˜ธ์ถœ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ˆœ์ˆ˜์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š” ๊ทธ๋ฃน(์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์™€ ์ „์—ญ ๋ณ€์ˆ˜์— ์˜์กดํ•˜๋Š” ๋ฉ”์„œ๋“œ)์€ ์œ„์™€ ๊ฐ™์€ ํ˜ธ์ถœ์—์„œ ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœํ•˜๋Š”๋ฐ, static ์€ ์œ„์™€ ๊ฐ™์€ ํ˜ธ์ถœ์—์„œ ์•ˆ์ „ํ•จ์„ ํ‘œ์‹œํ•˜๋Š” ๋งˆํ‚น์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

4๊ฐœ์˜ ์ข‹์•„์š”

์Œ ์ œ ์ฝ”๋“œ์—์„œ๋Š”

์ œ ๊ฒฝ์šฐ Offset์—์„œ ๋‚ด๋ถ€ ํ•„๋“œ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์œผ๋ฉด static์„ ์ œ์•ˆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ณด๋‹ˆ๊นŒ const๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค์–ด์ฃผ์…”์„œ ๊ทธ๋Ÿฐ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.
const๋Š” ์ฝ”๋“œ ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ C์–ธ์–ด์˜ define ์ฒ˜๋Ÿผ ์ƒ์ˆ˜๊ฐ’์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์น˜ํ™˜ํ•œ ๋’ค ๋นŒ๋“œ์— ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜๋กœ ์ทจ๊ธ‰๋˜์ง€ ์•Š์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (์ด๊ฒƒ์€ ์•„๋งˆ๋„ ์ œ ์ƒ๊ฐ)

๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”๊พธ๋ฉด Offset๊ณผ Offset2์— ๋Œ€ํ•ด์„œ๋Š” static์œผ๋กœ ๋ฐ”๊พธ๋ผ๋Š” ์ œ์•ˆ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

int Threshold_ = 10; // const ์•„๋‹˜

int Add(int left, int right) => right + left; // ๋งค๊ฐœ ๋ณ€์ˆ˜์—๋งŒ ์˜์กด
int Offset(int number) => number - Threshold_; // ์ƒ์ˆ˜์— ์˜์กด
int Offset2(int number)
{
    return number - Threshold_;
}
bool IsFuture(DateTime date) => date > DateTime.Now; // ์ •์  ๋ณ€์ˆ˜์— ์˜์กด.

const๋กœ ์„ ์–ธํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ Lazy evaluation๊ณผ ๊ฐ™์€ ์„ ์ƒ์— ๋†“๊ณ  ๋ฌธ์ œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์„๊นŒ์š”?

์ƒ๊ฐํ•ด๋ณด๋‹ˆ static ์ž์ฒด๊ฐ€ Lazy ํ•œ ๋งŒํผ => ๋กœ expression ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•ด๋„ Lazy ํ•œ ๋ฌธ์ œ๋ผ๊ณ  ๋ถˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ†ต์ฐฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

4๊ฐœ์˜ ์ข‹์•„์š”

๋ถ€๊ฐ€์ ์œผ๋กœ ์ž˜ ๊ตฌํ˜„๋œ static ๋ฉ”์„œ๋“œ๋Š” ์ƒํƒœ๋ฅผ ๊ฐ–์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Mock์ด ํ•„์š”ํ•œ ์ผ๋ถ€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ œ์™ธํ•˜๋ฉด ํ…Œ์ŠคํŠธํ•˜๊ธฐ์—๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

4๊ฐœ์˜ ์ข‹์•„์š”

static ์ž์ฒด๊ฐ€ Lazy ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋ณธ๋ฌธ์— ์–ธ๊ธ‰ํ•œ "Lazy evaluation"์€ ์„ ์–ธ๊ณผ ์‹คํ–‰์ด ๋ถ„๋ฆฌ๋˜๋Š” ๊ฒฝ์šฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ Linq ๋ฉ”์„œ๋“œ์™€ Lazy<T>์˜ ์ƒ์„ฑ์ž์— ์ „๋‹ฌ๋  ๋•Œ ์•ˆ์ „ํ•œ ๊ฒƒ๋“ค๋งŒ static ์œผ๋กœ ํ•œ์ •ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

2๊ฐœ์˜ ์ข‹์•„์š”

ํ•˜๊ธด ์ œ๊ฐ€ static ์˜ ์—ฌ๋Ÿฌ ๋ฌธ๋ฒ•์  ์šฉ๋„๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์ ์–ด์„œ ํ˜ผ์„ ์ด ์žˆ์„ ๋ฒ•ํ•œ ํ‘œํ˜„์ด๋„ค์š”. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ •์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

static object๋ผ๋ฉด ๊ทธ ์ž์ฒด Lazy Loading ์ด๋ผ Lazy๊ฐ€ ๋งž์ง€๋งŒ static Method๋ผ๋ฉด ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

3๊ฐœ์˜ ์ข‹์•„์š”