Generic๊ณผ params์˜ ํ˜ผ์šฉ

์•ˆ๋…•ํ•˜์„ธ์š”.
ํ•ญ์ƒ ๋ˆˆํŒ…๋งŒ ํ•˜๋‹ค๊ฐ€ ๊ถ๊ธˆํ•œ๊ฒŒ ์ƒ๊ฒจ ์ด๋ ‡๊ฒŒ ๊ธ€ ๋‚จ๊น๋‹ˆ๋‹ค. ใ…Žใ…Ž
(ํ•ญ์ƒ ์ข‹์€๋‚ด์šฉ๋“ค ์†Œ๊ฐœํ•ด์ฃผ์‹œ๊ณ  ์•Œ๋ ค์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.)

์งˆ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. (์ œ๋ชฉ์ด ์ฐธ ์• ๋งคํ•˜๋„ค์š”,)

generic์œผ๋กœ ๋ฐฐ์—ด์„ ๋ฐ›๊ณ , ํ•ด๋‹น ๋ฐฐ์—ด์„ params ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋กœ ๋„˜๊ธฐ๋ ค ํ•˜์˜€๋Š”๋ฐ, ์ด์ƒํ•˜๊ฒŒ ์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๋“ค์–ด์˜ต๋‹ˆ๋‹ค.

image

์•„๋ž˜๋Š” ๊ฐ„๋‹จํžˆ ๊ตฌ์„ฑํ•œ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.
์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฃผ์„์— ์ž‘์„ฑํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

public class Main
{
    public class Main()
    {
        var testClass = new TestClass<SomeClass, object[]>();

        // ์ด์ƒํ•˜๊ฒŒ ์ž‘๋™
        testClass.MainFunc(new object[] { "str1", "str2" });

        // ์ •์ƒ์ž‘๋™
        testClass.MainFunc2(new object[] { "str1", "str2" });
    }
}


public class TestClass<TEntity, TKey>
    where TEntity : class
{
    public void MainFunc(TKey key)
    {
        TestFunc(key);
    }

    public void MainFunc2(object[] objectArray)
    {
        TestFunc(key);
    }

    public void TestFunc(params object[] objectArray)
    {
        //  MainFunc์˜ ๊ฒฝ์šฐ ์—ฌ๊ธฐ์„œ objectArray์˜ Length๊ฐ€ 2๊ฐ€ ์•„๋‹Œ 1์ด๊ณ , 2์ฐจ์› ๋ฐฐ์—ด์ด ๋“ค์–ด์˜ต๋‹ˆ๋‹ค.
        // ์–ด๋–ป๊ฒŒ ํ•ด์•ผ Length๊ฐ€ 2์ธ ๋ฐฐ์—ด๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ์„๊นŒ์š”?
        // ๋˜ํ•œ ์–ด๋–ค ์›๋ฆฌ์— ์˜ํ•ด ์ด๋Ÿฐ์ผ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์š”?
    }
}

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

1๊ฐœ์˜ ์ข‹์•„์š”
    public void MainFunc(TKey key)
    {
        TestFunc(key);
    }

๋Œ€์‹ ,

    public void MainFunc(TKey[] key)
    {
        TestFunc(key);
    }

ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

๋น ๋ฅธ ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค dimohy๋‹˜.

ํ•˜์ง€๋งŒ ์•„๋ž˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ณ€๊ฒฝํ•ด๋ณด์•„๋„ ๋™์ผํ•œ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ˜น์‹œ ์ œ๊ฐ€ ์ฐฉ๊ฐํ•œ ๋ถ€๋ถ„์ด ์žˆ์„๊นŒ์š”?

public class Main
{
    public class Main()
    {
        var testClass = new TestClass<SomeClass, object>();

        testClass.MainFunc(new object[] { "str1", "str2" });
    }
}


public class TestClass<TEntity, TKey>
    where TEntity : class
{
    public void MainFunc(TKey[] key)
    {
        TestFunc(key);
    }


    public void TestFunc(params object[] objectArray)
    {

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

์•„๋‹™๋‹ˆ๋‹ค. ์ œ๊ฐ€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ๊ฒ€์ฆํ•˜์ง€ ์•Š์•„ ์ƒ๊ธด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

TKey[] key ์—ญ์‹œ object[]๊ฐ€ ์•„๋‹Œ TKey[]์ด๊ณ  object์ด๋ฏ€๋กœ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ๋“ค์–ด๊ฐ€๋Š”๊ฒŒ ๋งž์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด object[] ๋กœ ์บ์ŠคํŒ… ํ•ด์•ผ ํ•˜๋Š”๋ฐ์š”,

Testfunc(key.Cast<object>().ToArray());

TestFunc๊ฐ€ object[] ๋Œ€์‹  TKey[]๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ตณ์ด ์บ์ŠคํŒ… ํ•  ํ•„์š”๋Š” ์—†์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

public void TestFunc(params TKey[] objectArray)
{

}
2๊ฐœ์˜ ์ข‹์•„์š”
where ..., TKey: class

์„ ํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค.

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

์ดํ•ด๋ฅผ ๋•๊ธฐ์œ„ํ•ด TestFunc์œผ๋กœ ํ‘œํ˜„ํ•˜์˜€์ง€๋งŒ ์‚ฌ์‹ค TestFunc๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ ํ•ด๋‹น ํ•จ์ˆ˜ ์ˆ˜์ •์€ ํž˜๋“ค ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

key.Cast().ToArray() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•  ๊ฒƒ ๊ฐ™๋„ค์š”.

(where โ€ฆ, TKey: class๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ ์š”.)

์นœ์ ˆํ•œ ๋‹ต๋ณ€ ์ •๋ง ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

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