C#/이것이 C#이닀

28. 쀑첩 클래슀

Rainbow🌈Coder 2022. 2. 11. 16:52
728x90

쀑첩 ν΄λž˜μŠ€λŠ” 클래슀 μ•ˆμ— μ„ μ–Έλ˜μ–΄ μžˆλŠ” ν΄λž˜μŠ€μ΄λ‹€. 

클래슀 μ•ˆμ— 클래슀λ₯Ό μ„ μ–Έν•˜λŠ” 것이 전뢀이닀.

객체λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ 객체의 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 방법도 보톡 ν΄λž˜μŠ€μ™€ λ˜‘κ°™λ‹€.

μ€‘μ²©ν΄λž˜μŠ€λŠ” μžμ‹ μ΄ μ†Œμ†λœ 클래슀의 멀버에 자유둭게 μ ‘κ·Όν•  수 μžˆλ‹€.(private 멀버도!)

 

μ€‘μ²©ν΄λž˜μŠ€λ₯Ό μ“°λŠ” 이유

- 클래슀 외뢀에 κ³΅κ°œν•˜κ³  μ‹Άμ§€ μ•Šμ€ ν˜•μ‹μ„ λ§Œλ“€κ³ μž ν•  λ•Œ

- ν˜„μž¬ 클래슀의 μΌλΆ€λΆ„μ²˜λŸΌ ν‘œν˜„ν•  수 μžˆλŠ” 클래슀λ₯Ό λ§Œλ“€κ³ μž ν•  λ•Œ

 

λ‹€λ₯Έ 클래슀의 private 멀버에도 마ꡬ μ ‘κ·Όν•  수 μžˆλŠ” 쀑첩 ν΄λž˜μŠ€λŠ” 은닉성을 λ¬΄λ„ˆλœ¨λ¦¬κΈ°λŠ” ν•˜μ§€λ§Œ,

보닀 μœ μ—°ν•œ ν‘œν˜„λ ₯을 ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ κ°€μ Έλ‹€μ€€λ‹€λŠ” μž₯점이 μžˆλ‹€.

    class OuterClass
    {
        private int OuterMember;
        class NestedClass
        {
            public void DoSomething()
            {
                OuterClass outer = new OuterClass();
                outer.OuterMember = 10;
            }
        }
    }

 

class OuterClass
{
     class NesstedClass{}
}

 

<예제 μ½”λ“œ>

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace Overriding
{
    class Configuration
    {
        private List<ItemValue> listConfig = new List<ItemValue>(); //쀑첩 클래슀
        public void SetConfig(string item, string value)
        {
            ItemValue iv = new ItemValue(); //λ¦¬μŠ€νŠΈμ— μŒ“μ„ 객체 생성
            iv.SetValue(this, item, value); //객체에 μ μ ˆν•œ κ°’ ν• λ‹Ή
        }
        public string GetConfig(string item)
        {
            foreach(ItemValue iv in listConfig) //λ¦¬μŠ€νŠΈμ— μŒ“μΈ (μ€‘μ²©ν΄λž˜μŠ€λ‘œ λ§Œλ“ )객체 탐색
            {
                if (iv.GetItem() == item) //GetItem()둜 ν˜ΈμΆœν•œ 결과와 κ°™μœΌλ©΄
                    return iv.GetValue(); //GetValue()
            }
            return ""; //GetItem()둜 ν˜ΈμΆœν•œ 값이 μ—†μœΌλ©΄ λΉˆκ°’ 좜λ ₯
        }
        private class ItemValue //Configuration 클래슀 μ•ˆμ— μ„ μ–Έλœ 쀑첩 ν΄λž˜μŠ€μ΄λ‹€.
        {                                    //private둜 μ„ μ–Έν–ˆκΈ° λ•Œλ¬Έμ—
                                             //Configuration 클래슀 λ°–μ—μ„œλŠ” 보이지 μ•ŠλŠ”λ‹€.
            private string item;
            private string value;

            public void SetValue(Configuration config, string item, string value)
            {
                this.item = item; //μ΄ˆκΈ°ν™”
                this.value = value; //μ΄ˆκΈ°ν™”
                bool found = false; //λ¦¬μŠ€νŠΈμ— Addν•˜κΈ° μœ„ν•œ flag

                for(int i=0; i<config.listConfig.Count; i++)
                {
                    if(config.listConfig[i].item == item)
                    {
                        config.listConfig[i] = this;
                        found = true;
                        break; 
                    }
                }
                if (found == false)
                {
                    config.listConfig.Add(this); //기반 클래슀 내에 μžˆλŠ” λ¦¬μŠ€νŠΈμ— μΆ”κ°€(μ€‘μ²©ν΄λž˜μŠ€ν™œμš©)
                }
            }
            public string GetItem(){ return item; }
            public string GetValue() { return value; }
        }
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            Configuration config = new Configuration();
            config.SetConfig("Version", "V 5.0.0");//μ•„μ΄ν…œ, value
            config.SetConfig("Size", "655,324 KB");//μ•„μ΄ν…œ, value
            WriteLine(config.GetConfig("Version")); //V 5.0.0
            WriteLine(config.GetConfig("Size")); //655,324 KB
            config.SetConfig("Version","V 5.0.1");//μ•„μ΄ν…œ, value
            WriteLine(config.GetConfig("Version")); //V 5.0.1
            config.SetConfig("Version", "V 5.0.7");//μ•„μ΄ν…œ, value
            WriteLine(config.GetConfig("Version")); //V 5.0.7
            Configuration config1 = new Configuration();
            config1.SetConfig("Version", "V 5.0.2");//μ•„μ΄ν…œ, value
            config1.SetConfig("Size", "784,324 KB");//μ•„μ΄ν…œ, value
            WriteLine(config1.GetConfig("Version")); //V 5.0.2
            WriteLine(config1.GetConfig("Size")); //784,324 KB

        }
    }
}

<좜λ ₯ κ²°κ³Ό>

V 5.0.0
655,324 KB
V 5.0.1
V 5.0.7
V 5.0.2
784,324 KB

<예제 2>

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace Overriding
{
    class Configuration
    {
        List<ItemValue> listConfig = new List<ItemValue>();

        public void SetConfig(string item, string value)
        {
            ItemValue iv = new ItemValue();
            iv.SetValue(this,item,value);
        }

        public string GetConfig(string item)
        {
            foreach(ItemValue iv in listConfig)
            {
                if (iv.GetItem() == item)
                    return iv.GetValue();
            }
            return "No Item";
        }

        private class ItemValue
        {
            private string item;
            private string value;

            public void SetValue(Configuration config, string item, string value)
            {
                this.item = item;
                this.value = value;

                bool found = false;
                for(int i=0; i<config.listConfig.Count; i++)
                {
                    if(config.listConfig[i].item == item)
                    {
                        config.listConfig[i] = this;
                        found = true;
                        break;
                    }
                }
                if (found == false)
                    config.listConfig.Add(this);
            }
            public string GetItem()
            {
                return item;
            }
            public string GetValue()
            {
                return value;
            }
        }
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            Configuration config = new Configuration();
            config.SetConfig("Version","V 5.0");
            config.SetConfig("Size", "655,324 KB"); 
            WriteLine(config.GetConfig("test")); //No Item
            WriteLine(config.GetConfig("Version")); //V 5.0
            WriteLine(config.GetConfig("Size")); //655,324 KB
            config.SetConfig("Version", "V 5.1");
            WriteLine(config.GetConfig("Version")); //V 5.1
        }
    }
}

<좜λ ₯ κ²°κ³Ό>

No Item
V 5.0
655,324 KB
V 5.1

<μ΅œμ’… μ—°μŠ΅>

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace Overriding
{
    class Configuration
    {
        List<Itemvalue> listconfig = new List<Itemvalue>();
        public void SetConfig(string item, string value)
        {
            Itemvalue iv = new Itemvalue();
            iv.SetValue(this, item, value);
        }

        public string GetConfig(string item)
        {
            foreach(Itemvalue iv in listconfig)
            {
                if (iv.GetItem() == item)
                    return iv.GetValue();
            }
            return "μ—†μ–΄μš” 그런거.";
        }
        private class Itemvalue
        {
            private string item;
            private string value;
            public void SetValue(Configuration config, string item, string value)
            {
                this.item = item;
                this.value = value;

                bool found = false;
                for(int i=0; i< config.listconfig.Count; i++)
                {
                    if(config.listconfig[i].item == item)
                    {
                        config.listconfig[i] = this;
                        found = true;
                        break;
                    }
                }
                if (found == false)
                    config.listconfig.Add(this);
            }
            public string GetItem() { return item; }
            public string GetValue() { return value; }
        }
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            Configuration config = new Configuration();
            config.SetConfig("μž₯λΉ„","μ°©ν•œ ν™œ");
            config.SetConfig("펫", "토끼");
            WriteLine(config.GetConfig("μž₯λΉ„")); //μ°©ν•œ ν™œ
            WriteLine(config.GetConfig("펫")); //토끼
            config.SetConfig("μž₯λΉ„", "λ‚˜μœ ν™œ");
            WriteLine(config.GetConfig("μž₯λΉ„")); //λ‚˜μœ ν™œ
            WriteLine(config.GetConfig("μ˜μƒ")); //μ—†μ–΄μš” 그런거.

            Configuration config2 = new Configuration();
            config2.SetConfig("μž₯λΉ„", "μ°©ν•œ ν™œ");
            WriteLine(config2.GetConfig("μž₯λΉ„")); //μ°©ν•œ ν™œ
            WriteLine(config.GetConfig("μž₯λΉ„")); //λ‚˜μœ ν™œ
        }
    }
}

<좜λ ₯ κ²°κ³Ό>

μ°©ν•œ ν™œ
토끼
λ‚˜μœ ν™œ
μ—†μ–΄μš” 그런거.
μ°©ν•œ ν™œ
λ‚˜μœ ν™œ
728x90