일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- C++
- 깃
- docker
- c#
- dart 언어
- Data Structure
- Algorithm
- c언어
- Flutter
- Python
- 구조체
- C# delegate
- c# 추상 클래스
- vim
- jupyter lab
- 플러터
- 유니티
- 도커
- gitlab
- jupyter
- C언어 포인터
- git
- Unity
- 다트 언어
- c# winform
- github
- Houdini
- 포인터
- HTML
- c# 윈폼
- Today
- Total
목록c# 추상 클래스 (4)
nomad-programmer
추상 클래스는 클래스처럼 구현된 프로퍼티를 가질 수도 있는 한편, 인터페이스처럼 구현되지 않은 프로퍼티도 가질 수 있다. 추상 클래스에서는 이것을 "추상 프로퍼티 (Abstract Property)" 라고 한다. 추상 메소드가 그랬던 것처럼, 추상 프로퍼티 역시 인터페이스의 프로퍼티와 다를 것이 없다. 파생 클래스가 해당 프로퍼티를 구현하도록 강제하는 것일 뿐이다. 추상 프로퍼티는 인터페이스처럼 구현을 비워놓은 것만으로는 추상 프로퍼티를 만들 수 없다. 그리하면 C# 컴파일러가 자동 구현 프로퍼티로 간주하고 구현을 자동으로 채워 넣을 것이다. 그래서 추상 프로퍼티는 abstract 한정자를 이용하여 선언한다. abstract class 추상 클래스이름 { abstract 데이터형식 프로퍼티이름 { get..
추상 클래스는 인터페이스와 달리 "구현"을 가질 수 있다. 하지만 클래스와는 달리 인스턴스를 가질 수 없다. 한마디로 추상 클래스는 구현을 갖되 인스턴스는 만들지 못한다. abstract class 클래스이름 { // 클래스와 동일하게 구현 } 추상 클래스가 인터페이스와 클래스의 중간에 있다고 했지만 추상 클래스는 클래스에 더 가깝다. 추상 클래스의 접근성이 그 예이다. 클래스와 똑같다. 인터페이스에서는 모든 메소드가 public으로 선언되는 반면, 클래스는 한정자를 명시하지 않으면 모든 메소드가 private로 선언된다. 한편, 추상 클래스에는 인스턴스를 만들 수 없는 점 외에도 클래스와 다른 점이 또 하나 있다. 그것은 바로 "추상 메소드 (Abstract Method)" 를 가질 수 있다는 사실이다..
인터페이스는 객체 지향 프로그래밍을 한층 더 강력하게 만들어주는 요소이다. 객체 지향 프로그래밍의 꽃이라고도 불리며 객체 지향 프로그래밍의 고수는 인터페이스를 잘 활용할 수 있어야 한다고 말하기도 한다. 인터페이스의 선언 인터페이스(Interface)는 다음과 같이 interface 키워드를 이용하여 선언한다. interface 인터페이스이름 { 반환형식 메소드이름1(매개 변수 목록); 반환형식 메소드이름2(매개 변수 목록); . . . } // 인터페이스 실제 정의 예 interface ILogger { void WriteLog( string log ); } 클래스를 선언하는 것과 비슷하다. 허나 메소드, 이벤트, 인덱서, 프로퍼티만을 가질 수 있다. 그런데 그나마도 구현부가 없다. 그리고 클래스는 접..
C#은 C++의 순수 가상 함수같은 말이 없다. 허나 순수 가상 함수와 같은 기능을 하는 것을 만들 수 있다. 그것은 추상 클래스를 정의하고 abstract 키워드를 사용하는 것이다. 추상 클래스와 가상 함수의 차이점 가상 함수는 재정의를 하지 않아도 컴파일 에러가 발생하지 않는다. 또한 부모 클래스에서 가상 함수는 {} 괄호가 있어야 한다. 즉, 함수 같은 구조여야 한다. public virtual string GetData() { return ""; } 추상 클래스의 추상화 함수는 재정의를 하지 않으면 컴파일 에러가 발생한다. 그리고 부모 클래스에서 {} 괄호는 필요치 않다. 선언만 존재하면 된다. public abstract string GetData(); 추상 클래스는 독자적으로 인스턴스를 생성할..