๋‹ท๋„ท API ๊ด€์Šต

.net ์˜ BCL ํ˜น์€ ์ฃผ์š” ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์˜ ๊ตฌํ˜„์„ ๋ณด๋ฉด ์ผ์ข…์˜ ํŒจํ„ด ๊ฐ™์€ ๊ฒƒ๋“ค์ด ๋ˆˆ์— ๋•๋‹ˆ๋‹ค.

๋ˆˆ์— ๋„๊ฑฐ๋‚˜, ๋”ฐ๋ผํ•ด๋ด„์งํ•œ ํŒจํ„ด๋“ค์„ ์ •๋ฆฌํ•˜๋Š” ์Šฌ๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.

return Nullable vs throw Exception

๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค ๋ณด๋ฉด, ๋ฐ˜ํ™˜ํ˜•์„ nullable ํƒ€์ž…์œผ๋กœ ํ•  ๊ฒƒ์ธ์ง€, exception ์„ throw ํ•  ๊ฒƒ์ด์ง€ ์„ ๋œป ๊ฒฐ์ •ํ•˜๊ธฐ ๊ณค๋ž€ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ท๋„ท์€ ์ด๋Ÿฐ ๊ฒฝ์šฐ, ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋“œ ๋ณด๋‹ค๋Š” ์‹๋ณ„์ž๋กœ ๊ตฌ๋ถ„๋˜๋Š” ๋ฉ”์„œ๋“œ ์Œ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

non-nullable return or thow ๋ฒ„์ „

๋ฉ”์„œ๋“œ๋Š” non-nullable ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋‚ด๋ถ€์— exception ์„ ์œ ๋ฐœํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๊ฒฝ์šฐ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์— โ€œRequiredโ€ ๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.

Far GetRequiredFar

์šฐ๋ฆฌ๊ฐ€ ์ด ํŒจํ„ด์„ ์ฑ„ํƒํ•˜๋Š” ๊ฒฝ์šฐ, ์˜ˆ์™ธ๋ฅผ ๋‘ ๊ฐ€์ง€๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ฝ”๋“œ ํ๋ฆ„ ์ƒ ์˜ˆ์™ธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ํŒ๋‹จํ•œ ๊ฒฝ์šฐ
    ๋ฏธ์ฒ˜ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•œ ๋ถ€๋ถ„์„ ์บ์น˜ํ•˜์—ฌ, ์™„์„ฑ๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค.
  2. ์™ธ๋ถ€ ์ฝ”๋“œ์—์„œ์˜ ์˜ˆ์™ธ ๋ฐœ์ƒ
    ์™ธ๋ถ€ ์ฝ”๋“œ์˜ ์‚ฌ์šฉ๋ฒ•๊ณผ ์ฃผ์˜์ ์„ ๋‹ค์‹œ ์‚ดํ•๋‹ˆ๋‹ค.

nullable return and no throw ๋ฒ„์ „

๋ฉ”์„œ๋“œ๋Š” nullable ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋‚ด๋ถ€์—์„œ exception ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์™ธ๋ถ€๋กœ ํ‘œ์ถœํ•˜์ง€ ์•Š๋Š”๋ฐ, Requried๊ฐ€ ์—†๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Far? GetFar

์ด ํŒจํ„ด์„ ์ฑ„ํƒํ•  ๋•Œ๋Š” ๊ฐ€๊ธ‰์  ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ์–ต๋ˆŒ๋Ÿฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ ์ž…์žฅ์—์„œ๋Š” null ๊ฒ€์‚ฌ๋งŒ ํ•ด๋„ ๋˜๊ธฐ์— ๋ณด๋‹ค ๊ฐ„ํŽธํ•˜์ง€๋งŒ, ๋‚ด๋ถ€ ๊ตฌํ˜„ ์‹œ, ๋ชจ๋“  ์˜ˆ์™ธ์— ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•œ ํ™•์‹ ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์‹คํŒจ์‹œ null ๋ฐ˜ํ™˜์€ Try + DoSomething,
์˜ˆ์™ธ ๋ฐœ์ƒ ๋ฒ„์ „์€ ๊ทธ๋ƒฅ DoSomething๋กœ ํ•˜๋Š” ๋ช…๋ช…๋„ ์žˆ์Šต๋‹ˆ๋‹ค

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

์ถ”๋ก ์„ ํ•ด๋ดค๋Š”๋ฐ, ๋Œ€์ฒด์ ์œผ๋กœ '์ž์ฃผ ์‚ฌ์šฉโ€™๋˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์ด๋ฆ„์ด ์งง์€ ํŽธ์ธ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

null์ด ์ผ๋ฐ˜์ ์œผ๋กœ ํ—ˆ์šฉ๋˜๋Š” ๊ฐ€์ ธ์˜ค๋Š” ๊ธฐ๋Šฅ์˜ ๊ฒฝ์šฐ
GetSomething(), ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ GetRequiredSomething()

๋ฐ˜๋Œ€๋กœ ๊ฐ€์ ธ์˜ฌ ๋•Œ ๋Œ€๋ถ€๋ถ„ ์‹คํŒจํ•˜์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋˜๋Š” ๊ธฐ๋Šฅ์˜ ๊ฒฝ์šฐ๋Š”
์˜ˆ์™ธ ๋ฒ„์ „์ด GetSomething(), ์‹คํŒจ์‹œ null ์ด TryGetSomething()

TryParse vs TryGetValue

A.TryParse( _ , out A x)

TryParse ๋Š” ์ž…๋ ฅ ๊ฐ’์„ ํ†ตํ•ด A ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ๋ณดํ†ต static ๋ฉ”์„œ๋“œ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ๋ฉ”์„œ๋“œ ์‹๋ณ„์ž์— ํ˜•์‹(A)์„ ๋ถ™์—ฌ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, var ๋ฅผ ์‚ฌ์šฉํ•ด๋„ x ์˜ ํ˜•์‹์„ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var s = "...";

if( !SpaceShipCodeValue.TryParse(s, our var x) )  // var : SpaceShipCodeValue
   return null;
// ...

a.TryGetValue( _ , out B x)

TryGetValue ๋ฉ”์„œ๋“œ๋Š” ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ธ๋ฐ, TryParse ์™€๋Š” ๋‹ฌ๋ฆฌ, ์ฝ”๋“œ ๋งŒ์œผ๋กœ, x์˜ ํ˜•์‹์ธ B๋ฅผ ์œ ์ถ”ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

var s = "...";

if( !WarfHistory.TryGetValue(s, our var x) )
   return null;
// ...

์ด ๊ฒฝ์šฐ, ๊ท€์ฐฎ๋”๋ผ๋„, var ๋Œ€์‹ ์— ํ˜•์‹์˜ full name ์„ ์ง€์ •ํ•˜๋Š” ๊ฒŒ ๊ฐ€๋…์„ฑ ์ธก๋ฉด์—์„œ ์ข‹์Šต๋‹ˆ๋‹ค.

if( !WarfHistory.TryGetValue(s, out StarWars.Galaxy.PlanetCoordinate x) )
   return null;
// ...
3๊ฐœ์˜ ์ข‹์•„์š”