BLOG ARTICLE DEVELOP/C# | 26 ARTICLE FOUND

  1. 2006.10.11 14장 수업내용
  2. 2006.10.10 13장 수업내용
  3. 2006.10.09 12장 수업내용
  4. 2006.09.29 11장 수업내용
  5. 2006.09.28 10장 수업내용
  6. 2006.09.27 9장 수업내용
  7. 2006.09.26 8장 수업내용
  8. 2006.09.19 7장 수업내용
  9. 2006.09.15 4장 수업내용
  10. 2006.09.13 3장 수업내용
  11. 2006.09.11 C#시작하기

14장 수업내용

DEVELOP/C# 2006. 10. 11. 14:16
1
AND

13장 수업내용

DEVELOP/C# 2006. 10. 10. 14:46
List 제네릭
public class List<T>    // T:형매개변수
  -> ArrayList를 개선한것

특징
다양한 데이터형을 저장할 수 없다.
길이가 가변이다.
컴파일시 저장될 데이터형이 결정된다

생성방법
List<string> list1 = new List<string>();
List<int> list2 = new List<int>();

사용방법
List<int> list = new List<int>();
list.Add(10);
int value=list[0];//컴파일시 점검됨 형식이 다를시 에러


Queue 제네릭
FIFO
Enqueue ->     -> Dequeue
//특정형만 받음
queue<string> q = new queue<string>();
q.Enqueue("wish");
string data = q.Dequeue();

Stack 제네릭
LIFO
Push ->    -> Pop
Stack<string> s = new Stack<string>();
s.Push("wish");
string value = s.Pop();
AND

12장 수업내용

DEVELOP/C# 2006. 10. 9. 14:54
특성(attribute)
개념  컴파일후에도 살아있는 주석?
소스개발자가 향후 이용이 되는 곳(컴파일러 CLR .NET Framework Server)에서 사용방법은 미리 설명해 놓은것-> 런타임시 사용되는 주석

특성의 작성
(public) class [특성명]Attribute : Attribute {}
                                필수        필수 기본클래스를 상속받음

특성의 사용
[특성명(Attribute)](생성자 매개변수 리스트,[필드명/속성명]=[필드값/속성값],... )
                          생성자 매개변수 정보      필드 또는 속성값을 설정

특성의 사용위치
[AttributeUsage(특성 적용대상, AllowMultiple = (중복적용여부/true/false), Inherited = (특성상속여부/true/false))]
                      생성자에 대한 정보    속성값 설정 부분
AND

11장 수업내용

DEVELOP/C# 2006. 9. 29. 16:26
※예외처리
예외
실행도중 비정상적은 상황

예외발생
프로그램 다운(실행멈춤)

예외처리
프로그램이 예외를 처리해서 정상적인 실행이 되도록 하는 방법

예외처리방법
try{
//예외발생가능코드
} catch(발생예외 개체형 변수){
//예외처리코드
} finally{
//예외발생여부와는 상관없는 코드
}

예외의 종류
Exception <- 모든 예외의 최상위 클래스

발생된 예외별로 처리를 달리할 경우
try {
.... //A-Ex
.... //B-Ex
...}
catch (A-Ex e1) {....}
catch (B-Ex e2) {....}
catch (Exception e3) {....}  //이외의 모든 예외(default) //무조건 맨 아래에 와야한다.

예외 정보 얻기
catch (Exception e)
{
  string why = e.Message;//개발자용 에러정보다
  string trace = e.StackTrace;//사용자에게 제공하면
  string explain = e.ToString();}//코마루 하다
}

사용자정의 예외 만들기
Exception
     ↑
사용자 예외 클래스

예외발생
throw new [예외클래스명]("설명")
AND

10장 수업내용

DEVELOP/C# 2006. 9. 28. 14:31
※대리자(Delegate)
대리자란?
메소드를 대신해서 호출

코드 -> 대리자호출 -> 메소드호출
                           -> 메소드호출
                           -> 메소드호출

델리게이트의 선언
선언위치 : 네임스페이스,클래스
선언방법 : 메소드와 비슷
[접근지정자] delegate [반환형] [대리자명]([매개변수리스트]);
//반환형/매개변수리스트  <- 대리자가 호출할 수 있는 메소드의 모양?형식?


델리게이트가 호출할 수 있는 메소드
반환형과 메개변수리스트가 일치하는 메소드
ex1. delegate void del1();
-> void [메소드명](){....};
ex2. delegate string del2(string arg);
-> string [메소드명](string arg){....};

델리게이트의 메소드 등록
[델리게이트명] 변수 = [메소드명];
ex. delegate void Del1();
-> void Method1(){....};
-> De1 del = Method1;  //del이 Method1호출할 수 있다.
-> del += Method2; //del은 Method1~2를 호출할 수 있다.

델리게이트에 등록된 메소드 제거
del -= Method2; //제거


※이벤트(Event)

개념 : 사건의 발생
이벤트와 관련된 개체

이벤트 발생자  //  교실
       ↓
이벤트 수신자  //  소방서
       ↓
이벤트 처리자  //  소방차

C#에서 이벤트와 관련된 개체
이벤트 발생자 : 이벤트 델리게이트(대리자)를 실행하는 실행하는 개체
이벤트 수신자 : 이벤트 발생자가 실행하는 메소드를 가지고 있는 개체
이벤트 처리자 : 이벤트 수신자의 실행 메소드(이벤트 핸들러)

Ex
버튼  //  이벤트 발생자  : 이벤트 델리게이트 실행

폼  //  이벤트 수신자 : 이벤트 델리게이트가 실행할 메소드를 가지고 있다.

폼의 메소드  //  이벤트 처리자


이벤트 발생개체 코딩방법
이벤트를 선언
[접근제한자] event [델리게이트명] [이벤트명];
(델리게이트형의 필드를 정의하는 것)

이벤트 발생방법
->델리게이트의 실행방법과 동일
이벤트명(매개변수리스트);
ex. attackedEvent(매개변수리스트);

이벤트의 델리게이트형
[접근지정자] delegate void [대리자명](object sender, EventArgs args); //관례적
                                                     이벤트발생자 , 이벤트에 대한 정보 또는 자식개체(상속)

이벤트 수신자 코팅방법
이벤트 발생개체로부터 발생된 이벤트를 처리할 메소드를 등록 -> 델리게이트의 메소드 등록
이벤트명 = 메소드명1;
이벤트명 += 메소드명2;

이벤트 처리자 코딩방법
void [메소드명] (object obj, EventArgs args){....}
AND

9장 수업내용

DEVELOP/C# 2006. 9. 27. 15:51

속성(property)
필드와 속성의 관계
  속성은 은닉화된 필드값을 설정하고 있는 역할
  속성의 값은 필드값과 반드시 일치하지 않는다.
  속성은 필드값을 가공하고 값의 유효성을 체크할 수 있다.(데이터의 안정화)

속성의 작성법
    private int age;
    public int Age{  //대문자
      get{  [return문]  }  //읽기
       set{  age=values;  }  //쓰기
    }

속성 사용법
  읽기
   int x = 변수.Age; //get 블럭이 실행
  쓰기
   변수.Age = 10; //set 블럭이 실행


AND

8장 수업내용

DEVELOP/C# 2006. 9. 26. 15:27
배열(Array)
같은 데이터형을 index로 관리하는 참조형 개체
int [] values = new int[3];
스택
values값/값/값

모든 배열은  System.Array 클래스를 상속

배열에서 자주 사용되는 속성/메소드
Length:방의 갯수
Clear:초기화 (상수형:0/참조형:null)


???

배열값의 읽기 및 쓰기
배열명 [인덱스번호] = 값;
데이터형 변수 = 배열명 [인덱스번호];

배열의 선언
데이터형 []  배열명 = new 데이터형 [방개수];
데이터형 []  배열명 = new 데이터형 [] {...........};
데이터형 []  배열명 = {............};

데이터형 []  배열명;
배열명 = new 데이터형 [방개수];
배열명 = new 데이터형 [] {...........};
배열명 = {...........};//불가


Hashtable
특징
참조형 개체를 저장
크기가 자동적으로 조절
키로 개체를 관리
키값키값키값
개체개체개체

개체를 저장하는 방법
  변수.Add(object key, object value);
  변수[키값] = 개체;

개체를 삭제하는 방법
  변수.Remove(object key);
  변수.Clear();  //모든 개체를 삭제

개체를 찾는 방법
object obj = 변수[키값]
  //형변환
string value = (string) 변수[키값]
AND

7장 수업내용

DEVELOP/C# 2006. 9. 19. 14:50

NameSpace

목적
클래스 구조체 인터페이스 열거형등을 기능별로 묶어 관리하기 위해서
쉽게 찾기 위해서
소유회사에 대한 정보를 표시하기 위하여

작성법
네임스페이스명 {.....}

작명법
첫문자는 대문자가 관례
설계회사의 URL의 역방향으로 지어주는게 관례
http://www.samsung.com
com.samsung
       TV
               TV1.CS
               TV2.CS

멤버
네임스페이스명
{
  .....
  [타입정의형]
  열거형
   클래스
   구조체
   인터페이스
   대리자
   네임스페이스
  ....
}

계층표시
com{  //네임스페이스명
  samsung{  //네임스페이스명
....
  }
}

//동일표현으로..

com.samsung{
....
}

**시험문제 주관식
접근 제한자(액세스 한정자/Access Modifier)
(public/*internal) class 클래스명
{
  (public/internal/*private/protected) void Main()
  {
  ......
  }
}
//public : 모든 설계도상에서 사용가능
//internal : 한정자의 역할, 같은 어셈블리(프로젝트) 내에서만 사용가능
//private : 한정자의 역할, 해당 타입내에서만 사용가능

다른 솔루션의 개체를 사용하기 위해서는 참조에서 해당 폴더 bin의 솔루션명.exe파일을 추가하면 사용할 수 있다..


필드/메소드
종류
인스턴스/정적

인스턴스(필드/메소드):반드시 개체를 만들어서 사용해야함
(개체별로 따로 갖고 있음)
ex. Car myCar = new Car();
     myCar.Sound();
정적(static)(필드/메소드): 클래스 이름으로 사용해야함
(데이터 영역에 한번 만들어짐)
ex. Console.WriteLine();
    클래스명.정적메소드



상수와 읽기 전용필드
공통점
값이 할당되면 변경할 수 없다.

차이점
초기값 할당위치가 다르다
상수는 값형 스트링만 가능
읽기전용필드는 값형 모든 참조형 가능
접근방식이 다르다
(상수:클래스명.상수명)
(읽필:참조변수.필드명)

상수의선언
클래스의 멤버/지역변수도 선언가능
[접근제한자] const [데이터형/값형,스트링] 상수명 = 값;


정적(필드/메소드)의 특징
static키워드가 붙는다.
클래스명으로 사용
공유의 의미가 있다.상수와 읽기 전용필드
공통점
값이 할당되면 변경할 수 없다.

차이점
초기값 할당위치가 다르다
상수는 값형 스트링만 가능
읽기전용필드는 값형 모든 참조형 가능
접근방식이 다르다
(상수:클래스명.상수명)
(읽필:참조변수.필드명)

상수의선언
클래스의 멤버/지역변수도 선언가능
[접근제한자] const [데이터형/값형,스트링] 상수명 = 값;

읽기전용필드
클래스의 멤버로만 쓰임
[접근제한자] readonly [데이터형/값형,참조형] 필드명(=값/생략가능);
생성자에서 초기화 될 수 있다.
  생성자(){필드명=값;}

코드영역데이터영역스택영역힙영역
기계어 명령정적데이터,Console.WriteLine지역변수(값형,참조형)Car개체 Sound()

오버라이딩
  상속일 경우에만 사용
  자식(파생) 클래스에서 부모(기본)클래스의 멤버를 재정의
  오버라이딩의 방법 2가지
    new 한정자 : 부모 클래스의 모든 멤버(상수/필드/속성/인덱서/메소드)를 재정의
    override 한정자 : 부모 클래스의 abstract, virtual 메소드만 재정의
  new 한정자
  부모에서는 그냥 선언 public void [Method] {....}
  자식에서 (new) public (new) void [Method] {....}

  부모 변수 = new 부모();
   변수.메소드();

  자식 변수 = new 자식();
  변수.메소드();

** 부모 변수 = new 자식();  //예외
  변수.메소드();

virtual한정자와 override한정자 
//virtual : 파생클래스가 재정의 하지 않을 경우, 기본클래스의 원래멤버가 호출되도록 함
//override : 한정자는 부모멤버가 virtual, override로 정의 된 경우 자식 멤버 정의시 사용
public virtual void [method] {....}

public override void [method] {....}


추상클래스

클래스의 종류(p116)

일반 클래스 : 상속, 개체생성, 실행(Main()이 있을경우)
추상 클래스 : 상속-파생클래스를 무조건 만들어서 사용

추상클래스는
구체적인 설계도가 아니라 파생 클래스가 가져야 될 멤버(필드/속성/인덱스/메소드)를 정의하는 클래스

추상클래스(개념적 부모)//실제내용이 없음

파생클래스(구체적인 자식)//실제내용이 있음

추상클래스 작성법
abstract class [클래스명] {....}
클래스명 변수 = new 생성();//이런식으로 생성할 수 없다.
//오로지 상속받아서만 사용

추상클래스의 멤버
  상수/필드/인덱서/속성
  생성자/소멸자
  연산자 오버로딩
  메소드
+ 추상메소드

추상 메소드(abstract method)
  정의만 있고 실행내용이 없는 메소드
  abstract 반환형 메소드명(매개변수 리스트); //{} <- 내용이 없다

추상메소드를 갖는 클래스는 추상클래스(abstract class ..)여야만 한다.



인터페이스(interface)
개념
나  -  리모콘  -  테레비
//리모콘을 통해서 테레비를 조정
//리모콘=사용설명서

//택배박스위의 송장

//개체의 사용방법을 설명한 것


개발자  -  설명서  -   컴파일된 클래스
             M1,M2       M1{.....},M2{....}
                         -> //구현

인터페이스의 필요성
다양한 개체를 통일된 방법으로 사용하고자 할 경우 인터페이스를 사용
ex. 통합리모콘으로 TV,audio,VTR조종

인터페이스의 작성법
namespace [네임스페이스명]
{
  (접근제한자) interface 설명서이름
  {
  속성/인덱서/메소드/이벤트
  }
}
메소드 정의
public (접근제한자 불가) [변환형] [메소드명](매개변수리스트);


구현 클래스 작성법
(접근제한자) class [클래스명] : (부모클래스 or (인터페이스1,인터페이스2...))
{.....}//인터페이스에서 선언한것은 꼭 구현해야함

구현 클래스 사용법

구현클래스 변수 = new 구현 클래스 생성자();
//변수.M1();,변수.M2();,변수.M3();,변수.M4();

인터페이스1 변수 = new 구현클래스 생성자();
//변수.M1();,변수.M2();

인터페이스2 변수 = new 구현클래스 생성자();
//변수.M3();,변수.M4();

인터페이스의 상속

interface [인터페이스명] : [기본 인터페이스명 1],[기본 인터페이스명 2]...//인터페이스만 다중상속 가능
{
  //M1,M2가 정의되어있으므로
  M3();
  M4();
}


구조체
설계도 클래스(참조형)  -  개체(힙)
         구조체(값형)  -  개체(스택)

구조체의 작성법
namespace [네임스페이스명]
{
  (접근지정자) struct [구조체명]
  {
  상수/필드..../메소드.../
  }
}
주의사항
기본생성자는 명시적으로 작성불가(컴파일러가 무조건 만들기 때문에..)
인스턴스 필드가 있을 경우 필드 선언시 초기화를 할 수 없다.
  private string name;
인스턴스 필드 개수만큼 매개변수를 갖는 생성자가 반드시 있다.
소멸자는 없다.
다른 구조체를 상속 못함(그러나 인터페이스는 구현 가능)
//다른 구조체 포함은 가능??

구조체를 써야하는 이유
없다. 다만 유리할 경우가 있을뿐이다.

메소드 내부에서 많은 객체를 생성하고 사용할 경우
이 객체를 구조체로 만들면 좋다.
-> 개체를 힙에 만들면 참조변수관리
-> 힙에 사용되지 않는 개체를 없애는 시간이 필요(쓰레기수집자)

하지 말아야할것
-> 구조체를 다른 변수에 할당하지마라
  구조체 S1 = new 구조체();
  구조체 S2 = S1; //Deep Copy가 이루어짐
  //이런경우는 클래스를 이용해서 참조하는것이 더 빠름

메소드의 매개변수값?? 사용하지 마라.
  구조체 S1 = new 구조체();
  M1(S1);//통째로 복사되므로 지양해야함

AND

4장 수업내용

DEVELOP/C# 2006. 9. 15. 14:37

값비교
< > == !=
문자열비교(스트링형은 참조형이지만 예외)
== !=
주소번지비교(참조형의 경우)
== !=

if (x>3 & y<10)  =>  거짓 & (?) => 거짓
if (x>3 && y<10)  =>  거짓 && (?) => 거짓  <=  더빠름

if (x>3 | y<10)  =>  참 | (?) => 참
if (x>3 || y<10)  =>  참 || (?) => 참  <=  더빠름

한개짜리는 비트연산도 가능하므로 나름 유용

AND

3장 수업내용

DEVELOP/C# 2006. 9. 13. 16:50
Object   <-모든개체
|
Value Type
|
Int32






클래스명|
인터페이스명|
배열명| 변수= 개체
델리게이트명|
클래스명|


object      변수      =      개체;
(클래스)(참조형변수)
string      변수      =      개체;

int32      변수      =      개체;
(구조체)


console.writeline의 비밀
int a=100;
console.writeline(a.tostring());  //100이 아니라 자동으로 "100"으로 찍음..
console.writeline(a.tostring());  //"100"
a는 개체



형변환
자동 형변환이 되는 경우
값형
(큰 사이즈 데이터형 = 작은 사이즈 데이터형) & (호환가능형)

참조형
부모 클래스형 = 자식 클래스형

수동 형변환
값형
작은 사이즈 데이타형 = (작은 데이터형) 큰 사이즈 데이터형
0 1 2 3
x x x O
로 취하므로 값 손실이 생길 수 있다.
int i = f (x)
int i = (int) f (O)

참조형
자식 설계도형 = (자식설계도) 부모 설계도형
                                         자식설계도로부터 생성된 개체만??
  A
/\
B  C

B b = new B();
A a = b;
B c = (B)a;//(O)   //C c = (C)a;//(X)


System.Int32 - 메소드 - parse(string)
public static int parse(string) //static이 있으면 개체생성없이도 사용가능
※static이 붙은 메소드 호출방법
클래스명|
구조체명|.메소드명(...)
int x = int32.parse("300");
      = int.parse("300");



0+100=100
null+100=null

AND

C#시작하기

DEVELOP/C# 2006. 9. 11. 17:49
  • 기능1  // <-[namespace]
    ~~.CS
    ~~.CS
  • 기능2
    ~~.CS
    ~~.CS

using [namespace];  //기능을 불러옴
class hello
{
public static void Main()
{
Console.WriteLine("Hello, C# !");  //Console <-설계도명 // WriteLine <-메소드명
}
}


MSDN에서 설계도찾기

0
0



       Console.WriteLine("{0,-3}+{1,-3}={2,-3}", 99, 1, 100);  //기본
       Console.WriteLine("{0,-3}+{1,-3}={2,-3}", 100, 100, 200); //3자리정렬
       Console.WriteLine("{0,-3:f}+{1,-3:f}={2,-3:f}", 100, 100, 200); //3자리정렬//소수점2자리도 표현
AND