반응형

언어 자료구조 알고리즘/C# 언어 문법 17

17. 인터페이스(Interface)

인터페이스(Interface) 다루는 내용 - 인터페이스 - 명시적 구현 - 묵시적 구현 인터페이스는 구현에 대한 약속으로 다음과 같은 특징을 지니고 있다. - 인터페이스에는 메소드, 속성, 이벤트, 인덱스를 포함할 수 있다. - 인터페이스에는 시그니쳐만 약속만 되어 있고 구현은 할 수 없다. - 인터페이스 형식의 직접적인 인스턴스를 생성할 수 없다. - 클래스와 구조체, 인터페이스에서 다중 인터페이스를 상속(구현 약속)을 할 수 있다. - 상속(구현 약속)을 한 클래스와 구조체에서는 반드시 인터페이스에 명시된 멤버들에 대한 구현을 하여야 한다. 이와 같이 인터페이스는 추상클래스와 비슷한 측면을 많이 갖고 있다. 이러한 특징으로 인해 인터페이스와 인터페이스는 구현되지 않은 추상이라고 일컫는다. Look ..

16. 다형성

다형성 다루는 내용 - 다형성 - 재정의 - 무효화 이번에는 OOP의 세 기둥중에 세번째 기둥이라 할 수 있는 다형성에 대해 살펴보기로 하자. 다형성은 형식에 대한 부분과 행위에 대한 부분으로 나눌 수가 있다. 먼저, 형식에 대한 다형성은 기반 클래스 형식의 변수 혹은 기반 클래스 형식을 원소로 하는 컬렉션과 배열에서 기반 클래스 형식을 통한 접근을 하는 것을 말한다. 또한, 행위에 대한 다형성은 기반 클래스에서 정의한 행위를 파생 클래스에서 재정의를 함으로써 기반 클래스 형식의 변수로 접근을 하더라도 실제 인스턴스의 형식에 맞는 행위를 할 수 있도록 하는 것을 말한다. (여기서 행위를 메소드로 생각해도 무리가 없다.) 이를 위해 기반 클래스에서는 virtual 키워드를 통해 특정 행위의 경우 파생 클래..

15. 상속

상속 다루는 내용 - 상속 - 인터페이스 다중 상속(구현 약속) - 액세스 한정자 - sealed OOP의 세 기둥이라 하면 캡슐화와 상속, 다형성을 얘기를 한다. 지금까지 다룬 내용들은 모두 캡슐화에 관련된 내용으로 어떻게 클래스를 정의를 할 것인가에 대해서 살펴보았다. 상속은 정의되어 있는 클래스를 기반으로 재 사용, 수정 및 확대를 통해 파생된 클래스를 정의할 수 있게 해 준다. 경우에 따라서는 자신을 기반으로 파생하는 것을 봉인할 수도 있다. C++언어에서는 다중 기반 클래스로부터 파생을 할 수 있는 다중 상속을 제공해 주었는데 C#에서는 기반이 되는 클래스는 많아야 하나이다. 대신 인터페이스에 대해 다중 상속(구현 약속)을 지원을 해 주고 있다. Look & Feel & Think 위에 Man이..

14.정적 클래스 및 정적 멤버

정적 클래스 및 정적 멤버 다루는 내용 - 정적 클래스 - 정적 멤버 - 비 정적 클래스의 private 생성자 C#과 Java의 경우에는 전역 스코프가 없다라는 것 때문에 C와 C++에서 전역 스코프에 의존했던 이들에게는 프로그래밍 하기 불편하다는 투정을 받을 수도 있다. 물론, 동적인 형태로 프로그래밍을 해 온 이라면 크게 문제가 되지 않겠지만 말이다. 그렇지만, C#과 Java에서도 static 클래스를 통해 전역 스코프와 동일한 효과를 가져올 수 있게 해 주고 있다. class명 앞에 static 키워드가 붙으면 인스턴스는 생성할 수 없는 정적 클래스로 정의가 된다. 이들은 static 멤버들로만 구성되어 있고 파생을 할 수 없는 봉인된(sealed) 클래스가 된다. 그리고, public한 정적 ..

13.메소드

메소드(Method) 다루는 내용 - ref - out - params 메소드는 특정 기능을 수행하는 코드의 집합이다. 메소드는 액세스 한정자와 반환값, 메소드 명, 매개변수로 구성된 시그니쳐 부분과 수행해야 할 코드 블록으로 구성된다. class Example { public int Add(int a,int b) { return a+b; } } 액세스 한정자에 대해서는 별도의 항목에서 다루기로 하고 매개변수전달에 대해서 먼저 살펴보자. C#에서는 참조로 매개변수를 전달하기 위해 ref와 out키워드를 제공하고 있다. out은 입력된 값은 해당 메소드를 수행하는데 아무런 의미가 없고 호출하는 곳에서 결과값을 원할 때 사용이 된다. 즉, return으로 반환받는 개수가 한 개로 한정된 것을 out을 통해 ..

12. 속성(Property)

속성(Property) 다루는 내용 - 속성 - 액세스 수준이 서로 다른 속성 - 접근자 내부 구현을 생략하는 간단한 속성 속성은 필드 값을 읽고 쓰거나 계산하기 위한 메커니즘을 제공되는 멤버이다. 이를 통해 데이터의 안정성과 유연성을 높일 수 있으며 사용자로 하여금 멤버처럼 쉽게 액세스를 가능하게 해 준다. Look & Feel & Think AboutProperty 클래스의 예를 보면 멤버 필드로 iq를 갖고 있고 상수 max_iq와 min_iq가 정의되어 있다. 그리고 public 메소드로 Study가 있는데 여기에서 속성을 이용하여 값을 읽기 및 변경을 하고 있다. 이와 같은 구조를 통해 특정 멤버 필드에 직접 접근하여 값을 변경하지 않음으로 인해 값의 신뢰성을 높일 수가 있다. Study에서 이..

11.Class

Class 다루는 내용 - 클래스와 구조체 - 캡슐화 할 수 있는 멤버 구조체와 클래스는 하나의 논리 단위에 속하는 일련의 데이터와 동작을 캡슐화 하는 형식이다. 데이터는 멤버 속성으로 표현이 되고 동작은 멤버 메소드 및 이벤트 등으로 표현을 할 수가 있다. 구조체의 경우는 이전 항목에서 설명한 바와 같이 스택에 인라인으로 할당되며 값 형식으로 선언된 범위를 지나게 되면 스택과 함께 소멸이 된다. 이에 MSDN에서는 생성 후 수정하지 않을 데이터를 주로 표현하는 작은 데이터 구조에 사용할 것을 권하고 있다. 이에 비해 클래스는 참조 형식으로 관리화 힙에 할당이 되어 참조되는 범위가 벗어날 때까지 메모리에 유지되는 것을 보장받으며 모든 참조가 범위를 벗어나면 CLR에 의해 가비지 수집 대상으로 표시된다. ..

10.Casting

Casting 다루는 내용 - 사용자 정의 변환 (implicit operator, explicit operator) - type casting(형식 변환)을 위해 제공되는 Help Class들 C#도 C나 C++처럼 컴파일 타임에 정적으로 형식이 지정이 된다. 즉, 변수 선언시 형식이 지정되며 다른 형식의 값을 저장하기 위해서는 type casting(형식변환)이 필요하다. 형식 변환에는 암시적 변환, 명시적 변환, 사용자 정의 변환, Help Class를 통한 변환으로 구분할 수가 있다. 먼저, 암시적 변환이 지원되는 경우는 변환과정을 통해 데이터의 손실이 되지 않는 형식간 변환에 제공이 되고 있다. 예를 들어 작은 정수 형식에서 큰 정수형으로의 변환 및 파생 클래스에서 기본 클래스로의 변환등이 있을..

9.String

String 다루는 내용 - String의 멤버 - StringBuilder String은 Char개체의 읽기 전용 컬렉션으로 저장이 되며 각 컬렉션은 UTF-16으로 인코딩된 유니코드 문자 하나이다. String클래스는 C및 C++과 달리 안전한 작성 및 조작, 비교를 할 수 있다는 특징이 있다. 또한 string이라는 별칭으로도 사용이 가능하며 개별 유니코드 포인터에 액세스를 하기 위해 StringInfo개체를 사용할 수도 있다. 고려해야 할 점은 String 개체는 읽기 전용 컬렉션이기 때문에 수정이 불가능하며 수정하는 것처럼 보이는 메소드를 포함을 하고 있어서 해당 메소드 수행 후 수정된 String개체를 반환하고 있다. 즉, 반환되는 것은 새로운 String개체이고 기존 개체는 GC에 의해 수집..

8. Object

Object 다루는 내용 - Object - Object에서 파생된 클래스에서 재정의할 수 있는 메소드 C#의 object형식은 .NET Framework의 Object형식에 대한 별칭입니다. Object는 모든 형식 계층 구조에서 루트여서 모든 형식은 Object로부터 암시적으로 파생이 된다. Object는 다음과 같은 메소드들을 제공을 하고 있으며 모든 형식은 암식적으로 파생된 형식들이므로 이들을 사용할 수 있다. 또한 파생된 클래스에서는 virtual 메소드를 override할 수 있다. [SerializableAttribute] //클래스가 serialize될 수 있음을 표시 [ComVisibleAttribute(true)] //COM에 대한 어셈블리 내의 관리되는 형식의 액세스 가능성을 제어 [..

반응형