4. 진행 예정 내용 ¶
- 다소 중요하다고 생각된 내용은 보라색 볼드(굵게) 처리하였습니다.
- #3. 클래스와 객체지향 Part.#1
- 클래스와 인스턴스
- new 연산자
- 데이터 멤버와 메서드 정의
- 생성자와 소멸자, 기본 생성자
- GC와 소멸자
- 정적 데이터 멤버와 정적 메서드
- 정적 생성자(Static Constructor)
- 네임스페이스와 클래스, using을 통한 네임스페이스 선언
- C#에서의 FQDN
- C#에서의 접근 제한자
- 접근자 메서드와 설정자 메서드, 그리고 속성(Property)
- 문맥 예약어
- 가변 객체와 불변 객체
- 클래스 내 데이터 멤버로써의 상수
- readonly 데이터 변수
- 메서드 오버로딩
- 연산자 오버로딩
- 중첩 클래스
- 클래스와 인스턴스
- #4. 클래스와 객체지향 Part.#2
- C#에서의 클래스 상속
- 봉인된 클래스(Sealed class)
- 클래스 상속 관계에서의 형변환
- as 연산자와 is 연산자
- System.Object와 System.ValueType
- 배열과 System.Array
- enum 클래스 타입
- enum과 Flag 특성
- this 예약어와 base 예약어
- 인덱서 구문
- virtual 예약어와 가상 함수
- 메서드 오버라이딩과 new 예약어를 통한 메서드 정의
- 클래스 간의 형변환
- 추상 메서드와 추상 클래스
- C#에서의 클래스 상속
- 역시나 시간이 된다면
안 될것 같지만요...#5 일부분까지 진행할 수도 있습니다.
5.1.1. 3. 클래스와 객체지향 Part.#1 ¶
객체(object)와 클래스(Class)에 대한 설명 - object에 대한 일반적인 개념이 바로 Class (ex> 책 - Class, 열혈강의 C++ - Object)
Class를 이용해서 Object를 만드는 것을 instance를 만든다고 부른다.
클래스는 속성(data, 필드)과 행위(메서드 == 함수)를 갖는다.
클래스 선언 하는 법
class A {
class A {
}
ex> class Book {
string name;
string author;
decimal isbn;
void Open() {
}
}string author;
decimal isbn;
void Open() {
}
객체를 만들 때는 new를 사용한다
new를 하면 생성자(Constructor, Ctor로 줄여서라고도 씀)가 호출된다. 생성자는 return 타입이 없다
생성자를 아무것도 정의하지 않았으면 기본 생성자(매개 변수도 없는 기본 껍데기)를 만들어서 넣어 준다.
ex> 위의 Book class에서 기본 생성자는 public Book() { }
ex> 위의 Book class에서 기본 생성자는 public Book() { }
소멸자(Destructor를 dtor로 줄여서라고도 씀)
C++과 동일하게 ~ClassName()를 사용.
소멸자는 무조건 매개변수가 없어야 함.
소멸자에는 접근 제한자(public, private, protected 등)를 쓸 수 없다.
C++과 동일하게 ~ClassName()를 사용.
소멸자는 무조건 매개변수가 없어야 함.
소멸자에는 접근 제한자(public, private, protected 등)를 쓸 수 없다.
소멸자는 언제 호출되는지? CLR ==> GC, 안 쓰는거 같으면 알아서 지워줌.
근데 GC가 동작하는 시점은 아무도 모른다.
근데 소멸자를 명시적으로 호출할 수 없음
소멸자는 평상시에는 GC가 알아서 해주니까 쓸모가 없음.
근데 GC가 동작하는 시점은 아무도 모른다.
근데 소멸자를 명시적으로 호출할 수 없음
소멸자는 평상시에는 GC가 알아서 해주니까 쓸모가 없음.
관리 메모리(GC), 비관리 메모리(GC가 관리 안 함, C 또는 C++에서의 동적할당과 비슷함) --> 비관리 메모리에서 소멸자를 사용. 그래도 명시적으로 호출은 못 하고 비관리 메모리를 할당해제 해주는 함수가 있음
static
클래스 --> 데이터 멤버(필드) + 메서드 멤버 --> 인스턴스
클래스 --> 데이터 멤버(필드) + 메서드 멤버 --> 인스턴스
static은 '정적'이라는 의미, 개념(Class)과 관련이 있지 사물(instance)와는 관련이 없음
Class에서 정의해둔 static method는 instace에 점 찍고 쓰면 에러가 나도 Class에 점 찍고 써야한다.
static을 쓴 것은 Class에 종속적이게 됨.
static을 안 썼으면 계속 힙에 새로 생기니까 멤버 변수를 인스턴스 수로 써도 공유해서 못 쓰는데 static을 붙이면 공유해서 쓸 수 있음. static 멤버가 아니면 무조건 instance 멤버임.
static을 쓴 것은 Class에 종속적이게 됨.
static을 안 썼으면 계속 힙에 새로 생기니까 멤버 변수를 인스턴스 수로 써도 공유해서 못 쓰는데 static을 붙이면 공유해서 쓸 수 있음. static 멤버가 아니면 무조건 instance 멤버임.
static 멤버를 쓰듯이 static 메서드도 쓸 수 있는데, static 메서드의 내부에서는 instance의 멤버 변수는 사용할 수 없고 static 멤버 변수만 쓸 수 있음
정적 생성자(static constructor == cctor) --> 맨 처음에 단 한번만 생성 됨(메인보다 먼저 실행), 이것도 접근 제한자 붙이면 오류가 납니다. static 변수를 초기화 할 때 사용
네임스페이스를 배워봅시다
FQDN(Fully Qualified Domain Name)
ex> System.console 이런 것 처럼 속해있는 곳을 전부 나열해주는 것을 FQDN임(C#은)
FQDN(Fully Qualified Domain Name)
ex> System.console 이런 것 처럼 속해있는 곳을 전부 나열해주는 것을 FQDN임(C#은)
접근 제한자 - 클래스에 있는 멤버들을 누구에게 보여줄 것인지를 정하는 녀석. public(누구나), private(자기 자신만), protected(자기 자신 + 자기 자식), internal(동일 어셈블리), internal protected(동일 어셈블리 + 자기 자신 + 자기 자식)
internal protected 이면 internal 또는 protected 입니다
문맥 예약어 - 특정 문맥에서만 예약어로 변신
readonly(static이 됨), const(static이 될 수 없음)
상수를 쓰려면 무조건 기본 자료형만 가능, 대신 class는 readonly는 가능하다
상수를 쓰려면 무조건 기본 자료형만 가능, 대신 class는 readonly는 가능하다
상수는 생성자 안에서 초기화 할 수 없다
const는 define과 비슷한 개념
const는 define과 비슷한 개념
메서드 오버로딩 가능합니다. 시그니쳐로 구분합니다.(C언어에서는 함수 이름으로만 판단하는데 여기서는 아닙니다)
연산자 오버로딩 가능합니다.
쓰는 법
접근 제한자 static Class명 operator +(Class명 변수1, Class명 변수2) // <, > true, false 같은 것은 하나를 만들면 다른 하나도 반드시 만들어야 함.
접근 제한자 static Class명 operator +(Class명 변수1, Class명 변수2) // <, > true, false 같은 것은 하나를 만들면 다른 하나도 반드시 만들어야 함.
중첩 클래스 가능합니다.