IT

C#언어의 주요 특징

miro999 2022. 4. 12. 15:24
반응형

C#언어의 주요 특징은 클래스, 프로퍼티, 연산자 중복, 델리게이트, 이벤트, 스레드, 그리고 제네릭 등으로 요약될 수 있다.

  • 1. 클래스 (class)

실세계의 모든 객체는 어떤 유형을 가지고 있으므로 각 객체는 같은 유형을 가진 객체들로 분류할 수 있다. 이때 각 객체가 어떤 유형에 속하는지를 객체지향 언어에서는 객체 자료형(object type) 또는 객체 클래스(object class)라 부른다. 실세계의 모든 객체는 이러한 클래스를 통해서 생성되며 임의의 클래스에 속하는 각각의 객체를 클래스에 대한 인스턴스(instance) 라 말한다. 또한, 실세계의 모든 객체는 클래스를 통해서 정의되므로 클래스는 객체를 정의하는 템플릿(template)이라고 간주할 수 있다.

클래스 (붕어빵 틀), 객체 (붕어빵)


클래스(template) -> 객체(instance)


객체 = 클래스를 통해 생성


클래스의 구조는 크게 객체의 속성을 나타내는 필드 부분객체의 행위를 정의하는 메서드 부분으로 이루어진다. C#에서는 이외에 상수, 프로퍼티와 인덱서, 연산자 중복, 이벤트, 그리고 클래스형이나 델리게이트형과 같은 자료형이 클래스 안에 포함될 수 있다. 이와 같은 구성 요소를 합쳐서 클래스 멤버(class member)라고 부르며 크게 필드 계통과 메서드 계통으로 구분할 수 있다.

'class'라는 단어는 '학급', '계층', '종류' 등 다양한 의미를 내포하고 있는 단어이다. 영단어의 뜻을 정확하게 알고 개념을 공부하면 이해가 보다 쉽다.

  • 2. 프로퍼티 (property)

프로퍼티(property)란 클래스의 private 필드를 형식적으로 다루는 일종의 메소드로 간주할 수 있다. 즉, 클래스의 private 필드는 정보 은닉(information hiding)을 위해 다른 클래스에서는 임의로 접근이 허용되지 않지만 대응되는 프로퍼티를 통하여 다른 클래스에서 형식적으로 접근할 수 있는 방법이 제공되는 것이다.

'property'라는 단어는 '재산', '부동산', '속성(특성)'이라는 뜻을 가지고 있다. 이번 개념에 어울리는 뜻은 '재산'이다. 클래스에서 재산을 외부로부터 보호한다는 개념의 private 필드가 핵심이기 때문이다.

  • 3. 연산자 중복 (operator overloading)

연산자 중복(operator overloading)이란 시스템에서 제공한 연산자를 프로그래머가 정의한 클래스에서 새로운 의미를 갖도록 재정의 하는 것이다. 예를 들어, 짝수 하나를 저장할 수 있는 Event클래스에서 ++연산자의 의미가 저장된 짝수의 다음 짝수가 되도록 정의할 수 있다. 마찬가지로 --연산자는 이전 짝수가 되도록 연산 의미를 재정의 할 수 있다.

특정한 클래스를 위한 연산자를 재정의 하면 마치 시스템에서 제공한 연산자처럼 사용할 수 있다. 이와 같이 클래스에 적합한 연산자를 정의함으로써 자료 추상화를 이룰 수 있으며 프로그램의 유지보수가 매우 쉬워진다.

  • 4. 델리게이트 (delegate)

델리게이트(delegate)란 메서드를 참조하기 위한 방법론으로 C#에서는 주로 이벤트와 스레드를 처리하기 위한 프로그래밍 기법으로 사용된다. 델리게이트는 C/C++ 언어에서의 함수 포인터와 유사한 기능을 제공하지만 함수 포인터보다는 객체 지향적이며 안정적이다. 델리게이트를 정의하고 델리게이트의 객체를 생성하는 것은 기본적으로 클래스를 정의하고 클래스의 객체를 만드는 것과 비슷하다. 다만, 델리게이트 객체를 통하여 메서드를 호출한다는 점이 특징적이다.

델리게이트를 정의하기 위해서는 먼저 델리게이트 객체를 통해 호출할 메서드를 작성해야한다. 메소드가 작성되면 그에 해당하는 델리게이트를 정의해야 하며, 이때 델리게이트 형태와 메소드 형태가 정확히 일치해야 한다.

'delegate'라는 단어는 '대표', '위임하다', '뽑다', '(대표를) 선정하다'라는 사전적 의미를 가지고 있다.

  • 5. 스레드 (thread)


스레드(thread)란 순차 프로그램과 유사하게 시작, 실행, 그리고 종료의 순서를 가진 제어의 흐름(flow of execution)이다. 또한, 멀티스레드(multithread) 시스템이란 이와 같은 스레드가 하나의 프로그램 내에 여러 개 존재할 수 있는 시스템이다.

'thread'라는 단어는 '실', '가닥(마디), '꿰다', '엮다' 등 다양한 의미가 있다. 프로그램이 순차적으로 이어지듯 실처럼 이어져 있다, 또는 연결되어 있다는 개념을 연결해서 생각하면 이해하기 편하다.

  • 6. 제네릭 (generic)


프로그래밍 언어에는 자료형이 존재하고 자료형에 따라 자료를 표현/저장/연산하는 방법이 다르기 때문에 동일한 작업도 자료형에 따라 각기 다른 프로그램을 작성해야 한다. 즉, 같은 기능을 하지만 자료형에 따라 중복된 프로그램을 작성해야 한다. 이런 불편을 해소하기 위해 도입된 개념이 제네릭(generics)이며 자료형을 매개변수로 가질 수 있다.

C#에서 지원하는 제네릭 프로그램 단위에는 클래스, 구조체, 인터페이스, 그리고 메서드가 있다. 자료형을 매개변수로 갖는 제네릭 클래스(generic class)를 범용 클래스 또는 포괄 클래스라 번역할 수 있다.

'generic'라는 단어는 '포괄적인', '통칭의'라는 의미를 가지고 있는데, C#에서의 제네릭의 기능을 한 마디로 정의할 수 있는 적절한 단어라고 생각한다.



반응형