■ 콘솔 어플리케이션 vs. 윈도우 어플리케이션

1. 콘솔 어플리케이션

메인 함수에서 시작해 실행 후 메인함수로 돌아와 종료.

즉, 프로그래머가 결정해 둔 순서대로 실행 됨.

 

2. 윈도우 어플리케이션

메시지를 받아서 처리. 사용자가 클릭하는 이벤트에 따라 함수 실행. 함수의 진행순서라는 개념이 없어지므로,

함수가 순서대로 실행된다는 관점을 버려야 함.

 

→ 함수의 호출순서가 큰 의미가 없다.

→ 반드시 함수의 존재가 호출되지는 않는다.

→ 콘솔의 경우 프로그램의 실행이 끝날때까지 프로그램이 제어권을 가지고 있으나,

윈도우의 경우 응용프로그램과 운영체제 간 계속해서 제어권을 주고 받는다.

제어권을 제 시간에 넘겨주지 못하는 경우 발생하는 것이 '응답없음'.

 

■ 윈도우 프로그래밍을 위해서는,

1. 리소스(그림파일+메뉴, 소리 등) 다루기

2. Boiler Plate(개발도구에서 기본적으로 제공해주는 코드) 이해

3. 사용자 정의된 함수를 조직화 시킬줄 알아야 함

 

■ API(Application Programming Interface)란?

운영체제가 응용 프로그램을 위해 제공하는 함수의 집합

 

응용프로그램 → 운영체제 → 하드웨어

 

운영체제: 응용프로그램과 하드웨어 사이에서, 응용 프로그램을 대신하여 하드웨어와 메모리 관리

응용프로그램을 만드는 프로그래머들은 운영체제의 표준규칙에 따라 프로그램을 만들고 하드웨어에 액세스할 수 있도록 해야한다.

이를 위해, 운영 체제는 기본적인 동작을 위한 함수의 집합을 응용 프로그램에게 제공하며,

응용 프로그램 개발자들은 운영체제가 제공하는 함수들을 사용한다.

이러한 응용 프로그램을 위한 함수 집합을 API라고 한다.

 

윈도우즈에서 제공하는 API를 윈도우즈 API라고 하지만, 요즘은 일반적으로 API라고 하면 윈도우즈 API를 일컫는다.

비슷한 말로 SDK(Software Development Kit)라는 표현이 사용되기도 한다.

 

cf.)

□ 이벤트 처리기: 버튼을 눌렀을 때 실행되는 함수(버튼에 반응하는 함수)

□ 진입점 함수의 호출 주체는 항상 운영체제

□ 정적라이브러리(.lib): 실행 시켰을 때 실행파일과 같이 메모리에 로드되어 있음

□ 동적라이브러리(.dll): 호출 시점에 메모리에 올라갔다 끝나면 내려옴


'PROGRAMMING > winAPI' 카테고리의 다른 글

[0317수업] struct SCROLLINFO  (0) 2011.03.17
DC(Device Contexts)  (0) 2011.03.17
핸들(handle)  (0) 2011.03.17
[0316수업] WndProc()함수 분석  (0) 2011.03.16
[0315수업] WinMain(), WndProc()  (0) 2011.03.15
Posted by 마마필로 :

Properties

2011. 3. 13. 00:51 from PROGRAMMING/C#.NET

■ Properties(속성)

private한 field의 값을 읽고, 쓰고, 연산할 수 있도록 하는 유연한 메카니즘을 제공하는 멤버.

public data 멤버처럼 사용될 수 있으며, 실은, 접근자(accessors)라고 불리는 특별한 메서드 이다.

Properties는 데이타가 쉽게 접근할 수 있게 하고, 메서드의 안정성과 유연성을 높여준다.

 

■ Properties Overview

1. 코드의 구현이나 확인을 숨긴상태에서, 클래스가 값(values)을 가져오고(getting) 설정하는(setting)을 공개적인 것으로 드러낼 수 있다.

2. Get property accessor는 property value을 리턴하는 데 사용되고, set accessor는 new value을 할당하는데 사용된다.

이러한 접근자는 다른 접근 레벨을 가진다.

3.value 키워드는 set accessor에 의해 할당된 값을 정의한다.

4. set accessor가 구현되지 않은 properties는 읽기 전용(read only)이다.

5.  지정된 접근자 코드(custom accossor code)를 요구하지 않는 간단한 properties를 위해,

자동으로 구현된 프로퍼티(auto-implemented properties)를 사용하는 것을 생각해 볼 수 있다.

 

■ Using Properties

형식

지정자 타입 이름

{

       get { return ; }

       set { 변경; }

}

 

데이터 멤버 대신 프로퍼티를 쓰는 이유

 

캡슐화(=정보의 은닉)를 위해

객체지향언어는 캡슐화를 특징으로 함. 일반 변수를 private으로 선언하여 외부로부터 접근을 막고 public으로 된 프로퍼티를 선언하여 객체를 보호할 수 있음.


 

See Also

Properties (C# Programming Guide) in msdn

Using Properties (C# Programming Guide) in msdn

'PROGRAMMING > C#.NET' 카테고리의 다른 글

Constructor and Destructor  (0) 2011.03.12
static and instance  (0) 2011.03.11
chap.3 타입 2. 참조 타입  (0) 2011.03.08
chap.3 타입 1.값 타입  (0) 2011.03.08
[0304과제] 연산자 종류(C, C#)  (0) 2011.03.06
Posted by 마마필로 :

■  생성자(Constructor)

객체지향프로그래밍(OOP: objective-oriented programming)에서 쓰이는 객체 초기화 함수.

(네이버 용어사전 참고)

 

■ 생성자를 쓰는 이유(생성자의 역할)

1. 필드 내 정보 보호

→ 캡슐화의 원칙상 필드는 가급적이면 숨기는 것이 좋다.

→ 중요한 필드가 외부로 공개되어 있으면 아무나 정보를 건드릴 수 있어 안전하지 못하다.

→ 따라서 객체는 적당한 수준의 정보은폐를 스스로 해야 한다.

 

2. 객체(클래스의 필드) 초기화

→ 객체가 스스로를 초기화 하지 않음

→ 필드 유효화를 위해 필드에 값 대입 필요

→  Main에서 직접 초기화 하지 않고 생성자를 통해 초기화 가능

 

■ 생성자 사용 규칙

1. 생성자 메서드의 이름은 클래스 이름과 동일해야 한다.

2. 객체의 성질은 public과 static 두가지 사용 가능. 한 개의 클래스에 생성자가 두 개 같이 들어갈 일은 거의 없고, 주로 한개만 사용한다.

3. 사용자가 호출하는 것이 아니므로 리턴할 수 없다. void같은 리턴 타입도 적을 필요 없다.

4. 생성자가 있으면 반드시 인수값을 전달해야 한다.

5. 한 클래스 내에 여러 개의 생성자를 정의 할 수 있다.

6. 한 클래스 내에 정의된, 각 생성자가 요구하는 인수가 다르므로 오버로딩 가능하다.

7. 생성자끼리 호출 가능 하다(호출 문법: :this (인수)). 생성자끼리의 호출로 반복되는 코드 작성을 피할수 있다.

 

■  생성자 호출시기

객체 생성 시에 자동으로 호출

정적생성자(static constructor) → 정적인 멤버가 호출 되는 순간

인스턴스 생성자(public constructor) → 인스턴스 객체가 선언되는 순간. 생성자 호출한 후 객체 만듬.

 

 

■ 소멸자(Destructor)

객체지향프로그래밍(OOP: objective-oriented programmin)에서 쓰이는 객체 파기 함수.

 

[!] 문법적으로 만들어져 있으나 닷넷에서는 가비지 컬렉터(Garbage Collector)에 의해 자원이 관리되므로 소멸자를 쓸일이 거의 없다.

 

■ 파괴하고자 하는 클래스 이름 앞에 ~ 기호를 붙인다.

 

 

See Also

Constructors (C# Proganmming Guide)

Destructors (C# Programming Guide)

IDisposable Interface

how to use constructor (basic)

'PROGRAMMING > C#.NET' 카테고리의 다른 글

Properties  (0) 2011.03.13
static and instance  (0) 2011.03.11
chap.3 타입 2. 참조 타입  (0) 2011.03.08
chap.3 타입 1.값 타입  (0) 2011.03.08
[0304과제] 연산자 종류(C, C#)  (0) 2011.03.06
Posted by 마마필로 :

static and instance

2011. 3. 11. 00:49 from PROGRAMMING/C#.NET

■ 클래스나 필드에 static을 썼을때와 쓰지 않았을 때, 데이터 접근 방법에 차이가 생긴다.

 

■ 클래스의 멤버(혹은 구조체 멤버)에 접근 할 수 있는 방법은,

 1. 정적인(static) 방법(다이렉트로 데이터에 접근 가능)과

 2. 인스턴스(instance, =객체)를 생성해 놓은 후 접근하는 것이 있다.

 

즉, 바로 데이터에 접근하고 싶다면 static 키워드 사용, static을 사용하지 않았다면 인스턴스로 접근 가능하다.

 

static과 instance 접근에 있어 클래스와 구조체 멤버의 차이

using System;

//클래스
public class Product
{
    public static string ModelName; // 상품명 저장 공간-static 사용
    public int UnitPrice;  // 단가-static 사용하지 않음
}

//구조체
public struct Customer
{
    public static string Name; //고객명-static 사용
    public int Age; // 나이-static 사용하지 않음
}

//실행영역
public class Program
    {
        public static void Main(string[] args)
        {
            // Product 클래스의 필드(멤버 변수)를 사용하고자 할때,
            Product.ModelName = "컴퓨터"; //정적(static) 접근
            Product pro = new Product(); // 인스턴스(Instance, 객체) 생성
            pro.UnitPrice = 1000; //객체를 통해 UnitPrice에 접근 가능
            Console.WriteLine("모델명 : {0}, 가격 : {1}", Product.ModelName, pro.UnitPrice);
           
            //Customer 구조체의 멤버에 접근하고자 할때,
            Customer.Name = "홍길동"; //정적(static) 접근
            Customer cust; // 구조체형 변수 선언으로 접근 가능-구조체는 값 타입 므로
            cust.Age = 21;
            Console.WriteLine("고객명 : {0}, 나이 : {1}", Customer.Name, cust.Age);
        }
    }

'PROGRAMMING > C#.NET' 카테고리의 다른 글

Properties  (0) 2011.03.13
Constructor and Destructor  (0) 2011.03.12
chap.3 타입 2. 참조 타입  (0) 2011.03.08
chap.3 타입 1.값 타입  (0) 2011.03.08
[0304과제] 연산자 종류(C, C#)  (0) 2011.03.06
Posted by 마마필로 :

2. 참조 타입

2.1 배열         2.2 문자열         2.3 클래스



2.1 배열 : 동일한 타입의 변수들을 하나의 이름으로 묶어 놓은 것

■ 형식

 

  타입 [] 변수명;

 

int[] arScore;            // 1차원 정수 배열

double[] arRate;        // 1차원 실수 배열

int[,] arSung;            // 2차원 정수 배열

string[,,] arName;      // 3차원 문자열 배열

: []안에 아무것도 없으면 1차원 배열, 배열의 차수는 []안의 콤마수 +1

 

■ 배열 할당

배열형 변수 선언 후, 배열 요소를 저장하기 위한 메모리 할당 필요

(모든 참조형은 new연산자로 실제 메모리를 할당받아야 함)

arScore = new int[5];        // new int 다음에 하나의 크기 지정, 정수형 변수 5개 저장 가능

arSung = new int[2,3];      // new int 뒤에 행과 열을 콤마로 구분하여 지정, 정수 변수를 3개씩2묶음(총6개) 저장가능

 

int [] arScore = new int[5];    // 선언문과 할당문을 한 줄로 쓸수 있음 

 

■ 배열의 초기값

힙에 할당된 배열 요소는 디폴트 값으로 초기화(디폴트 값:  각 타입의 가장 무난한 값. 정수는 0, 논리형은 false, 참조형은 null)

 

int [] arScore = new int[5] { 1, 2, 3, 4, 5 }     // { }안에 초기값 나열 가능

int [] arScore = new int[] { 1, 2, 3, 4, 5 }      // 크기 5 생략 가능. 컴파일러가 개수를 세어 보고 배열의 크기 자동으로 결정

int [] arScore = { 1, 2, 3, 4, 5 }            // 초기값 리스트가 있는 경우 new 연산자 빼고 초기값 리스트만 나열 가능

 

1) 배열의 초기값은 최초할당 할 때 딱 한번 지정 가능. 할당 후 변경 불가

2) 재초기화 시에는 값을 일일이 대입해야 함

 

string[,] arCity = {

{"서울", "용인", "수원", "의정부"},

{"춘천", "홍천", "평창", "양구"},

{"대전", "합덕", "논산", "당진"},

};        // 2차원 배열의 초기화, 각 행의 초기값 개수는 일치해야 함

 

■ 배열 요소의 참조

[]안에 읽고자 하는 요소의 첨자를 적는다. 상수, 변수 다 가능. 첨자는 0부터 시작하며, 최대 첨자는 배열 크기보다 1 작다.

배열에서 유효한 첨자는 0 ~ N-1.

 

using System;

namespace ex0309
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] ar;            //정수형 배열 선언
            ar = new int[5];    //크기 5로 할당
            for (int i = 0; i < 5; i++)
            {
                ar[i] = i * 2;
            }
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine(ar[i]);
            }
        }
    }
}


■ 배열의 메서드

System.Array 클래스로부터 상속받음.

 

'PROGRAMMING > C#.NET' 카테고리의 다른 글

Constructor and Destructor  (0) 2011.03.12
static and instance  (0) 2011.03.11
chap.3 타입 1.값 타입  (0) 2011.03.08
[0304과제] 연산자 종류(C, C#)  (0) 2011.03.06
[0304과제] 자료형(type)의 종류  (0) 2011.03.06
Posted by 마마필로 :

1. 값 타입

1.1 타입의 종류        1.2 내장형        1.3 열거형        1.4 구조체



■ 타입(Type) : 변수의 형식

■ CTS(Common Type System, 공용 타입 체계): CTS는 타입이 어떻게 선언되고, 사용되고, 다루어 지는지를 정의한다. 모든 닷넷용 언어들이 모두 공통의 타입 체계를 따르기 때문에 닷넷 언어끼리는 타입이 호환되어 혼합 프로그래밍이 가능해진다.

 

<CTS의 타입과 언어별 별칭>

 

■ 타입의 분류

1)

이미지출처: http://www.hanb.co.kr/network/view.html?bi_id=151

 

2)

 

■ 닷넷의 타입(CTS가 정의하는 모든 타입)은 단순한 예약어가 아니라 클래스이거나 구조체여서 타입 자체가 필드와 메서드, 프로퍼티들을 가진다.

 

■ 구조체: 타입이 다른 변수들의 집합. 구조체는 값타입이므로 선언되는 동시에 사용 가능. 사용자 정의형(열거 멤버나 필드, 메서드를 정의할 수 있음)

 

<기본형식>

Struct    이름

{

멤버 선언문;

}

 

<예제>

using System;

class CSTest

{

static void Main()

{

Book b;    // Book 타입의 구조체 변수 b 선언

b.Name = "노점상으로 떼돈벌기";        // b의 Name필드 초기화

b.Price = "10000"                              // b의 Price 필드 초기화

// 연산자(=)를 이용하여 구조체의 멤버 액세스

Console.WriteLine("책 제목 : " {0}, 가격 : {1}", b.Name, b.Price);      // 초기화된 구조체 내용 출력

}

}

 

struct Book                                //Book 구조체 선언

{

public string Name;        // Book 구조체의 필드-문자열형(string) 제목(Name)

public int Price;            // Book 구조체의 필드-정수형(int) 가격(Price)

}

 

1) 구조체 멤버의 디폴트 액세스 지정은 private, 외부 공개 멤버들은 반드시 public 액세스 지정

2) 구조체는 기반클래스로 사용할 수 없음. 즉, 구조체로부터 다른 구조체나 클래스를 파생시킬 수 없음

3) 구조체 선언이 Main보다 뒤쪽에 와도 상관없음

4) 구조체는 값 타입이므로 선언후 곧바로 사용 가능. 하지만 클래스(참조 타입)와 사용 방법을 통일하기 위해 new연산자를 쓸 수 있음

 

<new 연산자-통일성, 생성자 호출 위해 사용>

using System;

class CSTest

{

static void Main()

{

Book b = new Book("노점상으로 떼돈벌기", 10000);    //new연산자로 생성자 호출, 구조체 선언과 동시에 초기화 가능

b.OutBook();

}

}

 

struct Book

{

public string Name;

public int Price;

public Book(string aName, int aPrice)    //생성자 정의(제목과 가격을 인수로 받아 자신의 멤버를 초기화 함)

//생성자는 구조체의 타입면과 동일한 이름을 가져야 하며 결과를 리턴할 수 없다.

{

Name = aName;

Price = aPrice;

}

public void OutBook()

{

Console.writeLine("책 제목 : {0}, 가격 : {1}", Name, Price);

}

}

'PROGRAMMING > C#.NET' 카테고리의 다른 글

static and instance  (0) 2011.03.11
chap.3 타입 2. 참조 타입  (0) 2011.03.08
[0304과제] 연산자 종류(C, C#)  (0) 2011.03.06
[0304과제] 자료형(type)의 종류  (0) 2011.03.06
[0221과제] 수퍼팩(C#)  (0) 2011.02.23
Posted by 마마필로 :

1. C의 연산자 종류

 

 

2. C#의 연산자 종류

 

 

'PROGRAMMING > C#.NET' 카테고리의 다른 글

chap.3 타입 2. 참조 타입  (0) 2011.03.08
chap.3 타입 1.값 타입  (0) 2011.03.08
[0304과제] 자료형(type)의 종류  (0) 2011.03.06
[0221과제] 수퍼팩(C#)  (0) 2011.02.23
chap.10 닷넷 클래스  (0) 2011.02.22
Posted by 마마필로 :

■ CTS의 타입과 자료형(type)의 종류

'PROGRAMMING > C#.NET' 카테고리의 다른 글

chap.3 타입 1.값 타입  (0) 2011.03.08
[0304과제] 연산자 종류(C, C#)  (0) 2011.03.06
[0221과제] 수퍼팩(C#)  (0) 2011.02.23
chap.10 닷넷 클래스  (0) 2011.02.22
chap.9 델리게이트  (0) 2011.02.21
Posted by 마마필로 :

1. for문     2. 다중 for문     3. while문     4. do-while문     5. continue문

 



1.for 문

■ 형식 : for(초기식; 종료식; 증감식)

         {

문장-1;

문장-2;

......

문장-n;

문장;

          }

■ 실행 순서 : 초기식 → 종료식에서 조건확인 → 조건이 만족할 경우, 문장 수행 → 증감식 → 종료식에서 조건확인 → 문장수행 → 증감식...

■ 특징

-문장의 수행은, 초기식 수행 후 종료식의 조건을 검사하여 참인 경우 지정된 문장을 수행하고 증감식을 수행

-증감식의 단위는 자유롭게 할 수 잇으며, 문자 처리, 수식 처리 및 기하학적인 증감도 가능

-필요 없으면 하나 이상의 수식 생략 가능

-매개변수는 루프 내에서 변화할 수 있으며, 초기식은 초기화 과정이 아니어도 됨

 ex)

for (i=3; i<30; i+=3) statement;

for (c='a'; c<='z'; c++) statement;

 

2. 다중 for문

: for문 안에 다른 for 문을 포함한 문

ex) 구구단 프로그램

 

 

3. while문

■ 형식 :  while(조건) { statement;}

조건을 먼저 확인 후, 조건을 검사한 결과가 참인 동안 반복 실행. 거짓이면 block을 벗어남

최초의 조건이 거짓일 경우 명령문들이 한번도 수행되지 않음

 

 

결과) 

 

4. do-while 문

 ■ 형식 : do { statement; } while (조건);

do 이하의 문장을 수행한 후 조건 비교. 참이면 반복 실행, 거짓이면 block 벗어남

조건이 참인 동안 명령문 반복 실행. 최소한 명령문 1번은 실행.

 

ex) 1-10까지의 합

결과)

 

5. continue 문

: while, do-while, for 문의 루프 속에서만 쓰이면서 루프의 안쪽에 있는 일부의 명령을 건너뛰어

조건식을 확인하고 다시 루프를 반복하는 용도

 

ex) 1-20까지의 수 중에서 짝수의 합

 

결과)

 

 

Posted by 마마필로 :

1. if문     2. switch문     3. break문

 



1. if 문

1) if 문

형식 : if 조건 statement;

조건이 참이면 조건 뒤의 문장 수행, 거짓이면 다음 문장 수행

 

ex) if (min < a) max = a; //min의 값이 a의 값보다 작다면 a의 값을 max 넣어라. 그렇지 않다면 다음 문장 실행

 

2) if - else 문

형식 : if (조건) statement1; else statement2;

조건이 참이면 조건 뒤의 문장(statement1)  실행, 거짓이면 else 뒤의 문장(statement2) 실행

 

ex)

int x = 10;

int y = 20;

 

if (x > y)

max = x;

else

max = y;

 

※ if 문과 if - else 문에서 여러 문장을 사용 할 때

:하나의 명령문일 때는 상관없지만 둘 이상의 문장은 중괄호{  }로 묶어준다

 

ex) 

 

3) 다중 if문(nested if statement)

: if문의 명령문 속에 if문이 있는 조건문

 

2. switch문

1) 식의 값을 여러 가지로 판단하여 각 값에 따라 실행할 명령을 선택하여 진행시킬 수 있는 조건문

2) 분기 조건을 여러 가지로 명시 할 수 있음

형식 :    switch (식)

{

   case n1 : statement 1;

   case n2 : statement 2;

..........

   case nr : statement r;

   default : statement n;

}                                         // 모든 조건에 맞지 않다면 default문 실행

ex)

 

결과)

 

 

위의 결과값처럼, b를 입력 받은경우, "부산"을 출력후 종료하지 못하고, 아래의 case문을 다 실행한다.

이러한 결과를 막아주기 위한 것이 break문 이다.

 

3. break문

: 해당 block을 탈출하여 block 다음으로 실행순서를 옮김(if문의 경우 break문을 사용할 수 없음)

ex) 2번의 switch문에 아래와 같이 break문 추가 

 

결과)

 

b를 입력하면 "부산"을 출력하고 해당 블럭을 빠져나온다.

 

 

Posted by 마마필로 :