More actions
No edit summary |
imported>nerumin90 No edit summary |
||
| Line 8: | Line 8: | ||
== 진행 시간 == | == 진행 시간 == | ||
* 19시 ~ | * 수요일 19시 ~ 21시 | ||
== 진행 예정 내용 == | == 진행 예정 내용 == | ||
* 다소 중요하다고 생각된 내용은 [[HTML(<font color="#9933ff"><b>보라색 볼드(굵게)</b></font>)]] 처리하였습니다. | * 다소 중요하다고 생각된 내용은 [[HTML(<font color="#9933ff"><b>보라색 볼드(굵게)</b></font>)]] 처리하였습니다. | ||
* #4. 클래스와 객체지향 Part.#2 [[HTML(<font color="#287a63"><b>(5월 | * #4. 클래스와 객체지향 Part.#2 [[HTML(<font color="#287a63"><b>(5월 25일에서 이어서)</b></font>)]] | ||
** System.Object와 System.ValueType | ** System.Object와 System.ValueType | ||
** 배열과 System.Array | ** 배열과 System.Array | ||
| Line 33: | Line 33: | ||
** [[HTML(<font color="#9933ff"><b>인터페이스, 추상 클래스와 인터페이스</b></font>)]] | ** [[HTML(<font color="#9933ff"><b>인터페이스, 추상 클래스와 인터페이스</b></font>)]] | ||
** [[HTML(<font color="#9933ff"><b>인터페이스의 구현</b></font>)]] | ** [[HTML(<font color="#9933ff"><b>인터페이스의 구현</b></font>)]] | ||
** [[HTML(<font color="#9933ff"><b>구조체(Struct), 구조체와 클래스</b></font>)]] | ** [[HTML(<font color="#9933ff"><b>구조체(Struct), 구조체와 클래스</b></font>)]] | ||
** [[HTML(<font color="#9933ff"><b>깊은 복사와 얕은 복사, PBV(CBV)와 PBR(CBR)</b></font>)]] | ** [[HTML(<font color="#9933ff"><b>깊은 복사와 얕은 복사, PBV(CBV)와 PBR(CBR)</b></font>)]] | ||
** [[HTML(<font color="#9933ff"><b>ref와 out 예약어를 통한 PBR</b></font>)]] | ** [[HTML(<font color="#9933ff"><b>ref와 out 예약어를 통한 PBR</b></font>)]] | ||
* ~~역시 모두 진행 가능할 지는 진행해야 알 것 같습니다.~~ | * ~~역시 모두 진행 가능할 지는 진행해야 알 것 같습니다.~~ | ||
** ~~될 리가 없었다. (?!)~~ | |||
== 진행 == | == 진행 == | ||
=== 내용 요약 === | === 내용 요약 === | ||
| Line 115: | Line 113: | ||
* 구조체 : 값 형식 | * 구조체 : 값 형식 | ||
** 나머지는 Class처럼 정의 | ** 나머지는 Class처럼 정의 | ||
** new로도 선언 가능 -> | ** new로도 선언 가능 -> new로 선언해도 값 형식임은 유지됨. | ||
* 깊은 복사, 얕은 복사 | * 깊은 복사, 얕은 복사 | ||
** 깊은 복사(Call By Value) : 값을 옮김 | ** 깊은 복사(Call By Value) : 값을 옮김 | ||
Revision as of 12:22, 5 June 2016
개요
- 객체 지향에 조금 더 가깝게!
참가자
진행 시간
- 수요일 19시 ~ 21시
진행 예정 내용
- 다소 중요하다고 생각된 내용은 [[HTML(<font color="#9933ff"><b>보라색 볼드(굵게)</b></font>)]] 처리하였습니다.
- #4. 클래스와 객체지향 Part.#2 [[HTML(<font color="#287a63"><b>(5월 25일에서 이어서)</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. 클래스와 객체지향 Part.#3
- [[HTML(<font color="#9933ff"><b>델리게이트(delegate)의 정의</b></font>)]]
- [[HTML(<font color="#9933ff"><b>델리게이트의 특성, C#과 1급 함수</b></font>)]]
- System.MulticastDelegate
- [[HTML(<font color="#9933ff"><b>델리게이트 인스턴스와 산술 연산자</b></font>)]]
- [[HTML(<font color="#9933ff"><b>콜백 메서드</b></font>)]]
- [[HTML(<font color="#9933ff"><b>인터페이스, 추상 클래스와 인터페이스</b></font>)]]
- [[HTML(<font color="#9933ff"><b>인터페이스의 구현</b></font>)]]
- [[HTML(<font color="#9933ff"><b>구조체(Struct), 구조체와 클래스</b></font>)]]
- [[HTML(<font color="#9933ff"><b>깊은 복사와 얕은 복사, PBV(CBV)와 PBR(CBR)</b></font>)]]
- [[HTML(<font color="#9933ff"><b>ref와 out 예약어를 통한 PBR</b></font>)]]
- ~~역시 모두 진행 가능할 지는 진행해야 알 것 같습니다.~~
- ~~될 리가 없었다. (?!)~~
진행
내용 요약
4. 클래스와 객체지향 Part.#2 (이어서)
- Enum : 정수형 상수로 지정
- 선언
Enum Day{ Monday, Tuesday = 2, Wednesday, Thursday, Friday, Saturday, Sunday }
//Monday = 0, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6, Sunday = 7
- 사용
Day working = Day.Monday; Console.WriteLine(workingdays);//Monday Console.WriteLine((int)workingdays);//0
- 기준이 int -> 만약 크기를 키우려면 선언에서 Enum 이름 : 자료형
- Enum은 숫자다. -> Bit 연산자 사용 가능
- Flags를 붙이면 Bit 연산자로 연결하면 Monday, Tuesday 이런 식으로 출력해줌
- this와 base
- 자기자신의 인스턴스의 변수 사용 : this.변수명
- 상속한 클래스의 변수 사용 : java에서 super, C#에서는 base
- 인덱서 구문 : []구문을 재정의
- 사용
private int[] arr;
public int this[int index]{
get
{
return this.arr[index];
}
set
{
this.arr[index]=value;
}
}
- 정의만 한다면 String이나 다른 변수도 가능
- virtual과 override
- 다형성을 위한 키워드
- virtual : 부모 클래스에 붙임(붙여도 override 안할 수도)
- override : 자식 클래스에 붙임(재정의를 확실히 하기 위해)
- new : 이름만 같고 재정의 아님
- 클래스 형변환
- 명시적 형변환 : explicit
- 암시적 암시적 : implicit
- abstract : 틀만 제공하는 클래스
- 역시나 override를 붙여서 구현해야 함.
- 생성자 위임 : C++ 스타일로(: 이용)
5. 클래스와 객체지향 Part.#3
- 델리게이트의 정의
- 함수 포인터라 이해하면 편함.
Class Math{
public delegate void CalcDelegate(int x, int y);
public Math(){
CalcDelegate calc = this.Add;
calc(1, 2);
}
public void Add(int x,int y){Console.WriteLine(x+y);}
public void Sub(int x,int y){Console.WriteLine(x-y);}
}
- 델리게이트의 특성
- 함수 포인터와 다른 점 : 가르키고 있는 함수의 특성을 가지고 있음.(Static이면 0)
- pointer to member와의 다른 점 : 형식만 맞으면 다른 클래스의 것이라도 가능
- 1급 함수
- 메소드에서 Delegate를 리턴할 수 있음
- 파라미터로 Delegate를 넘길 수 있음
- 클래스의 멤버변수로써의 Delegate를 가질 수 있음
- Object->Delegate->MultiCastDelegate
- MuitiCastDelegate : 여러개를 연결할 수 있음(+=,-= 이용)
- 콜백 메서드 : 호출자(A)가 피호출자(B)를 불렀는데 거기서 호출자(A)를 부름
- ex) Sort에서 함수 포인터
- abstract class->Interface
- Interface : 0개 이상의 추상 메서드만 담을 수 있는 무언가
- 정의 : interface 이름{}(이름에 I를 붙여줌)
- 상속받은 class에서 정의
- Interface는 override를 쓰면 안됨.
- 구조체 : 값 형식
- 나머지는 Class처럼 정의
- new로도 선언 가능 -> new로 선언해도 값 형식임은 유지됨.
- 깊은 복사, 얕은 복사
- 깊은 복사(Call By Value) : 값을 옮김
- 얕은 복사(Call By Reference) : 참조를 옮김
- ref : 값 형식으로 줘도 참조 형식으로 옮겨감(단, 쓰기 전에 할당 해야됨)
- out : ref의 부분집합, 쓰기 전에 할당을 하지 않아도 됨(단, 반환 전에 할당 해야됨), 할당 전에는 다른 변수에서 참조 불가능