본문 바로가기

IT/C#

C# 003 (컬랙션, 싱글톤)

Mission1(이성현).zip

<학습내용>

- 데이터 컬렉션

- String API



복습

다형성

다형성은 많은 부분에서 적용이 됨

어제는 형광등을 통해 예제를 함

형광등, 백열등이렇게 있었지만, 공통된 분모를  뽑아내 전구라는 새로운 부모클래스를 만듬.

앞으로 LED나 어떤 비슷한 기능이 있는 클래스가 오더라도 전구라는 부모 클래스를 상속 받을 수 있음


다른 workshop문제로 비행기, 배, 자동차를 예시로 했음

요구사항이 이름별로 오름차순을 하라고 함

그래서 vehicle이라는 인터페이스를 만들어서 모두 한 클래스로 합침


다형성은 프레임워크에도 많이 쓰이는데, 프로그래밍을 하다보면 많이 사용하는 부분이 있음 그구분을 슬롯처럼 만들어 그 안에 내용만 우리가 넣으면 됨



컬랙션(Collection)이란?

: 컬렉션은 객체를 저장할 수 있는 데이터 구조입니다. 상황에 맞는 컬랙션을 사용해서 객체를 보관할 수 있다.


- 관리하고자 하는 객체가 여러개인 경우, 그 객체들을 저장하고 탐색할 수 있는 또 다른 객체가 필요함

- 컬렉션은 객체를 담거나 꺼내는 용도로 활용하는 데이터 구조



ArrayList

object 형식을 담을 수 있는 컬렉션

제너릭을 지원하지 않는 컬렉션(ArrayList 등)은 기본적으로 모든 객체를 담을 수 있음. 하지만, 담는 순간 객체의 형식이 Object형으로 바뀌므로, 나중에 꺼낼 때는 원래의 형식으로 복원(캐스팅)하는 작업이 필요함 

이름이 안적혀 있는 통이 있다면 거기에 쓰레기를 넣으면 쓰레기통이 되고 우산을 넣으면 우산통이된다.


복원시 캐스팅 작업이 필요하기 때문에 잘 사용하지 않음



제너릭

: 제너릭을 사용하면 객체 안에서 다루는 데이터의 형식을 객체를 만들 때 원하는 대로 지정할 수 있다.



잘 사용하지는 않지만 한 재사용 가능성이 높아짐




List 컬랙션

제너릭을 지원함 so 자주 사용


DIctionary 컬랙션

자바의 해쉬테이블이랑 같음
향후 특정 객체를 key값으로 빠르게 검색하고 싶다면, Dictionary 컬랙션 클래스를 활용!

Queue 컬렉션 

처리할 객체를 임시로 저장해 놓았다가 도착한 순서대로 작업하고 싶다면 Queue 컬렉션을 이용하세요. 


Stack 컬렉션 

처리할 객체를 임시로 저장해 놓았다가 가장 최근에 추가된 객체를 먼저 작업하고 싶다면 Stack 컬렉션을 이용하세요. 


Stirng API

 string s = "___ I Love Love You!___";
            Console.WriteLine($"문자열 길이: {s.Length}");
            Console.WriteLine($"특정 위치의 문자: {s[3]}");
            // 3번 문자열부터 4글자
            Console.WriteLine($"부분 문자열 추출 : {s.Substring(3, 4)}");
            // 3번 위치부터 끝까지
            Console.WriteLine($"부분 문자열 추출 : {s.Substring(3)}");            
            Console.WriteLine($"단어의 위치 찾기: {s.IndexOf("L")}");
            // 없는경우 -1
            Console.WriteLine($"단어의 위치 찾기: {s.IndexOf("l")}");
            Console.WriteLine($"단어의 위치(뒤에서 부터 검색): {s.LastIndexOf("Love")}");
            Console.WriteLine($"단어 교체: {s.Replace("Love", "hate")}");
            Console.WriteLine($"대문자 변환: {s.ToUpper()}");
            Console.WriteLine($"소문자 변환: {s.ToLower()}");
            Console.WriteLine($"연속된 공백을 제거: {s.Trim()}");
            Console.WriteLine($"연속된 특정문자를 제거: {s.Trim('_', ' ')}");

            string[] words = s.Split(' ');
            foreach (var w in words)
            {
                Console.WriteLine(w);
            }




Date API

        static void Main(string[] args)
        {
            Console.WriteLine($"현재일시: {DateTime.Now}");
            Console.WriteLine($"현재일시: {DateTime.Now:yyyy-MM-dd HH:mm:ss}");
            Console.WriteLine($"현재일시: {DateTime.Today:yyyy-MM-dd HH:mm:ss}");
            DateTime birthday = DateTime.Parse("1989-03-30");
            Console.WriteLine($"지금까지 산 일수: {DateTime.Today.Subtract(birthday).TotalDays:#,0}");
        }


* {}는 C# 4.5ver이상부터 지원



문자열을 기본형으로 변환하기

사용자가 입력한 문자열을 정수나 실수로 변환하는 경우가 자주 있습니다.  자바에서 parseInt 이런거


int.Parse(v1)

Convert.ToInt32(v1)


요런식



Design Pattern

싱글톤 페턴

new 를 사용하지 않고 객체 하나만 이용하여 쓰자!


가비지컬랙터를 아낄 수 있다..?



일반방식


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace SingletonEx1

{

    class Program

    {

        static void Main(string[] args)

        {

            var u1 = new Myutil();

            //var u1 = Myutil.GetInstance();

            Console.WriteLine(u1.Add(10, 20));

            DoWork();

        }


        static void DoWork()

        {

            var u1 = new Myutil();

            //var u1 = Myutil.GetInstance();

            Console.WriteLine(u1.Add(30, 30));

        }

    }


    

    class Myutil

    {

        

        // 1. 외부에서 new를 사용해 객체를 만들지 못하게 처리

        public Myutil()

        {

            Console.WriteLine("Myutil 생성자 호출되었습니다.");

        }


      


        public int Add(int v1, int v2)

        {

            return v1 + v2;

        }

    }

}

// new 를 사용하지 않고 객체 하나만 이용하여 쓰자!



싱글톤


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


namespace SingletonEx1

{

    class Program

    {

        static void Main(string[] args)

        {

            //var u1 = new Myutil();

            var u1 = Myutil.GetInstance();

            Console.WriteLine(u1.Add(10, 20));

            DoWork();

        }


        static void DoWork()

        {

            //var u1 = new Myutil();

            var u1 = Myutil.GetInstance();

            Console.WriteLine(u1.Add(30, 30));

        }

    }


    

    class Myutil

    {

        

        // 1. 외부에서 new를 사용해 객체를 만들지 못하게 처리

        private Myutil()

        {

            Console.WriteLine("Myutil 생성자 호출되었습니다.");

        }


        private static Myutil instance;


        public static Myutil GetInstance()

        {

            if(instance == null)

            {

                instance = new Myutil();

            }

            return instance;

        }


        public int Add(int v1, int v2)

        {

            return v1 + v2;

        }

    }

}

// new 를 사용하지 않고 객체 하나만 이용하여 쓰자!





'IT > C#' 카테고리의 다른 글

C# 005  (0) 2017.03.24
C# 004  (0) 2017.03.23
C# 002  (0) 2017.03.21
사전 과제 C#  (0) 2017.03.15
[C#] Virtual(가상) vs Abstract(추상) vs Interface(인터페이스)  (0) 2017.03.08