Difference between r1.2 and the current
@@ -4,10 +4,10 @@
* 본격적으로 시작해볼까요? ~~본격적이 아니었어?!~~ 객체 지향의 세계로!
== 참가자 ==
== 진행 시간 ==
== 진행 예정 내용 ==
* 다소 중요하다고 생각된 내용은 [[HTML(<font color="#9933ff"><b>보라색 볼드(굵게)</b></font>)]] 처리하였습니다.
== 참가자 ==
* 진행 예정입니다.
* [신형철], [이승현], [홍성현], [유성현], [김상렬], [강민승]
== 진행 시간 ==
* 수요일 정모 직후 진행 예정입니다.
* 수요일 저녁 7시 ~ 저녁 9시
== 진행 예정 내용 ==
* 다소 중요하다고 생각된 내용은 [[HTML(<font color="#9933ff"><b>보라색 볼드(굵게)</b></font>)]] 처리하였습니다.
@@ -37,28 +37,109 @@
* 봉인된 클래스(Sealed class)
* [[HTML(<font color="#9933ff"><b>클래스 상속 관계에서의 형변환</b></font>)]]
* [[HTML(<font color="#9933ff"><b>as 연산자와 is 연산자</b></font>)]]
* System.Object와 System.ValueType
* 배열과 System.Array
* [[HTML(<font color="#9933ff"><b>enum 클래스 타입</b></font>)]]
* enum과 Flag 특성
* [[HTML(<font color="#9933ff"><b>this 예약어와 base 예약어</b></font>)]]
* [[HTML(<font color="#9933ff"><b>인덱서 구문</b></font>)]]
* [[HTML(<font color="#9933ff"><b>virtual 예약어와 가상 함수</b></font>)]]
* [[HTML(<font color="#9933ff"><b>메서드 오버라이딩과 new 예약어를 통한 메서드 정의</b></font>)]]
* [[HTML(<font color="#9933ff"><b>클래스 간의 형변환</b></font>)]]
* [[HTML(<font color="#9933ff"><b>추상 메서드와 추상 클래스</b></font>)]]
* 역시나 시간이 된다면 ~~안 될것 같지만요...~~ #5 일부분까지 진행할 수도 있습니다.
== 진행 ==
=== 내용 요약 ===
==== 3. 클래스와 객체지향 Part.#1 ====
=== 그 외 ===
--------------------------------
[CS]
* [[HTML(<font color="#9933ff"><b>클래스 상속 관계에서의 형변환</b></font>)]]
* [[HTML(<font color="#9933ff"><b>as 연산자와 is 연산자</b></font>)]]
* 남은 항목에 대해서는 시간 관계상 다음 진행으로 미뤘습니다.
== 진행 ==
=== 내용 요약 ===
==== 3. 클래스와 객체지향 Part.#1 ====
객체(object)와 클래스(Class)에 대한 설명 - object에 대한 일반적인 개념이 바로 Class (ex> 책 - Class, 열혈강의 C++ - Object)
Class를 이용해서 Object를 만드는 것을 instance를 만든다고 부른다.
클래스는 속성(data, 필드)과 행위(메서드 == 함수)를 갖는다.
클래스 선언 하는 법
{{{
class A {
}
ex> class Book {
string name;
string author;
decimal isbn;
void Open() {
}
}
}}}
객체를 만들 때는 new를 사용한다
new를 하면 생성자(Constructor, Ctor로 줄여서라고도 씀)가 호출된다. 생성자는 return 타입이 없다
생성자를 아무것도 정의하지 않았으면 기본 생성자(매개 변수도 없는 기본 껍데기)를 만들어서 넣어 준다.
ex> 위의 Book class에서 기본 생성자는 public Book() { }
소멸자(Destructor를 dtor로 줄여서라고도 씀)
C++과 동일하게 ~ClassName()를 사용.
소멸자는 무조건 매개변수가 없어야 함.
소멸자에는 접근 제한자(public, private, protected 등)를 쓸 수 없다.
소멸자는 언제 호출되는지? CLR ==> GC, 안 쓰는거 같으면 알아서 지워줌.
근데 GC가 동작하는 시점은 아무도 모른다.
근데 소멸자를 명시적으로 호출할 수 없음
소멸자는 평상시에는 GC가 알아서 해주니까 쓸모가 없음.
관리 메모리(GC), 비관리 메모리(GC가 관리 안 함, C 또는 C++에서의 동적할당과 비슷함) --> 비관리 메모리에서 소멸자를 사용. 그래도 명시적으로 호출은 못 하고 비관리 메모리를 할당해제 해주는 함수가 있음
static
클래스 --> 데이터 멤버(필드) + 메서드 멤버 --> 인스턴스
static은 '정적'이라는 의미, 개념(Class)과 관련이 있지 사물(instance)와는 관련이 없음
Class에서 정의해둔 static method는 instace에 점 찍고 쓰면 에러가 나도 Class에 점 찍고 써야한다.
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#은)
접근 제한자 - 클래스에 있는 멤버들을 누구에게 보여줄 것인지를 정하는 녀석. public(누구나), private(자기 자신만), protected(자기 자신 + 자기 자식), internal(동일 어셈블리), internal protected(동일 어셈블리 + 자기 자신 + 자기 자식)
internal protected 이면 internal 또는 protected 입니다
~~필기하지 않겠어 위키 코드가 올라오겠지~~, getter setter가 좀 독특하게 쓸 수 있음 싱기방기함
문맥 예약어 - 특정 문맥에서만 예약어로 변신
readonly(static이 됨), const(static이 될 수 없음)
상수를 쓰려면 무조건 기본 자료형만 가능, 대신 class는 readonly는 가능하다
상수는 생성자 안에서 초기화 할 수 없다
const는 define과 비슷한 개념
메서드 오버로딩 가능합니다. 시그니쳐로 구분합니다.(C언어에서는 함수 이름으로만 판단하는데 여기서는 아닙니다)
연산자 오버로딩 가능합니다.
쓰는 법
접근 제한자 static Class명 operator +(Class명 변수1, Class명 변수2) // <, > true, false 같은 것은 하나를 만들면 다른 하나도 반드시 만들어야 함.
중첩 클래스 가능합니다.
==== 4. 클래스와 객체지향 Part.#2 ====상속
부모 클래스( == 상위 클래스, 슈퍼 클래스)(영어로는 parent, base, super class)
자식 클래스( == 파생 클래스, 서브 클래스)
상속하는 방법 - :(콜론)을 써서 C++처럼 하는데 다중상속은 안됩니다.
밴다이어그램 그려서 하는데 잘 생각해보세요
as ==> safe casting (캐스팅이 실패하면 null이 된다)
as는 참조형 변수에만 사용 가능(int 같은 것에 쓰면 터진다)
is는 마찬가지로 형변환 체크, 대신에 return type이 bool
=== 그 외 ===
* 건의 사항으로 인해 변경된 위키 작성 방식에 관한 공지
== 덧글 ==--------------------------------
[CS]
4. 진행 예정 내용 ¶
- 다소 중요하다고 생각된 내용은 보라색 볼드(굵게) 처리하였습니다.
- #3. 클래스와 객체지향 Part.#1
- 클래스와 인스턴스
- new 연산자
- 데이터 멤버와 메서드 정의
- 생성자와 소멸자, 기본 생성자
- GC와 소멸자
- 정적 데이터 멤버와 정적 메서드
- 정적 생성자(Static Constructor)
- 네임스페이스와 클래스, using을 통한 네임스페이스 선언
- C#에서의 FQDN
- C#에서의 접근 제한자
- 접근자 메서드와 설정자 메서드, 그리고 속성(Property)
- 문맥 예약어
- 가변 객체와 불변 객체
- 클래스 내 데이터 멤버로써의 상수
- readonly 데이터 변수
- 메서드 오버로딩
- 연산자 오버로딩
- 중첩 클래스
- 클래스와 인스턴스
- #4. 클래스와 객체지향 Part.#2
- C#에서의 클래스 상속
- 봉인된 클래스(Sealed class)
- 클래스 상속 관계에서의 형변환
- as 연산자와 is 연산자
- C#에서의 클래스 상속
- 남은 항목에 대해서는 시간 관계상 다음 진행으로 미뤘습니다.
5.1.1. 3. 클래스와 객체지향 Part.#1 ¶
객체(object)와 클래스(Class)에 대한 설명 - object에 대한 일반적인 개념이 바로 Class (ex> 책 - Class, 열혈강의 C++ - Object)
Class를 이용해서 Object를 만드는 것을 instance를 만든다고 부른다.
클래스는 속성(data, 필드)과 행위(메서드 == 함수)를 갖는다.
클래스 선언 하는 법
class A { } ex> class Book { string name; 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 같은 것은 하나를 만들면 다른 하나도 반드시 만들어야 함.
중첩 클래스 가능합니다.
5.1.2. 4. 클래스와 객체지향 Part.#2 ¶
상속
부모 클래스( == 상위 클래스, 슈퍼 클래스)(영어로는 parent, base, super class)
자식 클래스( == 파생 클래스, 서브 클래스)
부모 클래스( == 상위 클래스, 슈퍼 클래스)(영어로는 parent, base, super class)
자식 클래스( == 파생 클래스, 서브 클래스)
상속하는 방법 - :(콜론)을 써서 C++처럼 하는데 다중상속은 안됩니다.
밴다이어그램 그려서 하는데 잘 생각해보세요
as ==> safe casting (캐스팅이 실패하면 null이 된다)
as는 참조형 변수에만 사용 가능(int 같은 것에 쓰면 터진다)
as는 참조형 변수에만 사용 가능(int 같은 것에 쓰면 터진다)
is는 마찬가지로 형변환 체크, 대신에 return type이 bool