BLOG ARTICLE DEVELOP | 84 ARTICLE FOUND

  1. 2006.10.31 24장 수업내용 (컴퍼넌트 프로그래밍)
  2. 2006.10.25 23장 수업내용
  3. 2006.10.20 22장 수업내용 (쓰레드)
  4. 2006.10.13 16장 수업내용
  5. 2006.10.11 14장 수업내용
  6. 2006.10.10 13장 수업내용
  7. 2006.10.09 12장 수업내용
  8. 2006.09.29 11장 수업내용
  9. 2006.09.28 10장 수업내용
  10. 2006.09.27 9장 수업내용
  11. 2006.09.26 8장 수업내용
  12. 2006.09.20 SWIG란?
  13. 2006.09.19 7장 수업내용
  14. 2006.09.15 4장 수업내용
  15. 2006.09.13 3장 수업내용

※컴퍼넌트
1) 컴퍼넌트란(component)
끼워서 사용할 수 있는 클래스(개체)를 뜻함 = 재사용 가능한 소프트 웨어

2) 컴퍼넌트들만 따로 만들어서 ~.DLL(어셈블리)파일로 만들어서
다른 소프트웨어에서 사용할 수 있도록 제작할 수 있다.
AND

23장 수업내용

DEVELOP/C# 2006. 10. 25. 15:15
TCP/IP를 이용한 네트워킹 개요



※MVC 패턴(Model - View - Control)//(전송용)데이터(두 프로세스간의 데이터를 전달하기 위한 개체)/보여줄부분(폼)/흐름제어(스트림을 통해서 요구되는 처리를 Action 개체에 전달하는 개체)
M
C



V



->LoginAction.CS
(개체사용)
->
클라이언트->콘트롤러(요청종류검사)
(요청을 처리할 Action개체)
->SendMsgAction.CS  ->
(개체사용)
->View(Form)



->~Action.CS
(개체사용)


AND

※프로세스(Process)
1개의 응용프로그램 실행 인스턴스()
쓰레드
쓰레드

※쓰레드(Thread)
1개의 프로세스내에서 실행되는 흐름(작업)
class MultiMediaPlayer
{
   public static void Main()
   {
       기본 쓰레드
           동영상실행
           소리실행
   }
}


※쓰레드의 실행원리
※쓰레드 생성
System.Threading 네임스페이스
   └→Thread 클래스
             └→┌Thread(Thread Start)*
                   └Thread(Parameterd Thread Start)*

delegate void ThreadStart(???);
ThreadStart ts = new ThreadStart(메소드명);//C#2.0
                    = new ThreadStart(new ThreadStart(메소드명));//C#1.0
                    = 메소드;

쓰레드 실행
Start(); : Thread Start 대리자를 통해 실행
Start(Object o); Parametered ThreadStart 대리자를 통해 실행

정리(시작->실행)
class MultiMediaPlayer
{
   public static void Main()
   {
       내용//그냥 실행시 여기서 대기하게됨
       Thread t1 = new Thread(mp3player);
       t1.Start();
       Thread t2 = new Thread(Animation);
       t2.Start();
   }
   public void mp3Player()//t1
   {
   }
   public void Animation()//t2
   {
   }
}

윈도우 프로그램에서 쓰레드 작업
   기본 쓰레드(=생성자 쓰레드)
       역할:(폼을 생성한다//컨트롤을 생성) + (이벤트를 처리)

   작업자 쓰레드
       역할컨트롤의 상태를 변경시키는 역할
정상적이지 않은 케이스
따라서 새로운 쓰레드는 메세지큐를 통해 처리
작업자는 Enqueue
기본은 Dequeue



Lock는 값형은 불가, 참조형만 가능
//값을 포함한 개체를 잠가서 처리
AND

16장 수업내용

DEVELOP/C# 2006. 10. 13. 15:53

※Stream(스트림)
개념
데이터의 흐름

스트림의 요소
출발지  ========>  목적지
(출력스트림)(입력스트림)
Write Stream|Read Stream

양방향 흐름
출발지  ========>  목적지
목적지  <========  출발지

스트림 클래스
StreamWriter : 출력스트림
StreamReader : 입력스트림

출발지  ========>  목적지
simpleNote -> document.txt
StreamWriter sw = new StreamWriter("저장경로");
sw.writer("저장할 내용");

목적지  <========  출발지
simpleNote <- document.txt
StreamReader sw = new StreamReader("읽기경로");
sw.ReadToEnd();

AND

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

SWIG란?

DEVELOP/C++ 2006. 9. 20. 14:12

SWIG 란 C/C++ 의 코드를 다른언어에서 사용가능하도록 만들어주는 프로그램이다.

SWIG란 프로그램을 사용함으로써 기존 C/C++ 코드를 새로운 언어로 포팅할 필요가

없으며 속도에 민감한 프로그래밍을 할때 유용하다. 그리고 마지막으로 Perl 같은

스크립트 언어 작성시 코드를 감추면서 프로그래밍을 할수 있다는 장점이 있다.

지원운영체제및 언어는 아래와 같다.


Tcl 8.0 and newer versions.

Python 1.5 and newer.

Perl 5.003 or newer.

Guile 1.3.4 and newer.

Java JDK 1.1 and newer.

Ruby.

Mzscheme.

PHP

Objective Caml (Ocaml)

Support for C# and the Chicken scheme


Unix

Microsoft Windows

Macintosh


최종 현재 1.3.29 까지 나왔다.


* SWIG 홈페이지 Http://www.swig.org

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