Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

CS/6월1일: Difference between revisions

From ZeroWiki
No edit summary
(Repair batch-0001 pages from live compare)
 
(5 intermediate revisions by 4 users not shown)
Line 5: Line 5:


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


== 진행 시간 ==
== 진행 시간 ==
* 수요일 정모 종료 직후 진행 예정입니다.
* 수요일 19시 ~ 21시


== 진행 예정 내용 ==
== 진행 예정 내용 ==
* 다소 중요하다고 생각된 내용은 [[HTML(<font color="#9933ff"><b>보라색 볼드(굵게)</b></font>)]] 처리하였습니다.
* 다소 중요하다고 생각된 내용은 <font color="#9933ff"><b>보라색 볼드(굵게)</b></font> 처리하였습니다.


* #4. 클래스와 객체지향 Part.#2 &#91;&#91;HTML(&lt;font color="#287a63"&gt;&lt;b&gt;(5월 25일부터 아직 진행중)&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
* #4. 클래스와 객체지향 Part.#2 <font color="#287a63"><b>(5월 25일에서 이어서)</b></font>
** System.Object와 System.ValueType
** System.Object와 System.ValueType
** 배열과 System.Array
** 배열과 System.Array
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;enum 클래스 타입&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>enum 클래스 타입</b></font>
** enum과 Flag 특성
** enum과 Flag 특성
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;this 예약어와 base 예약어&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>this 예약어와 base 예약어</b></font>
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;인덱서 구문&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>인덱서 구문</b></font>
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;virtual 예약어와 가상 함수&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>virtual 예약어와 가상 함수</b></font>
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;메서드 오버라이딩과 new 예약어를 통한 메서드 정의&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>메서드 오버라이딩과 new 예약어를 통한 메서드 정의</b></font>
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;클래스 간의 형변환&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>클래스 간의 형변환</b></font>
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;추상 메서드와 추상 클래스&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>추상 메서드와 추상 클래스</b></font>


* #5. 클래스와 객체지향 Part.#3
* #5. 클래스와 객체지향 Part.#3
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;델리게이트(delegate)의 정의&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>델리게이트(delegate)의 정의</b></font>
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;델리게이트의 특성, C#과 1급 함수&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>델리게이트의 특성, C#과 1급 함수</b></font>
** System.MulticastDelegate
** System.MulticastDelegate
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;델리게이트 인스턴스와 산술 연산자&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>델리게이트 인스턴스와 산술 연산자</b></font>
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;콜백 메서드&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>콜백 메서드</b></font>
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;인터페이스, 추상 클래스와 인터페이스&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>인터페이스, 추상 클래스와 인터페이스</b></font>
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;인터페이스의 구현&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>인터페이스의 구현</b></font>
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;열거자와 IEnumerator, IEnumerable&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>구조체(Struct), 구조체와 클래스</b></font>
** 강력한 결합과 느슨한 결합
** <font color="#9933ff"><b>깊은 복사와 얕은 복사, PBV(CBV)와 PBR(CBR)</b></font>
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;구조체(Struct), 구조체와 클래스&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** <font color="#9933ff"><b>ref와 out 예약어를 통한 PBR</b></font>
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;깊은 복사와 얕은 복사, PBV(CBV)와 PBR(CBR)&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;ref와 out 예약어를 통한 PBR&lt;/b&gt;&lt;/font&gt;)&#93;&#93;
** &#91;&#91;HTML(&lt;font color="#9933ff"&gt;&lt;b&gt;이벤트&lt;/b&gt;&lt;/font&gt;)&#93;&#93;


* ~~역시 모두 진행 가능할 지는 진행해야 알 것 같습니다.~~
* ~~역시 모두 진행 가능할 지는 진행해야 알 것 같습니다.~~
** ~~될 리가 없었다. (?!)~~
== 진행 ==
== 진행 ==
=== 내용 요약 ===
=== 내용 요약 ===
Line 48: Line 46:
  Enum Day{ Monday, Tuesday = 2, Wednesday, Thursday, Friday, Saturday, Sunday }
  Enum Day{ Monday, Tuesday = 2, Wednesday, Thursday, Friday, Saturday, Sunday }
  //Monday = 0, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6, Sunday = 7
  //Monday = 0, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6, Sunday = 7
** 사용
** 사용
  Day working = Day.Monday;
  Day working = Day.Monday;
  Console.WriteLine(workingdays);//Monday
  Console.WriteLine(workingdays);//Monday
  Console.WriteLine((int)workingdays);//0
  Console.WriteLine((int)workingdays);//0
** 기준이 int -> 만약 크기를 키우려면 선언에서 Enum 이름 : 자료형
** 기준이 int -> 만약 크기를 키우려면 선언에서 Enum 이름 : 자료형
** Enum은 숫자다. -> Bit 연산자 사용 가능
** Enum은 숫자다. -> Bit 연산자 사용 가능
** [[Flags]]를 붙이면 Bit 연산자로 연결하면 Monday, Tuesday 이런 식으로 출력해줌
** Flags를 붙이면 Bit 연산자로 연결하면 Monday, Tuesday 이런 식으로 출력해줌
* this와 base
* this와 base
** 자기자신의 인스턴스의 변수 사용 : this.변수명
** 자기자신의 인스턴스의 변수 사용 : this.변수명
Line 62: Line 58:
* 인덱서 구문 : []구문을 재정의
* 인덱서 구문 : []구문을 재정의
** 사용
** 사용
  private int[] arr;
  private int&#91;&#93; arr;
  public int this[int index]{
  public int this&#91;int index&#93;{
  get
  get
  {
  {
  return this.arr[index];
  return this.arr&#91;index&#93;;
  }
  }
  set
  set
  {
  {
  this.arr[index]=value;
  this.arr&#91;index&#93;=value;
  }
  }
  }
  }
Line 85: Line 81:
** 역시나 override를 붙여서 구현해야 함.
** 역시나 override를 붙여서 구현해야 함.
* 생성자 위임 : C++ 스타일로(: 이용)
* 생성자 위임 : C++ 스타일로(: 이용)
==== 5. 클래스와 객체지향 Part.#3 ====
==== 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의 부분집합, 쓰기 전에 할당을 하지 않아도 됨(단, 반환 전에 할당 해야됨), 할당 전에는 다른 변수에서 참조 불가능
=== 그 외 ===
=== 그 외 ===
== 덧글 ==
== 덧글 ==
--------------------------------
--------------------------------
[[CS]]
[[CS]]

Latest revision as of 23:56, 26 March 2026

개요

  • 객체 지향에 조금 더 가깝게!

참가자

진행 시간

  • 수요일 19시 ~ 21시

진행 예정 내용

  • 다소 중요하다고 생각된 내용은 보라색 볼드(굵게) 처리하였습니다.
  • #4. 클래스와 객체지향 Part.#2 (5월 25일에서 이어서)
    • System.Object와 System.ValueType
    • 배열과 System.Array
    • enum 클래스 타입
    • enum과 Flag 특성
    • this 예약어와 base 예약어
    • 인덱서 구문
    • virtual 예약어와 가상 함수
    • 메서드 오버라이딩과 new 예약어를 통한 메서드 정의
    • 클래스 간의 형변환
    • 추상 메서드와 추상 클래스
  • #5. 클래스와 객체지향 Part.#3
    • 델리게이트(delegate)의 정의
    • 델리게이트의 특성, C#과 1급 함수
    • System.MulticastDelegate
    • 델리게이트 인스턴스와 산술 연산자
    • 콜백 메서드
    • 인터페이스, 추상 클래스와 인터페이스
    • 인터페이스의 구현
    • 구조체(Struct), 구조체와 클래스
    • 깊은 복사와 얕은 복사, PBV(CBV)와 PBR(CBR)
    • ref와 out 예약어를 통한 PBR
  • ~~역시 모두 진행 가능할 지는 진행해야 알 것 같습니다.~~
    • ~~될 리가 없었다. (?!)~~

진행

내용 요약

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의 부분집합, 쓰기 전에 할당을 하지 않아도 됨(단, 반환 전에 할당 해야됨), 할당 전에는 다른 변수에서 참조 불가능

그 외

덧글


CS