클리엘
CLIEL LAB
클리엘
전체 방문자
오늘
어제
  • 분류 전체보기 (514) N
    • Mobile (47)
      • Kotlin (47)
    • Web (84)
      • NestJS (9)
      • HTML5 & CSS3 (38)
      • Javascript (20)
      • TypeScript (6)
      • JQuery (11)
    • .NET (301) N
      • C# (84) N
      • ASP.NET (67)
      • Windows API for .NET (128)
    • Server (53)
      • SQL Server (10)
      • MariaDB (18)
      • Windows Server (6)
      • node.js (19)
    • System (12)
      • 작업LOG (12)
    • Review (11)
    • ETC (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 블로그 정리

인기 글

태그

  • android studio
  • .NET
  • c#
  • LINQ
  • 변수
  • MariaDB
  • CSS3
  • Kotlin
  • Windows API
  • asp.net core web api
  • Entity Framework
  • JavaScript
  • asp.net core
  • android
  • jQuery
  • node.js
  • HTML5
  • exception
  • ASP.NET
  • NestJS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
클리엘

CLIEL LAB

.NET/C#

[C#] C#과 OOP(Object-Oriented Programming) - 5. 속성(Property)과 인덱서(Indexer)

2022. 6. 24. 11:48
728x90

5. 속성(Property)과 인덱서(Indexer)

 

● 속성(Property)

 

속성은 특정 값을 설정할 때 메서드처럼 호출하고 값을 가져오는 경우 Field처럼 호출하여 사용할 수 있도록 하는 것으로 해당 기능을 구현하기 위한 구문이 간소화될 수 있습니다.

namespace mylibrary;
public class Car
{
    public int Speed
    {
        get;
        set;
    }

    public int RPM => Speed * 2;
}

예제에서는 Speed와 RPM이라는 2개의 Property를 정의하였습니다. Speed는 값을 읽는 get과 값을 설정하는 set으로 인해 int형식의 값을 설정하고 가져올 수 있고 RPM은 Speed에서 *2를 연산한 결과만을 읽을 수 있는 Property가 되었습니다.

using mylibrary;

Car sedan = new();
sedan.Speed = 80;

Console.WriteLine($"{sedan.RPM}");
//160

Speed는 C# 6 버전 이후부터 두루 사용 가능한 전통적인 Property의 정의방식으로 구현된 것이며 RPM은 람다식을 이용한 방식입니다. 만약 RPM을 Speed버전으로 구현하게 된다면 아래와 같이 할 수 있을 것입니다.

public int RPM
{
    get {
        return Speed * 2;
    }
}

Speed에서 구현된 get과 set은 각각 값의 설정과 확인을 의미하는 것인데 C#초기에는 별도의 변수를 만들고 get과 set에서 실제 값이 적용되도록 해야 하지만

int speed;

public int Speed
{
    get
    {
        return speed;
    }
    set
    {
        speed = value;
    }
}

단순히 get과 set을 설정하는 것만으로 compiler에서 자동으로 위와 같은 처리를 진행해 주므로 좀 더 편리하게 get과 set을 사용할 수 있는 것입니다. 그러나 자동적으로 처리되는 부분은 위의 예제까지이며 뭔가 값을 설정하거나 가져오는 데 있어서 특별한 처리를 해야 한다면 get과 set에서 해당 부분을 직접 구현해야 합니다.

int speed;

public int Speed
{
    get
    {
        return speed;
    }
    set
    {
        if (value > 80)
            throw new Exception("제한 속도 초과!");

        speed = value;
    }
}

● 인덱서

 

인덱서는 속성을 배열로서 사용할 수 있도록 해주는 장치입니다.

string[] passengers = { "홍길동", "홍길순", "홍길영", "홍길석" };
public string this[int index]
{
    get {
        return passengers[index];
    }
}

따라서 배열과 완전히 같은 방식으로 속성에 접근할 수 있습니다.

Car sedan = new();

Console.WriteLine($"첫번째 승객 : {sedan[0]}");
Console.WriteLine($"두번째 승객 : {sedan[1]}");
Console.WriteLine($"세번째 승객 : {sedan[2]}");
Console.WriteLine($"네번째 승객 : {sedan[3]}");
//첫번째 승객 : 홍길동
//두번째 승객 : 홍길순
//세번째 승객 : 홍길영
//네번째 승객 : 홍길석
728x90
저작자표시 비영리 변경금지 (새창열림)

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

[C#] C#과 OOP(Object-Oriented Programming) - 7. 레코드(Record)  (0) 2022.06.24
[C#] C#과 OOP(Object-Oriented Programming) - 6. 패턴 매칭(Pattern Matching)  (0) 2022.06.24
[C#] C#과 OOP(Object-Oriented Programming) - 4. Method (메서드)  (0) 2022.06.24
[C#] C#과 OOP(Object-Oriented Programming) - 3. 필드(Field)  (0) 2022.06.24
[C#] C#과 OOP(Object-Oriented Programming) - 2. 클래스 라이브러리 (Class library)  (0) 2022.06.24
    '.NET/C#' 카테고리의 다른 글
    • [C#] C#과 OOP(Object-Oriented Programming) - 7. 레코드(Record)
    • [C#] C#과 OOP(Object-Oriented Programming) - 6. 패턴 매칭(Pattern Matching)
    • [C#] C#과 OOP(Object-Oriented Programming) - 4. Method (메서드)
    • [C#] C#과 OOP(Object-Oriented Programming) - 3. 필드(Field)
    클리엘
    클리엘
    누구냐 넌?

    티스토리툴바