Class...객체지향에서 빼놓을 수 없는.
Class에는 항상 상속, 오버로딩, 오버라이딩 그리고 캡슐화가 항상 붙어 다닌다.
절차적 언어인 C언어를 주 언어로 사용하던 나는
솔직히 객체지향 방식이 쉽게 와닿지 않았다. (사실은 지금도 그렇다....)
그래서 Python을 써도 C언어를 주로 쓰던 시절처럼 Library 함수 형태로 만드는 것이 익숙하고
Class 형식의 Library를 만드는 것이 덜 익숙하다.
그래도 Class에 대해 정리를 해두면 필요할 경우 곧잘 사용할 수 있겠지.
C언어를 사용하던 나에게는 구조체(Struct)라는 개념은 아주 많이 익숙하다.
때때로 C# 책을 만든 저자들은 클래스와 구조체를 크게 구분하지 않으려 하지만 나와 같은 개발자에게는
분명하게 개념상의 차이점이 있다.
- 클래스 및 구조체에는 데이터와 동작을 나타내는 멤버가 있다. (사실 8년여간 C 프로그래밍을 해오면서 단 한번도 구조체 않에 멤버 함수를 선언해서 사용해 본 적이 없다!!)
- 클래스가 상속 받았다면, 클래스에서 선언된 모든 멤버와 함께 상속받은 클래스에서 선언된 모든 멤버들(생성자 및 소멸자 제외)도 클래스의 멤버에 포함된다.
멤버 | 설명 |
필드 | 필드는 클래스 또는 구조체에서 직접 선언되는 모든 형식의 변수이다. 필드는 기본 제공 형식 또는 다른 클래스의 인스턴스일 수 있다. |
상수 | 상수는 값이 컴파일 시간에 설정되며, 변경할 수 없는 필드나 속성이다. |
속성 | 해당 클래스의 필드처럼 액세스되는 클래스의 메소드로 객체 모르게 필드가 변경되지 않도록 할 수 있다. |
메소드 | 클레스가 수행하는 작업을 정의한다. 입력으로 매개변수를 사용할 수 있고, 매개변수를 통해 출력 데이터를 반환할 수 있다. 매개변수를 통하지 않고 직접 값을 반환할 수도 있다. |
이벤트 | 이벤트는 버튼 클릭, 성공적인 메소드 완료 등의 사건이 발생했을 때 알림을 다른 객체에 제공한다. 이벤트는 대리자(delegate)를 사용하여 정의 및 트리거 된다. |
연산자 | 오버로드 된 연산자는 클래스 멤버로 간주되며, 클래스에서 'public static' 메소드로 정의한다. |
인덱서 | 인덱서를 사용하면 배열과 유사한 방식으로 객체를 인덱싱할 수 있다. |
생성자 | 생성자는 객체를 처음 만들 때 호출되는 메소드이다. 보통 객체의 데이터를 초기화하는데 사용한다. |
소멸자 | C#에서 드물에 사용되며, 메모리에서 객체를 제고할 때 런타임 실행 엔진이 호출하는 메소드이다. |
C# 공부를 위해 구매한 책에서 발췌한 내용이다.
다른 것들은 한번쯤은 들어보거나 사용해봤던 것들인데, '이벤트'와 '인덱서'는 조금 새롭다.
C 언어로 프로그래밍 할 때 '구조체 배열'을 자주 사용했었는데, '인덱서'를 사용하면 비슷한 기능을 구현할 수 있을 것 같다.
'이벤트' 요소는 .NET 계열에서 특화적으로 사용되는 것으로 생각되는데(그냥 내 생각....), 내가 구현하고자 하는 Trading System에서 아주 많이 사용될 기능으로 보인다.
- 필드 (Field)
- 인스턴스(객체) 필드 : 객체 이름과 함께 사용. public string name과 같이 [접근제한자][자료형][필드명]으로 생성하고 [인스턴스].[필드명]으로 사용.
- 정적(클래스) 필드 : 클래스 이름과 함께 사용. static 키워드 필수. [클래스이름].[필드명]
- 상수
- 컴파일 시간에 알려진 변경할 수 없는 값. 프로그램 수행되는 공안 갑승ㄹ 변경하지 않는 경우 사용.
- const 한정자 사용.
- bool, byte, char, int double, string만 const 사용 가능.
- Access : [클래스이름].[상수명]
'C#' 카테고리의 다른 글
[C#] delegate, 폼 간의 DATA 공유 (2) | 2020.06.20 |
---|---|
[C#] MAC Address 가져오기 (0) | 2020.06.15 |
[C#] 팝업창, 새로운 Form 열기, 모달vs모달리스 (0) | 2020.06.01 |
[C#] 값을 표현하기 위한 방법 (0) | 2020.05.28 |
[C#] 눈에 보이는 재미 (0) | 2020.05.24 |