namespace : 성격이나 하는 일이 비슷한 클래스 , 구조체 , 인터페이스 , ...

31
NameSpace: 성성성성 성성 성성 성성성 성성성 , 성성성 , 성성성성성 , 성성성성성 , 성성 성성 성성 성성성 성성성성 성성 성성 성성 Class: 성성성성성 성성성성 성성성성 , 성성성성 성성성성 성성성성 성성 (Method) 성성 성성성성 성성 (//, /*~*/): 성성성성 성성성성 성성 Main 성성성 :1.C# 성성 성성성성성성성성 windows 성성 성성성성성 성성성 2. 성성성성성성성 성성성성 성성 성성 성성성성 성성성 3. 성성성성 성 성 성 4. 성성성성 성성성 성성성 성성 5. 성성 -X 6.public-X namespace 성성성성성성 _ 성성 { 성성성 , 성성성 , 성성성성성 성성 .. } class Test { static void Main(string[] args) { Console.WriteLine(args.Length); } }

Upload: tryna

Post on 23-Feb-2016

124 views

Category:

Documents


0 download

DESCRIPTION

NameSpace : 성격이나 하는 일이 비슷한 클래스 , 구조체 , 인터페이스 , 델리게이트 , 열거 형식 등을 하나의 이름아래 묶는 일을 한다 Class : 프로그램을 구성하는 기본단위 , 데이터와 데이터를 처리하는 기능 (Method) 으로 이루어짐 주석 (//, /*~*/) : 코드안에 기록하는 메모 Main 메소드 :1.C# 콘솔 응용프로그램이나 windows 응용 프로그램의 진입점 2. 응용프로그램이 시작할떄 제일 처음 호출되는 메소드 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

NameSpace: 성격이나 하는 일이 비슷한 클래스 , 구조체 , 인터페이스 , 델리게이트 , 열거 형식 등을 하나의 이름아래 묶는 일을 한다

Class: 프로그램을 구성하는 기본단위 , 데이터와 데이터를 처리하는 기능 (Method) 으로 이루어짐주석 (//, /*~*/): 코드안에 기록하는 메모Main 메소드 :1.C# 콘솔 응용프로그램이나 windows 응용 프로그램의 진입점 2. 응용프로그램이 시작할떄 제일 처음 호출되는 메소드 3. 진입점은 단 한 개 4. 클래스나 구조체 내부에 존재 5. 정적 -X 6.public-X

namespace 네임스페이스 _ 이름{ 클래스 , 구조체 , 인터페이스 등등 ..}

class Test{    static void Main(string[] args)    {       Console.WriteLine(args.Length);    }}

Page 2: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

변수 (Variable): 컴퓨터의 메모리로부터 할당받은 공간을 의미 수치나 문자 등과 같은 데이터를 저장하는 용도로 사용데이터형 _ 이름 변수 _ 이름 ;int num=100;

데이터 형식은 값 형식 (value types) 이거나 참조 형식 (reference types) 이다값 형식 (value types): 변수가 값을 담는 데이터 형식참조 형식 (reference types): 변수가 값 대신 값이 있는 곳의 위치를 담는 데이터 형식기본 데이터 형식 (privitive types): 어떤 데이터 타입이던지 컴파일러가 직접 지원해주는 데이터 타입1. 정수 계열 형식 (integral types): 정수 데이터를 담기 위해 사용(ex: byte, short, int, long 등등 ..)2. 부동 소수점 형식 (Floating Point Types): 부동 소수점 상수를 나타내기위해 사용되는 형식 (ex: float, double)3.decimal 형식 : 실수를 다루는 데이터 형식 , 부동 소수점과는 다른 방식 , 정밀도가 높음(ex: decimal)4. 문자 형식 : 하나의 문자를 다루는 데이터 형식 (ex: char)5. 문자열 형식 : 여러 개의 문자를 다루는 데이터 형식 (ex: string)6. 논리 형식 (boolean Types): 참 (true), 거짓 (false) 으로 이루어지는 형식7.object 형식 :object 란 객체를 말하는 것으로 어떤 물건이든지 다룰 수 있는 데이터 형식

Page 3: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

형식 변환 (type Conversion): 변수를 다른 데이터 형식의 변수에 옮겨 담는것Byte a = 2;Int b = (int)a;

상수 (constants): 값을 바꾸는 것이 불가능한 변수const int a = 3;const 자료형 상수명 = 값 ;열거 형식 : 여러 개의 상수를 정리enum test {yes, no, ok}Eunm 열거형식명 : 기반자료형 { 상수 1, 상수 2, 상수 3,………}

Nullable 형식 : 변수에게 할당된 메모리 공간을 비움데이터형식 ? 변수이름 ;int? a = null;

var: 데이터 형식을 알아서 파악하는 컴파일러var a = 3; // a 는 int 형식var b = “hello”; // b 는 string 형식

Page 4: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

연산자 : 프로그램의 논리식이나 산술식을 표현하고 처리하기 위해 제공되는 다양한 기호분류 연산자산술연산자 +, -, *, /, %증가 / 감소 연산자 ++, --관계 연산자 <, >, ==, !=, <=, >=조건 연산자 ?:논리 연산자 &&, ll, !비트 연산자 <<, >>, &, l, ^, ~할당 연산자 =,+=, -=, *=, /=, %=, &= ……..

산술 연산자 : 수치 형식의 데이터를 다루는 연산자int result 15 / 3;

증가 / 감소 연산자 : 피연산자의 값을 1 증가시키거나 1 감소시키는 연산자- 전위 증가 / 감소 연산자 : 변수의 앞에 위치시켜 사용- 후위 증가 / 감소 연산자 : 변수의 뒤에 위치시켜 사용int a = 10; int a = 10;a++ //a 는 10 Console.WriteLine(a++); // 11 을 출력 , 출력 후 a 는 11로증가 a-- //a 는 11 Console.WriteLine(++a); // 12 을 출력

Page 5: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

관계 연산자 : 두 피연산자 사이의 관계를 확인하는 연산자Result = 3 > 4; // 거짓Result = 3 < 4; // 참논리 연산자 : 참과 거짓으로 이루어지는 진리값이 피연산자인 연산Int a=3; bool c = a < b && b < 5; // c 는 trueInt b=4; bool c = a > b && b < 5; // c 는 false

조건 연산자 : 조건의 결과가 참 혹은 거짓중 하나일 떄 사용하는 연산자int a = 30;string result = a == 30 ? “ 삼십” : “ 삼십 아님” // result 는 “삼십”비트 연산자 : 두 개의 비트를 대입 했을때 각각의 비트 연산 즉 이진화로 구현해서 연산Int a = 10; int a = 10; int b = 2;Int b = a>>2; int c = a^b;

할당 연산자 : 변수 또는 상수에 피연산자 데이터를 할당하는 기능int a = 100;a += 90; // a=a+90 a 는 즉 190

Page 6: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

If, else 그리고 else if하나의 조건을 판단하여 , 참 또는 거짓을 가진다좀더 다양한 조건식을 사용하기 위해 else if 문을 사용한다 if 와 else 는 식에서 딱 한번만 쓸수 있으므로 else if 를 통해 조건을 더 추가 해준다

if 문의 조건을 검사하여 만족 하면 뒤의 코드가 실행 만족 하지 않으면 else if 문으로 넘어가 같은 실행을 반복한다else if 문에도 만족하는 경우가 없을 경우 최종 else 로 넘어와뒤의 코드를 실행하고 끝이 나게 된다 .

int number = 10;

if(number < 0) Console.WriteLine(“ 음수” );

else if (number > 0) Console.WriteLine(“ 양수” );

else Console.WriteLine(“0”);

Page 7: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

switch (number){ case 1 : Console.WriteLine(“ 하나” ); break; case 2 : Console.WriteLine(“ 둘” ); break; case 3 : Console.WriteLine(“ 셋” ); break; default: Console.WriteLine(“ 없음” ); break;}

Switch 문 조건식의 결과가 가질 수 있는 다양한 경우를 한번에 평가하고 프로그램의 흐름을 가를 떄 사용

number 라는 변수의 값에 따라 case 별로 있는 곳에 해당 하는 곳 의 코드를 실행하게된다코드가 실행되고 난 후는 break 를 통해 switch 문을 나가게 된다 그러나 case 에서 해당하는 경우가 없을 경우 최종 default 문으로가 해당 코드를 실행하고 break 문을 만나 빠져 나감

Page 8: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

int a = 10;

while(a > 0) Console.WriteLine(a);

while조건식이 참인 동안 코드를 반복 실행

a 값이 10 이고 a 가 0 보다 크다는 조건에 만족하기 때문에 a 가 출력이 된다

int a = 10;do{ Console.WriteLine(a); }while(a<0);

do while

while 문과 유사한 반복문 , 하지만 do while은 코드를 무조건 한번 실행 수 조건식을 평가한다

a 의 값이 10 이고 우선은 조건에 상관없이a 가 한번 출력하게 되고 그 다음 while 문의 조건을 판별 후 a 가 0 보다 작다는 조건이 성립되지 않으므로 do while 문이 끝나게 된다

Page 9: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

for(int i = 0; i < 5; i++){ Console.WriteLine(“*”); }

for 문while 문 보다 반복을 더 정교하게 제어 할 수 있다 . For 문은 초기화식 , 조건식 , 반복식 으로 이루어 진다

i 의 값이 0 이고 조건식이 5 보다 작을때 까지 이고 실행을 할때 마다 i 값이 증가하므로 총 5번의 * 모양을 출력하게 된다

int[] arr = new int[]{0, 1, 2, 3, 4};

foreach (int a in arr){ Console.WriteLine(a);}

foreach 문배열을 순회하며 각 데이터 요소에 차례대로 접근하게 해준다arr 의 배열을 선언후 foreach 문을 통해 a라는 변수에 arr 의 배열 내용을 읽어온다 그리고 a 를 출력하게 되면 arr 의 배열 값들이 출력 되게 된다

Page 10: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

int i = 0;while(i >= 0){ if(i==10) break; i++;}

break 문현재 실행 중인 반복문을 중단하고자 할 때 사용i 는 0 으로부터 시작하게 되고 while 문이 실행되면서 i 가 1 씩 증가하다가 10 이 될경우에 if문의 break 를 만나 반복문 이 끝나게 된다

for(int I = 0; I < 5; i++){ if(I == 3) continue; Console.WriteLine(i);}

continue 문한 회 건너 뛰어 반복을 계속 수행하게 하는 기능

i 가 3 인 경우 현재 실행 중인 즉 3 의 값은 출력하지 않고 반복을 건너 뛴다

goto jump; Console.WriteLine(“2”); Console.WriteLine(“3”);jump: Console.WriteLine(“4”);

Goto 문레이블이 가리키는 곳으로 점프시키는 문2 와 3 을 출력하는 문을 뛰어 넘어 바로 4 를 출력하는 코드로 이동한다

Page 11: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

Class Calculator{ public static int plus(int a, int b) { Console.WriteLIne(“input : {0}, {1}”, a, b,); int result = a + b; return result; }}

메소드 (Method): 객체의 일을 처리하는 방법 또는 방식반환 (return): 결과를 돌려주는것매개변수 (parameter): 몇 개의 변수 사이에 함수관계를 정하기 위해서 사용되는 또 다른 하나의 변수1. 값에 의한 전달 (Call by value): 데이터를 복사해서 매개 변수에 넘기는 것2. 참조에 의한 전달 (Call by reference): 매개 변수가 메소드에 넘겨진 원본 변수를 직접 참조 (ex: ref)

3.out 에 의한 참조 : out 키워드를 사용하면 호출하는 쪽의 인수를 초기화 할 필요가 없다 (ex: out)

Page 12: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

------ 메소드 오버로딩 -------int plus (int a, int b){ return a + b;}double plus (double a, double b){ return a + b;}

------ 가변길이 매개 변수 -----int sum( params int[] args)

------ 명명된 매개 변수 ------static void printprofile(string name, string phone){Console.WriteLine(“Name:{0}, Phone:{1}”,name,phone);}static void Main(string[] args){printprofile(name: “ 박 찬 호 ” , phone:”010-123-1234”):}

------ 선택적 매개 변수 ------Void MyMethod(int a = 0, int b = 0){ Console.WriteLine(“{0}, {1}”, a, b);}MyMethod(3);MyMethod(3, 4);

메소드 오버로딩 : 하나의 메소드 이름에 여러 개의 구현을 올리는 것가변길이 매개 변수 :params 키워드와 배열을 이용해서 선언 , 매개 변수의 개수가 유연하게 변할 수 있는 매개 변수를 말한다 .

명명된 매개 변수 : 메소드를 호출할 때 매개 변수의 이름에 근거해서 데이터를 할당할 수 있는 기능선택적 매개 변수 : 매개 변수는 특정 값으로 초기화하듯 메소드를 선언할수 있다필요한 경우에는 데이터 할당을 할 수도 있다기본값을 가지는 매개 변수는 필요에 따라 데이터를 할당하거나 할당하지 않을 수 있기 때문에 이를 선택적 매개 변수라고 부른다

Page 13: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

class cat{ public cat(string _Name, string _Color){ Name=_Name; Color=_Color; }}

~cat(){ Console.WriteLine(“{0} : 잘가” , Name);} 객체생성cat kitty = new cat(“ 키티” , “ 하얀색” );

객체 : 모든 주관이나 주체의 작용 대상이되는것생성자 : 클래스의 이름과 동일한 이름을 가지며 객체를 생성하는 역할소멸자 : 클래스 이름 앞에 ~ 기호를 붙인다 , 객체 파기 함수의 개념

생성자소멸자

class employee{ private string name;

public void setname(string name) { this.name = name; }

}

this 키워드 : 객체가 자신을 지칭할 때 사용하는 키워드객체 내부에서는 자신의 필드나 메소드에 접근할 때 this 키워드를 사용한다는 것

Page 14: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

접근 한정자 설명public 클래스의 내부 / 외부 모든 곳에서 접근할수 있다 .protected 클래스의 외부에서는 접근할 수 없지만 , 파생클래스에서는 접근이

가능하다 .private 클래스의 내부에서만 접근할 수 있다 파생클래스에서도 접근이

불가능하다 .internal 같은 어셈블리에 있는 코드에 대해서만 public 으로 접근 할 수 있다 .

다른 어셈블리에 있는 코드에서는 private 와 같은 수준의 접근성을 가진다 .

protected inter-nal

같은 어셈블리에 있는 코드에 대해서만 protected 로 접근할 수 있다 . 다른 어셈블리에 있는 코드에서는 private 와 같은 수준의 접근성을 가진다 .

접근 한정자 : 감추고 싶은 것은 감추고 보여 주고 싶은 것은 보여 줄수 있도록 코드를 수식

상속 : 기존의 클래스를 재사용해서 새로운 클래스를 만드는것class base{ class derived : Base{ public base(){ public derived(){ Console.WriteLine(“base()”); Console.WriteLine(“deriver()”); } }} }

Page 15: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

메소드 오버라이딩 : 상위 클래스를 상속 받은 하위 클래스에서 상위 클래스에 정의된 메소드를 재정의 하는 것 , 오버라이딩을 하기 위해서는 메소드가 virtual 키워드로 한정 되어 있어야 한다 .

class ArmorSuite{ class IronMan : ArmorSuite{ public virtual void initialize(){ public override void initialize(){ Console.WriteLine(“armored”); Console.WriteLine(“Repulsor Rays Armed”); } }} }

메소드 숨기기 : 기반 클래스에서 구현된 버전의 메소드를 감추고 파생 클래스에서 구현된 버전만을 보여주는 것 파생클래스의 메소드를 new 한정자로 수식메소드 봉인 : 메소드 앞에 sealed 키워드를 붙여줌으로써 메소드를 봉인할수 있다 봉인한 메소드는 오버라이딩을 할 수 없다 .

중첩클래스 : 클래스 안에 클래스를 선언 하는것 .1. 클래스 외부에 공개하고 싶지 않은 형식을 만들고자 할 때2. 현재의 클래스의 일부분처럼 표현할 수 있는 클래스를 만들고자 할 떄 사용분할클래스 : 여러 번에 나눠서 구현하는 클래스를 말한다 , 클래스의 구현이 길어질 경우 여러 파일에 나눠서 구현하게 함으로써 소스 코드 관리의 편의를 제공하는 데에 그 의미가 있다 .

Page 16: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

namespace 네임스페이스 이름{ public static class 클래스 이름 { public static 반환형식 메소드이름 (this 대상형식 식별자 , 매개 _ 변수 _ 목록 ){ // } }}

확장메소드 : 기존 클래스의 기능을 확장하는 기법

구조체 : 다른 종류의 데이터를 하나로 묶어서 사용 하는 데이터 결합법

struct mystruct{ public int myfield1 public int myfield2 public void mymethod(){ // }}

Page 17: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

interface 인터페이스이름{ 반환형식 메소드이름 1( 매개변수 ); 반환형식 메소드이름 2( 매개변수 ); //……}

interface Logger{ void WriteLog(string log);}

인터페이스1. 뼈대만 가진 클래스 .2. 공용적으로 사용할 메소드 , 속성 등을 기술 .3. 아무 기능도 하지 않는 클래스 .4. 인터페이스 내에서는 필드 – X.5. 메소드는 만들수 있지만 , 코드가 없다 .6. 인터페이스는 상속도 가능 , 다중 상속도 가능 .7. 상속 받은 인터페이스의 멤버를 모두 구현하지 않으면 에러가 발생한다 .

abstract class 클래스이름{ // 클래스와 동일하게 구현}

abstract class AbstractBase{ public abstract void Somemethod();}

추상클래스1. 몸체 없는 함수를 하나라도 포함하는 클래스 .2. 상속 받는 객체들의 행동을 표준화한다 .3. 상속 관계에서의 일반 클래스 부모 위치한다 .4. 몸체 없는 함수를 포함하고 있지 않아도 클래스를 선언할때 abstract 포함 .5. 추상 클래스는 객체를 생성 할 수 없다 .6. 추상 함수는 자동으로 가상함수 .7. 부분 구현이 가능하다 .

추상메소드1. 몸체 없는 함수 .2. 프로토타입만 가지고 있다 .3. 구현부 – X / 시그니처만 갖는다 .4. 파생 클래스에서 반드시 구현하여야 한다 .

Page 18: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

class Myclass{ private int myfield; public int myfield{ get{ return myfield; } set{ myfield = value; } }}

프로퍼티 :get{…} 와 set{…} 을 사용 , get 접근자는 필드로 부터 값을 읽어 온다 , set 접근자는 필드에 값을 할당한다 .

public class namecard{public string name{ get; set; }}

자동 구현 프로퍼티 : 필드를 읽고 쓰기만 하는 아무 논리도 섞여 있지 않은 경우 , 코드를 더 단순하게 만드는 프로퍼티 방식 , get 과 set 접근자 뒤에 세미콜론 (;) 만 붙이면 된다 .

birth b = new birth(){ name = “ 나” birthday = new dt(1991, 6, 28)};

프로퍼티를 이용한 초기화 : 객체를 생성할때 목록에 객체의 모든 프로퍼티가 올 필요 없이 초기화 하고 싶은 프로퍼티만 넣어서 초기화 하면 된다 .

var myin = new{name=“ 박 상 현 ” , age=“17”};

무명형식 : 형식의 선언과 동시에 인스턴스를 할당 , 주의할 점은 무명 형식의 프로퍼티에 할당된 값은 변경 불가interface iname{ abstract class prod-uct{ string name{ abstract public date{ get; set; get; set;} }} }

인터페이스의 프로퍼티 : 인터페이스안은 틀만 ,상속받은 클래스에서 get,set 구현을 한다추상클래스의 프로퍼티 : 파생클래스에서 추상 프로퍼티를 재정의 하여야 한다 .

Page 19: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

배열 : 동일한 타입의 자료를 묶음으로 처리할 떄 유용한 자료구조데이터형식 [] 배열이름 = new 데이터형식 [ 용량 ]; int[] array = new int[5];int[] array = new int[3]{1,2,3};int[] array = new int[]{1,2,3};int[] array ={1, 2, 3};

배열의 초기화 방법1. 배열의 용량 명시 뒤의 중괄호에 데이터를 입력2. 배열의 용량 명시 생략 뒤의 중괄호에 데이터를 입력3.new, 형식 , 괄호 , 배열의 용량 모두 생략 , 블록사이에 배열의 각원소에 할당할 데이터를 입력

int[ , ] arr = new int[2, 3]{ {1, 2, 3}, {4, 5, 6} };

2 차원배열 :( 세로 + 가로 ) 으로 원소를 배치하는 2 차원 배열이다 , 배열을 선언과 동시에 초기화하는 방법은 위의 초기화 방법과 동일 하다

다차원배열 : 차원이 둘 이상인 배열을 말한다 , 2 차원 배열도 다차원 배열에 해당한다 , 선언하는 문법은 2차원 배열과 같다 다만 차원이 늘어 날수록 요소에 접근할 때 사용하는 인덱스의 수가 증가하는 점만 다르다 .

int[ , ,] array = new int[2, 3 ,2]{ {1,2}, {3,4}, {5,6} {1,4}, {2,5}, {3,6} };가변배열 : 다양한 차원과 크기를 가질수 있도록 구조화 할 수 있다 .int[ ] [ ] jaggged = new int [3] [ ];jagged[0] = new int[5] {1,2,3,4,5};jagged[1] = new int[]{10,20,30};jagged[2] = new int[]{100, 200};

Page 20: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

컬렉션 : 같은 성격을 띠는 데이터의 모음을 담는 자료 구조ArrayList list = new ArrayList();list.add(10);list.add(20);

ArrayList: 크기에 필요에 따라 동적으로 생성되는 배열

Queue que = new Queue();que.enqueue(1);que.enqueue(2);

Queue:FIFO 의 방식으로 작업을 차례대로 입력해 뒀다가 순서대로 하나씩 꺼내 처리하기 위해 사용

Stack stack = new Stack();stack.push(1);stack.push(2);

Stack:LIFO 의 방식으로 나중에 들어온 데이터가 먼저나가는 자료구조Hashtable ht = new Hashtable();ht[“book”] = “ 책” ;ht[“cook”] = “ 요리사” ;

Hashtable: 키와 값의 쌍으로 이루어진 데이터를 다룰 때 사용하는 구조인덱서 : 객체를 배열처럼 사용할 수 있게 하는 닷넷 언어적 기능 메소드의 일종으로 , 클래스안에 배열이나 컬렉션과 같이 복합 값이 있을 경우 유용하게 사용 , 인덱서는 this 키워드를 통해 구현한다 .

int[] array = new int[5];public int this[int index]{ get{ return array[index]; } set{ array[i]=value; }}

foreach 가 가능한 객체 만들기 : foreach 구문은 Ienumerable 와 Ienumerator 를 상속하는 형식만 지원한다 즉 이 인터페이스를 상속하면 foreach 문을 사용하여 순회할수 있다 .

Page 21: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

일반화 프로그래밍 : 타입 인수를 사용하여 일반화된 클래스나 메소드를 정의하는 기법void copyArray( T[ ] source, T[ ] target){ for(int i = 0; i < source.Length; i++) 데이터 형식이 사용된 부분을 T 기호로 치환 targer[i] = source[i];}

일반화 메소드 : 일반화한 메소드 , 구체적인 형식의 이름 대신 형식 매개 변수가 들어간다

일반화 클래스 : 일반화한 클래스 , 형식 매개 변수가 있는 클래스class Array_Generic< T >{ private T[] array; public T GetElement(int index) { return array[index]; }}형식 매개 변수 제약 : 특정 조건을 갖춘 형식에만 대응하는 형식 매개 변수

Class List<T> where T : struct{ //}

제약 설명where T : struct T 는 값 형식where T : class T 는 참조 형식where T : new() T 는 매개 변수가 없는 생성자가 있어야 함where T : 인터페이스_ 이름

T 는 명시한 인터페이스를 반드시 구현해야 한다 , 여러 개의 인터페이스를 명시할 수도 있다 .

where T : U T 는 또 다른 형식 매개 변수 U 로부터 상속받은 클래스 여야 한다 .

where T : 기반 _클래스 _ 이름

T 는 명시한 기반 클래스의 파생클래스여야 한다 .

Page 22: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

일반화 컬렉션 : 앞에서 소개한 컬렉션의 종류에 일반화 한것으로 일반화의 사용으로 형식의 안정성 , 명료한 코드 , 수행성능의 향상을 기대 할 수 있다 .

List<int> list = new Lint<int>(); List<T>: 비일반화 클래스인 ArrayList 와 같은 기능 ,인스턴스를 만들 때 형식 매개 변수를 필요로 하고 형식 매개 변수로 입력한 형식 외에는 입력을 허용하지 않는다 .

Queue<int> que = new Queue<int>();

Queue<T>: 형식 매개 변수를 요구하는 점을 제외한 비일반화 클래스인 Queue 와 동일

Stack<int> stack = new Stack<int>();

Stack<T>: 형식 매개 변수를 요구하는 점을 제회안 비일반화 클래스인 Stack 와 동일

Dictionary<string, string>dic = new Dictionary<string, string>();

Dictionary<Tkey, Tvalue>: 형식 매개 변수를 두개를 요구한다 , Hashtable 의 일반화 버전

foreach 를 사용할 수 있는 일반화 클래스 :앞서 말한 foreach 문을 사용하는 클래스를 만들기 위해 IEnumerator 와 IEnumerable 를 일반화 버전인 IEnumerator<T> 와 IEnumerable<T> 이 두 인터페이스를 상속 받으면 된다 .

Page 23: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

예외 : 프로그래머가 생각하는 시나리오에서 벗어나는 사건예외처리 : 예외가 프로그램의 오류나 다운으로 이어지지 않도록 적절하게 처리하는 것static void something(int arg){try{ int (arg < 10) Console.WriteLine(“arg : {0}”, arg); else throw new Exception(“arg 가 10 보다 큼” ); } catch(Exception e){ Console.WriteLine(“ 예외발생 :{0}”, e.Mes-sage); } finally{ Console.WriteLine(“ 프로그램 종료” ); } }}

try~catch 문 :try 절에서 실행 하고자 했던 코드를 처리하다가 예외가 발생하면 catch 블록이 받아낸다 , catch 블록은 여러 개를 둘 수 있다 .

예외던지기 :throw 문을 이용해서 예외를 넘겨준다 .예외던지기finally:try~catch 문의 제일 마지막에 연결해서 사용 , finally 절은 어떤 경우에라도 실행이 된다 .

Class InvalidArgumentExcrption : Exception{ public Invalid ArgumentException(){ } public Invalid ArgumentException(string message) : base(message){ } ////////////////////}

사용자 정의 예외 클래스 :

모든 예외 객체는 Sys-tem.Exception 클래스로부터 파생되어야 한다 즉 , Exception 클래스를 상속하기만 하면 새로운 예외 클래스를 만들수 있다 .

Page 24: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

델리게이트 : 메소드를 가르키는 참조형 , 메소드의 번지를 저장하거나 다른 메소드의 인수로 메소드 자체를 전달하고 싶을때 사용namespace Delegate{ class MainApp{ delegate int MyDelegate(int a, int b); static void Main(string[] args){ class Calculator{ Calculator c = new Calculator(); public int plus(int a, int b){ MyDelegate Callback; return a+b; Callback = new MyDelegate(c.plus); } Console.WriteLine( Callback(3, 4) ); } } } } plus() 호출 Callback 호출 호출시도

메소드 델리게이트 호출자

실행 및 실행 결과델리게이트를 이용하여 콜백을 구현하는 과정1. 델리게이트를 선언한다 .2. 델리게이트의 인스턴스를 생성한다 . 인스턴스를 생성할 때는 델리게이트가 참조할 메소드를 매개 변수로 넘긴다 .3. 델리게이트를 호출한다 .

Page 25: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

일반화 델리게이트 : 일반화 메소드를 참조할 수 있도록 형식 매개 변수를 이용하여 선언하는 델리게이트delegate int Compare<T>(T a, T, b); delegate 키워드만 빼면 일반화 메소드의 선언과 같다

static void BubbleSort<T>( T[ ] DataSet, Compare<T> Comparer){ int i, j =0; T temp; for (i = 0; i < DataSet.Length – 1; i++){ ///////////////

델리게이트 체인 : 여러 개의 콜백을 동시에 호출해야 할 때 사용 +,=, 연산자나 Delegate.Combine() 메소드를 이용해 만든다 , 특정 델리게이트를 끊어낼때는 -,= 을 사용하거나 , Delegate.Remove() 메소드를 이용하는 방법이있다 .

delegate void Fire(string location); Fire f = new Fire(call119); void call119(string location){///} f += new Fire(shotout);void shotout(string location){///} f += new Fire(escape);void escape(string location){///}

Page 26: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

익명 메소드 : 내용을 정확히 알 수 없어도 메소드의 역할을 할 수 있도록 해 주는 간결성의 장점을 살린 개념의 메소드 , 익명 메소드는 자신을 참조할 델리게이트의 형식과 동일한 형식으로 선언 .delegate int Calculate(int a , int b);

Public static void Main(){ Calculate Calc; 이름을 제외한 메소드의 구현 ( 익명 메소드 부분 ) Calc =

Calc 를 호출하면 이 코드를 실행한다 . Console.WriteLine(“3 + 4 : {0}”, Calc(3, 4)); }

deledate (int a , int b){return a + b;}

이벤트 : 어떤 사건이 발생 했을 때 호출 되어야 하는 메소드의 목록 이벤트에 의해 호출되는 메소드를 특별히 이벤트 핸들러라고 부른다 . 이벤트는 public 한정자로 선언되어도 클래스 외부에서는 호출이 불가능 , 하지만 델리 게이트의 이벤트는 public,internal 로 수식되어 있으면 클래스 외부에서도 호출이 가능 델리게이트선언class mytest{ void value(){ public delegate void test() ;’ //value ->0 public event test t ; } public void stop(){ mytest mt = new mytest(); if(t != null){ mt.t += value; t(); mt.stop(); } 이벤트를 연결}

델리게이트를 이용한 event 의 인스턴스 생성

Page 27: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

람다식 : 익명 함수식이라고 불리며 , 델리게이트 함수 , 이벤트 함수 , 특정 추상 클래스 함수에서 쓰인다 .

매개 _ 변수 _ 목록 => 식delegate int Calculate(int a, int b); 익명 메소드를 만들려면 델리게이트 필요//...static void Main(string[] args){Calculate clac = (int a, int b) => a+b; 두 개의 int 형식 매개변수를 받아 둘을 더해} 반환하는 익명 메소드를 람다식으로 만듬C# 컴파일러는 형식 유추라는 기능을 제공한다 .delegate int Calculate(int a, int b);////Static void Main(string[] args){calculate calc = (a, b) => a + b; c# 컴파일러는 이 람다식이 만드는 익명 메소드의 } 매개 변수의 형식을 유추해 낸다 .문 형식의 람다식 : => 연산자의 오른편에 식 대신 중괄호로 둘러싸인 코드블록이 위치( 매개 _ 변수 _ 목록 ) => { Dosomething DoIt = ( ) => { 문장 1; Console.WriteLine(“1”); 문장 2; Console.WriteLine(“2”); 문장 3; ////// }; 문장 형식의 람다식은 중괄호로 둘러 } 싼다 .Func 델리게이트 : 일종의 일반화를 적용한 대리자 , 람다식과 같이 많이 쓰임public delegate TResult Func<out TResult>()public delegate TResult Func<in T, out TResult>(T arg) //////////////////////////////Public delegate TResult Func<in T1, in T2, in T3, ….. Out TResult>(T1 arg1, T2 arg2….T16 arg16)

.NET Framework 에 는 모 두 17 가 지 버전의 Func 델리게이트가 준비되어 있다 .

Page 28: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

Func 델리게이트의 형식 매개 변수 중 가장 마지막에 있는 것이 반환 형식이다 .

Func<int> func1 = () => 10; // 입력 매개 변수 없음 , 무조건 10 을 반환Func<int, int> func2 = (x) => x*2; // 입력 매개 변수는 int 형식 하나 반환 형식도 intConsole.WriteLine(func2(3);) // 6 을 출력Action 델리게이트 : Func 델리게이트와 거의 유사 , 차이점은 반환 형식이 없다는 것Action<int> act2 = (x) => result = x * x; // 람다식 밖에서 선언한 result 에 x*x 의 결과를 저장Action<double, double> act3 = (x, y) =>{ double pi = x / y ; Console.WriteLine(“Action<T1, T2>({0}, {1}) : {2}”, x, y, pi);};act3(22.0, 7.0); // 매개 변수가 두개인 Action 의 사용식 트리 :● 트리로 표현한 자료 구조 , 한 부모 노드가 단 두 개만의 자식 노드를 가질 수 있는 이진트리● 연산자는 부모노드가 되며 피연산자는 자식 노드가 된다 .

● 컴파일러나 인터프리터를 제작하는 데에도 응용된다 .

● 식 트리는 코드를 “데이터”로써 보관할 수 있다 .

● 데이터베이스 처리를 위한 식 트리는 LINQ 에서 사용 된다 .

Page 29: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

링크 (LINQ):Language Integrated Query 의 약어로 C# 언어에 통합된 데이터 질의기능질의 (Query)=From: 어떤 데이터 집합에서 찾을 것인가 ? Where: 어떤 값의 데이터를 찾을 것인가 ? Select: 어떤 항목을 추출할 것인가 ?Profile[ ] arrProfile={ var profiles=from profile in arrprofile new Profile() { Name=“ 정우성“ , Height=186}, where profile.Height < 175 new Profile() { Name=“ 김태희“ , Height=158}, orderby profile.Height new Profile() { Name=“ 고현정“ , Height=172}, select profile; new Profile() { Name=“ 이문세“ , Height=178}, new Profile() { Name=“ 하동훈“ , Height=171}}; from: LINQ 쿼리식의 시작 , 데이터 원본과 데이터 원본 안에 들어있는 각 요소 데이터를 범위 변수에 지정 , from 의 데이터 원본은 IEnumerable<T> 인터페이스를 상속하는 형식만 사용 .

where: 필터 역할을 하는 연산자 , 데이터 원본으로부터 뽑아낸 범위 변수가 가져야 하는 조건 .

orderby: 데이터의 정렬을 수행하는 연산자 , 기본적으로 오름차순으로 정렬한다 .

select : 최종 결과를 추출하는 쿼리식의 마침표와 같은 역할 , LINQ 질의 결과는 IEnumerable<T> 로 반환되는데 이 때 형식 매개 변수 T 는 select 문에 의해 결정 된다 , 또한 무명 형식을 이용해서 새로운 형식을 즉석에서 만들어 낼수도 있다 .

여러 개의 데이터 원본 접근 :from 문을 중첩해서 사용하면 된다 .

Var classes from c in arrClass 첫 번째 데이터 원본 from s in c.Score where s < 60 두 번째 데이터 원본 select new { c.Name, Lowest = s};

Page 30: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

group by: 데이터를 분류 기준에 따라 데이터를 그룹화 해주는 기능group A by B into C , A 에는 from 절에서 뽑아낸 범위 변수 , B 에는 분류 기준 , C 에는 그룹 변수Profile[ ] arrProfile ={ var listprofile = from profile in arrProfile new Profile() { Name=“ 정우성“ , Height=186}, group profile by profile.Height < 175 into g new Profile() { Name=“ 김태희“ , Height=158}, select new { GroupKey = g.Key, Pro-files = g }; new Profile() { Name=“ 고현정“ , Height=172}};그룹 변수 g 에는 Height 값이 175 미만인 객체의 컬렉션과 175 이상인 객체의 컬렉션이 입력 된다 . select 의 무명 형식은 컬렉션의 컬렉션이 되고 무명 형식의 Profiles 필드는 바로 이 그룹 변수 g 를 담게 된다 .내부 조인 (Inner Join): 첫 번째 데이터 원본의 데이터를 기준으로 해서 이 데이터의 특정 필드와 두 번째 데이터 원본이 갖고 있는 각 데이터의 특정 필드를 비교해서 일치하는 데이터들만 반환 .From a in A from 절에서 뽑아낸 범위 변수 aJoin b in B on a.XXXX equals b.YYYY join 이라는 내부 조인 절을 통해 b 라는 연결 대상 데 터를 뽑고 on 절의 조건은 오직 동등 (Equality) 만 허용 외부 조인 (Outer Join): 내부 조인과 비슷하지만 조인 결과에 기준이 되는 데이터 원본은 모두 다 포함 된다( 기준이 되는 데이터 원본의 모든 데이터를 조인 결과게 넣는다 , 연결할 데이터 원본에 기준 데이터 원본의 데이터와 일치하는 데이터가 없다면 그 부분은 빈 값으로 결과를 채운다 .From profile in arrProfileJoin product in arrProduct on profile.Name equals product.Star into psFrom product in ps.DefaultIfEmpty(new Product(){Title=“ 그런거 없음“ })

Join 절을 이용해서 조인을 수행한 후 그 결과를 임시 컬렉션에 저장 , 이 임시 컬렉션에 대해 Default-IfEmpty 연산을 수행해서 비어 있는 조인 결과에 빈값을 채워 넣음

Page 31: NameSpace : 성격이나 하는 일이 비슷한 클래스 ,  구조체 ,  인터페이스 ,  델리게이트 ,  열거 형식 등을 하나의 이름아래 묶는 일을 한다

Where(), OrderBy(), Select() 등의 메소드는 IEnumerable<T> 의 확장 메소드이기 때문에 이들을 사용하려면 System.Linq 네임스페이스를 사용하도록 선언을 해야한다 .C# 의 쿼리식에서 지원하는 LINQ 연산 메소드

종류 메소드 이름 설명 C# 쿼리식 문법

정렬OrderBy 오름차순으로 값을 정렬 orderby

OrderByDescending 내림차순으로 값을 정렬 orderby…descendingThenBy 오름차순으로 2 차 정렬 orderby …, …

ThenByDescending 내림차순으로 2 차 정렬 orderby…, … descending

필터링 Where 필터링할 조건을 평가하는 함수를 통과하는 값들만 추출

where

데이터추출

Select 값을 추출하여 시퀀스를 만듬 SelectSelectMany 여러 개의 데이터 원본으로부터 값을 추출하여

하나의 시퀀스를 만듬 여러 개의 from 절을 사용데이터

결합Join 공통 특성을 가진 서로 다른 두 개의 데이터

소스의 객체를 연결 , 공통 특성을 키로 삼아 키가 일치하는 두 객체를 쌍으로 추출

join… in… on…equals…

GroupJoin Join 연산자와 같은 일을 하되 조인 결과를 그룹으로 만들어 넣음

join… in… on…Equals… into…

데이터그룹화

GroupBy 공통된 특성을 공유하는 요소들을 각 그룹으로 묶음

Group … by 또는Group … by … into …

형식 변환

Cast 컬렉션의 요소들을 특정 형식으로 변환 범위 변수를 선언할 때 명시적으로 형식을 지정 하면 됨 from profile profile in ar-rprofile