U E D R , A S I H C RSS

CS/5월25일

Difference between r1.2 and the current

@@ -4,10 +4,10 @@
* 본격적으로 시작해볼까요? ~~본격적이 아니었어?!~~ 객체 지향의 세계로!

== 참가자 ==
* 진행 예정입니다.
* [신형철], [이승현], [홍성현], [유성현], [김상렬], [강민승]

== 진행 시간 ==
* 수요일 정모 직후 진행 예정입니다.
* 수요일 저녁 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 ====

객체(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]



1. 개요

  • 본격적으로 시작해볼까요? 본격적이 아니었어?! 객체 지향의 세계로!

3. 진행 시간

  • 수요일 저녁 7시 ~ 저녁 9시

4. 진행 예정 내용

  • 다소 중요하다고 생각된 내용은 보라색 볼드(굵게) 처리하였습니다.

  • #3. 클래스와 객체지향 Part.#1
    • 클래스와 인스턴스
    • new 연산자
    • 데이터 멤버와 메서드 정의
    • 생성자와 소멸자, 기본 생성자
    • GC와 소멸자
    • 정적 데이터 멤버와 정적 메서드
    • 정적 생성자(Static Constructor)
    • 네임스페이스와 클래스, using을 통한 네임스페이스 선언
    • C#에서의 FQDN
    • C#에서의 접근 제한자
    • 접근자 메서드와 설정자 메서드, 그리고 속성(Property)
    • 문맥 예약어
    • 가변 객체와 불변 객체
    • 클래스 내 데이터 멤버로써의 상수
    • readonly 데이터 변수
    • 메서드 오버로딩
    • 연산자 오버로딩
    • 중첩 클래스

  • #4. 클래스와 객체지향 Part.#2
    • C#에서의 클래스 상속
    • 봉인된 클래스(Sealed class)
    • 클래스 상속 관계에서의 형변환
    • as 연산자와 is 연산자

  • 남은 항목에 대해서는 시간 관계상 다음 진행으로 미뤘습니다.

5. 진행

5.1. 내용 요약


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() { }

소멸자(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 같은 것은 하나를 만들면 다른 하나도 반드시 만들어야 함.

중첩 클래스 가능합니다.

5.1.2. 4. 클래스와 객체지향 Part.#2


상속
부모 클래스( == 상위 클래스, 슈퍼 클래스)(영어로는 parent, base, super class)
자식 클래스( == 파생 클래스, 서브 클래스)

상속하는 방법 - :(콜론)을 써서 C++처럼 하는데 다중상속은 안됩니다.

밴다이어그램 그려서 하는데 잘 생각해보세요

as ==> safe casting (캐스팅이 실패하면 null이 된다)
as는 참조형 변수에만 사용 가능(int 같은 것에 쓰면 터진다)

is는 마찬가지로 형변환 체크, 대신에 return type이 bool

5.2. 그 외

  • 건의 사항으로 인해 변경된 위키 작성 방식에 관한 공지

6. 덧글


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:43
Processing time 0.0392 sec