IList, ICollection ์ ‘๊ทผ ์‹œ NULL

ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ChartFX์˜ ๋ฒ„์ „์„ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

if(chartAll.AxisX.Labels[value].Equals(""))
{
   ......
}

์ด๋Ÿฌํ•œ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ ๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ํ•˜๊ณ  ๋‚˜๋‹ˆ ์—ฌ๊ธฐ์—์„œ NullReferenceException์ด ๋ฐœ์ƒํ•˜๋”๋ผ๊ณ ์š”.
ํ™•์ธ์„ ํ•ด๋ณด๋‹ˆ Labels์˜ ํ˜•์‹์ด ICollection => IList<>๋กœ ๋ณ€๊ฒฝ์ด ๋˜์—ˆ๋„ค์š”.

์šฐ์„  ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •์„ ํ•˜๊ณ  ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š”๋ฐ

if(chartAll.AxisX.Labels[value] is null)
{
   ......
}

์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ๋•Œ ICollection๊ณผ IList<T>์— ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค!
ํ˜น์€ Generic ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ธ์ง€ โ€ฆ ๋‹ต๋ณ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

1 Like

IList<T> ๋Š” ICollection<T> ์ƒ์† ๋ฐ›์€, ์ข€ ๋” ๊ตฌ์ฒด์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค .
๊ทธ๋ž˜์„œ ,IList<T>๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค ๋ฐ ๊ทธ์˜ ์ธ์Šคํ„ด์Šค๋Š” ICollection<T>๋กœ ๋ณ€ํ™˜์ด ๋˜์ง€๋งŒ
๊ทธ ๋ฐ˜๋Œ€๋Š” ๋ณ€ํ™˜์ด ์‹คํŒจํ•ด์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ null์„ ๋ฆฌํ„ด ํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€์š”.

2 Likes
chartAll.AxisX.Labels[value]. //...

๋งŒ์•ฝ ์œ„ ์ฝ”๋“œ์—์„œ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š์•˜๋‹ค๋ฉด, Lables ๋Š” IList ์ด์ง€, ICollection ์ผ๋ฆฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์™œ๋ƒํ•˜๋ฉด ์ธ๋ฑ์„œ [int index] ๋Š” ICollection ์ด ์•„๋‹Œ, IList ์˜ ๋ฉค๋ฒ„์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ, ICollection ์ด ๋งž๋‹ค๋ฉด, ์—†๋Š” ๋ฉค๋ฒ„๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ •์˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ์—๋Ÿฌ๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์ปดํŒŒ์ผ์„ ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Null ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค๋ฉด,

chartAll ์ด null ์ด๊ฑฐ๋‚˜,
AsisX๊ฐ€ null ์ด๊ฑฐ๋‚˜,
Labels ๊ฐ€ null ์ด๊ฑฐ๋‚˜,
Lebels[value] ๊ฐ€ null ์ด๊ฑฐ๋‚˜ ์ž…๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์•„๋ž˜์˜ ๊ฐ€๋“œ ์กฐ๊ฑด๋ฌธ์— ์˜ํ•ด null ์—๋Ÿฌ๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค๋ฉด,

if(chartAll.AxisX.Labels[value] is not null)

Lebels[value] ๊ฐ€ null ์ด์–ด์„œ ์—๋Ÿฌ๊ฐ€ ๋‚œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ IEnumerable, ICollection, IList ์˜ ๊ด€๊ณ„๋Š” ์•„๋ž˜์˜ ๊ธ€์— ์ž์„ธํžˆ ์†Œ๊ฐœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
When To Use IEnumerable, ICollection, IList And List - Claudio Bernasconi

5 Likes

์ด๊ณณ ํŽธ์ง‘๊ธฐ์—์„œ ๋ง์”€์ด์‹œ์ฃ ? ICollection\<int\> ์ด๋ ‡๊ฒŒ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

5 Likes

ํ—โ€ฆ ์ง€๊ธˆ๊นŒ์ง€ ์•„๋ž˜์ฒ˜๋Ÿผ ์ž…๋ ฅํ–ˆ๋Š”๋ฐโ€ฆ

&lt;int>
4 Likes

์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค:blush:

2 Likes

์ด์ „ ๋ฒ„์ „์˜ ICollection ์ด๋ผ๊ณ  ํ–ˆ๋˜ Labels๋Š” ์ •ํ™•ํžˆ๋Š” ICollection์„ ์ƒ์†ํ•˜๋Š” LabelCollection ํด๋ž˜์Šค๋”๋ผ๊ณ ์š”.
ChartFX์—์„œ ๋งŒ๋“  ์ œ๊ณตํ•˜๋Š” ํ˜•์‹์ด๊ณ , ์—ฌ๊ธฐ์— ์ธ๋ฑ์„œ [int index]๊ฐ€ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ œ๊ฐ€ ์ฒ˜์Œ์— ์„ค๋ช…์„ ์ž˜ ๋ชปํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ ์ด์•ผ๊ธฐํ•˜์‹  ๋Œ€๋กœ Labels[value] ๊ฐ€ null์ธ ์ƒํ™ฉ์ด ๋งž์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ Labels๊ฐ€ LabelCollection ํ˜•์‹์ผ ๋•Œ Labels[value] = โ€œโ€ ์ด์—ˆ๋Š”๋ฐ, Labels๊ฐ€ IList ํ˜•์‹์œผ๋กœ ๋ณ€๊ฒฝ๋˜๊ณ  Labels[value] = null ์ด ๋˜์–ด์„œ

์ด ์ด์œ ๊ฐ€ ํ˜น์‹œ IList์™€ ICollection์˜ ํƒ€์ž… ์ฐจ์ด์— ๊ธฐ์ธํ•˜๋Š”์ง€ ์—ฌ์ญˆ์–ด ๋ณธ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
ํ˜น์‹œ ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹œ๋Š”์ง€์š”โ€ฆ?

2 Likes

๊ทธ๊ฑด ์•„๋‹Œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ์ •ํ™•ํ•œ ๊ฒƒ์€ LabelCollection์˜ indexer ๊ตฌํ˜„์„ ์‚ดํŽด๋ณด๋ฉด ๋  ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.

3 Likes

๊ทธ๋ ‡๊ตฐ์š” ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๊ทธ๋Ÿฐ๋ฐ LabelCollection์˜ indexer ๊ตฌํ˜„์€ dll๋กœ ์ œ๊ณต๋˜์–ด์„œ JustDecompile ๋กœ๋„ ์—ด๋ฆฌ์ง€ ์•Š๋Š”๊ตฐ์š”:joy:
ํ˜น์‹œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ์š”?

2 Likes

์ปฌ๋ ‰์…˜ ํ˜•์‹์˜ ๋ฌธ์ œ๊ฐ™์ง€๋Š” ์•Š์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

์ธ๋ฑ์„œ๋Š” ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„ getter์ด๊ณ , IList ์˜ ์ธ๋ฑ์„œ ๋˜ํ•œ getter ์ž…๋‹ˆ๋‹ค.

์—๋Ÿฌ๊ฐ€ IndexOutOfRange ๊ฐ€ ์•„๋‹ˆ๊ธฐ์—, ์ปฌ๋ ‰์…˜์—๋Š” null ์ด ๋ถ„๋ช…ํžˆ ๋“ค์–ด ์žˆ์Œ์„ ํ™•์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ, ๋ฌธ์ œ์˜ ์ฝ”๋“œ๋Š” null ๊ฐ’์„ get ํ•œ ๊ฒƒ ๋ฟ์ด๋ผ ์ •์ƒ์ ์ธ ๋™์ž‘์ž…๋‹ˆ๋‹ค.

LabelCollection ์— ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์ˆจ์–ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ตฌ์š”.

if(label == null)
    label = "";

๊ทธ๋ž˜์„œ, null์„ set ํ•œ ์ฝ”๋“œ๋ฅผ ์ฐพ๋Š” ๊ฒŒ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ผ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

4 Likes

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค !!

3 Likes