ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [09강] 속성과 인덱서
    프로그래밍/C# 2022. 6. 13. 02:09

    목차

    속성의 의미와 역할
    형식
    인덱서의 의미와 역할
    형식

     

    속성의 의미와 역할

    속성(Property)

     

      속성의 일반적인 개념

      - 사물의 특징이나 성질, 한 부분들

        클래스 안의 특징적인 부분들을 사용할 수 있게 하는 것.

     

      속성의 역할

      - 클래스 안의 멤버변수에 값 읽기 또는 저장이 가능하게 하는 것

     

      속성의 대상이 되는 멤버 변수?

      - 클래스 안에 있는 멤버 변수. 특히 주로 private로 선언된 멤버 변수를 외부에서 접근할 수 있게 해 준다.

        멤버변수가 public으로 저장되어 있으면 프로퍼티를 사용할 필요가 없다.

        - 어떻게 보면 클래스의 캡슐화를 깨고 들어가는 것일 수 있으나, 프로그래밍을 하다 보면 외부에서 접근하여 값을 읽거나 변경하는 작업이 필요할 때가 생기게 된다. 프로퍼티는 이러한 통로를 제공하는 역할을 한다.

     

      keyword

      - get(접근할 멤버 변수의 값을 읽을 때 사용됨), set(접근할 멤버 변수의 값을 설정할 때 사용됨), value, return

     

    형식

    변수와 동일하게 사용(형태가 변수와 같다)

    대입연산자와 연산을 동일하게 사용 가능

     

    속성 값 읽기와 저장 형식

    [접근 한정자] 데이터명 속성명

    {

        get { return 멤버변수; }

        set { 멤버변수 = value; }

    }

     

    get, set의 활용 예

    get, set에 논리 또는 처리 코드를 적용

    class A
    {
        private int number;
        private string name;
    
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    
        public int Number
        {
            get { return number; }
            set
            {
                if (value < 0 || value > 9)
                    number = 0;
                else
                    number = value;
            }
        }
    }

     

    인덱서의 의미와 역할

    인덱서(indexer) : 속성 + 배열의 형식을 사용하여 찾아내는 역할

     

    인덱스의 사전적인 의미 : 색인

      - 어떤 것을 뒤져서 찾아내거나 필요한 정보를 밝힘

      - 책 속의 내용 중에서 중요한 단어나 항목, 인명 따위를 쉽게 찾아볼 수 있도록 일정한 순서에 따라 별도로 배열하여 놓은 목록

     

    인덱서의 역할

      - 클래스 내의 배열 또는 컬렉션을 외부에서 접근할 수 있도록 하는 역할

      - 키워드 : 속성 형식 + 배열 형식

        get, set, return, value + this[int index]

      - 사용 방법

        배열과 같이 사용

        객체명[인덱스] = 값 또는 변수;

        변수 = 객체명[인덱스];

     

    형식

    - 기본 형식

      [접근 한정자] 데이터형 this[int index]

      {

          get {    }

          set {    }

      }

     

    예시 코드

    public class Practice
    {
        static void Main(string[] args)
        {
            B test = new B();
            for (int i = 0; i < 5; i++)
            {
                test[i] = i;
                Console.WriteLine(test[i]);
            }
        }
    }
    
    class B
    {
        private int[] number = new int[5];
    
        public int this[int index]
        {
            get { return number[index]; }
            set { number[index] = value; }
        }
    }

     

    인덱서 사용 예시

    컬렉션 ArrayList

    public class Practice
    {
        static void Main(string[] args)
        {
            C test = new C();
            test[0] = "A";
            test[1] = "B";
            test[2] = "c";
            test[3] = "D";
            test.Print();
            
            test[1] = "Hello World!";
            test.Print();
        }
    }
    
    class C
    {
        private ArrayList _list = new ArrayList();
    
        public string this[int index]
        {
            get // index가 0과 _list 카운트 사이이면 값을 반환, 아니면 null을 반환
            {
                if (index >= 0 && index < _list.Count)
                    return (string) _list[index];
                else
                    return null;
            }
            set // index가 0과 _list 카운트 사이이면 값을 설정, _list카운트이면 새 리스트를 추가
            {
                if (index >= 0 && index < _list.Count)
                    _list[index] = value;
                else if (index == _list.Count)
                    _list.Add(value);
            }
        }
    
        public void Print()
        {
            foreach (string _collection in _list)
            {
                Console.WriteLine(_collection);
            }
        }
    }

     

    정리

    속성

      - 외부에서 접근하기 어려운 private, protected 멤버변수를 외부에서 사용할 수 있도록 하기 위함

      - 직접 접근을 하기 보다는 한번 감싸서 다른 이름으로 접근하도록 함

      - 변수 수준

     

    인덱서

      - 멤버 중에서 배열 또는 컬렉션 등을 속성 형식으로 외부에서 사용할 수 있도록 하기 위함

      - 속성 + 배열 = 인덱서

     

    '프로그래밍 > C#' 카테고리의 다른 글

    [11강] 델리게이트와 이벤트  (0) 2022.06.20
    [10강] 배열/객체배열, 속성/인덱서 비교  (0) 2022.06.20
    [08강] 클래스  (0) 2022.05.31
    [07강] 프로젝트 실습 - 스마트 밥솥  (0) 2022.05.29
    [06강] 파일 입출력  (0) 2022.05.02
Designed by Tistory.