Class

Indexer
http://dis.dankook.ac.kr/lectures/hci09/entry/Indexer

Property (속성)
http://dis.dankook.ac.kr/lectures/hci09/entry/Property

Method overloading (메소드 오버로딩) Method overriding (메소드 오버라이딩)
http://dis.dankook.ac.kr/lectures/hci09/entry/Method-Overloading

Abstract Class (추상 클래스)
http://dis.dankook.ac.kr/lectures/hci09/entry/Abstract-class

Sealed Class (봉인 클래스)
http://dis.dankook.ac.kr/lectures/hci09/entry/Sealed-Class

OOP

Class (클래스) – defines the grouping of data and code, the “type” of an object (데이터와 코드의 그룹화, 개체의 “유형”을 정의)
Instance (인스턴스/객체) – a specific allocation of a class (클래스 객체의 특정 할당)
Message (메시지) – sent to objects to make them act (그들 행동을 하기위해 개체에 전송)
Method (메소드) – a “function” that an object knows how to perform (객체가 수행하는 방법을 알고있는 “함수”)
Instance Variables (인스턴스 변수) – a specific piece of data belonging to an object (객체에 속하는 데이터의 특정 부분)
Property (속성) – away to access instance variables and other attributes of an object (인스턴스 변수나 객체의 다른 속성에 접근하기위한 방법)
Encapsulation (캡슐화) – keep implementation private and seperate from interface (private하게 구현하고 인터페이스와는 별개로 유지)
Polymorphism (다형성) – different objects, same interface (다른 객체, 같은 인터페이스)
Inheritance (상속) – hierarchical organization. share code, customize or extend behaviors (계층적 조직, 코드의 공유, 사용자 정의 및 행동을 확장)

C# Formatting Numeric String

http://dis.dankook.ac.kr/lectures/hci09/entry/C-String-Formatting

Formatting Standard Numeric Format Strings
http://msdn.microsoft.com/en-us/library/s8s7t687(VS.80).aspx

Formatting Custom Numeric Format Strings
http://msdn.microsoft.com/en-us/library/0c899ak8.aspx

Formatting Numeric Format Strings (Alignment)
Integer    http://www.csharp-examples.net/string-format-int/
Double    http://www.csharp-examples.net/string-format-double/
DateTime http://www.csharp-examples.net/string-format-datetime/
Align String with Spaces  http://www.csharp-examples.net/align-string-with-spaces/
Indent String with Spaces http://www.csharp-examples.net/indent-string-with-spaces/
IFormatProvider               http://www.csharp-examples.net/iformatprovider-numbers/
Custom IFormatProvider   http://www.csharp-examples.net/custom-iformatprovider/
























































Character Description Examples Output
C or c Currency Console.Write(“{0:C}”, 2.5); $2.50
Console.Write(“{0:C}”, -2.5); ($2.50)
D or d Decimal Console.Write(“{0:D5}”, 25); 25
E or e Scientific Console.Write(“{0:E}”, 250000); 2.50E+05
F or f Fixed-point Console.Write(“{0:F2}”, 25); 25
Console.Write(“{0:F0}”, 25); 25
G or g General Console.Write(“{0:G}”, 2.5); 2.5
N or n Number Console.Write(“{0:N}”, 2500000); 2,500,000.00
X or x Hexadecimal Console.Write(“{0:X}”, 250); FA
Console.Write(“{0:X}”, 0xffff);

C# Array/ArrayList

Person[] pArray = new Person[5];

// 만약 Person 객체를 하나만 생성한 후 for문에서 공유해 사용할 경우
// 마지막으로 입력된 데이터로 모든 데이터값이 치환됨
Person p = new Person();
for (int i = 0; i < 5; i++) {
    p.Name = Console.ReadLine();           // 입력정보
    p.age = int.Parse(Console.ReadLine()); // 입력정보
    pArray[i] = p;                                  // 리스트에 들어간 모든 원소는 동일한 p
}

Person[] pArray = new Person[5];

// 아래와 같이 for문 안에 Person p = new Person()와같이 새로운 객체를 생성해야
// 각자 다르게 입력된 정보가 들어가게 됨
for (int i = 0; i < 5; i++) {
    Person p = new Person();
    p.Name = Console.ReadLine();           // 입력정보
    p.age = int.Parse(Console.ReadLine()); // 입력정보
    pArray[i] = p;                                  // 이때 p는 새로운 Person객체
}



http://dis.dankook.ac.kr/lectures/hci10/entry/C-ArrayList
 (ArrayList 사용예)

HW2

연습문제 (2)






단원 : C# 기초


목표 : C# 프로그램 기초


주요 연습 내용 : array, ArrayList, 클래스, 속성 연습


준비자료 :


  6724063743.hwp


연습문제 Ex2 (Due by 10/12 24시까지)


-cyber 강의실 (cyber.dku.edu)source code, executable file, solution/project VC# file, 보고서를 학번_이름_Ex2.zip으로 묶어서 낼 것. 보고서 (30%)


 


[연습문제]


1. CurrencyExchange 클래스를 정의하라 (CurrencyExchange.cs 파일로 저장한다). (20%)


CurrencyExchange 클래스는 통화이름, 매매기준율, 살때, 팔때, 통화명을 데이터 멤버로 포함한다.


– private string hname;


– private double standard;


– private double buy;


– private double sell;


– private string sign;


 


각 멤버 필드에 대한 속성(Property)를 지정하여 외부에서 사용할 수 있도록 한다.


– public string HName { get; set;} // getset에 대한 내부정의 필요


– public double Standard { get; set;}


– public double Buy { get; set;}


– public double Sell { get; set;}


– public string Sign { get; set;}


 


그리고 메소드는 다음을 포함한다.


– public CurrencyExchange() // 기본 생성자


– public CurrencyExchange(string, double, double, double, string) // 생성자


– public virtual void Print() // CurrencyExchange 통화이름, 매매기준율, 팔때, 살때, 통화명을 출력


– public override string ToString() // Print와 동일하게 string으로 출력


 


2. TodayMoneyExchangeConverter 클래스 (TodayMoneyExchangeConverter.cs 파일로 저장한다)는 아래의 메소드를 포함한다. (40%)


– static ArrayList currencyList = new ArrayList();


– static CurrencyExchange currencyExchangeIn = null; // 정확한 환율변환계산을 위해서 환전하려는 입력된 통화의 환율시세가 필요함


– static CurrencyExchange currencyExchangeOut = null; // 정확한 환율변환계산을 위해서 출력되는 환전 통화의 환율시세가 필요함


– static double currencyAmountIn = 0.0; // 입력된 환전금액


– static string currencySignIn = null; // 입력된 환전통화


– static string currencyNameOut = null; // 환전하려는 통화국가명


 


– public void GetTodayCurrencyExchangeRates(); // currencyList에 데이터 저장하고 아래와 같이 출력한다. (Ex1PrintTodayCurrencyExchangeRates를 변형하여 웹에서 받은 모든 정보를 currencyList에 저장하고나서 화면에 출력한다 foreach구문과 CurrencyExchange 클래스의 ToString() 을 사용할 것.)


미국 1112 1131.46 1092.54 USD


일본 1433.17 1458.25 1408.09 JPY


유럽연합 1438.48 1467.1 1409.86 EUR


중국 176.94 189.32 168.1 CNY


영국 1804.78 1840.69 1768.87 GBP


스위스 1189.3 1212.96 1165.64 CHF


캐나다 1135.85 1158.45 1113.25 CAD


호주 1162.04 1185.16 1138.92 AUD


뉴질랜드 927.52 945.97 909.07 NZD


……


 


– public void PrintTodayCurrencyExchangeStandardAmount(); // 아래와 같이 한국 1000, 미국 1달러, 일본 100, 유로 1유로에 대한 매매기준율 환율시세로 변환한 금액을 출력한다.


한국(KRW) 미국(USD) 일본(JPY) 유럽(EUR)


한국(1000 KRW) 1000.0 0.8993 69.78 0.70


미국(1 USD) 1112.0 1.0000 77.59 0.77


일본(100 JPY) 1433.2 1.2888 100.00 1.00


유로(1 EUR) 1438.5 1.2936 100.37 1.00


 


– CurrencyExchange GetCurrencyExchangeByName(string name); // 통화국가명에서 currencyList로부터 CurrencyExchange객체를 받기


 


– CurrencyExchange GetCurrencyExchangeBySign(string sign); // 통화명에서 currencyList로부터 CurrencyExchange객체를 받기


 


– public void GetKeyboardInput(); // 환전금액과 통화명 입력받기


힌트: Spring 클래스의 Split을 사용하여 환전금액 (amount)와 통화명(currency sign)을 입력받는다.


1. 환전금액을 입력하세요 (: 1000 KRW 또는 200 JPY ): 100 USD


통화명 미국 USD의 환율시세는 매매기준율 1112 살때 1131.46 팔때 1092.54


2. 환전통화를 입력하세요 (: 한국/미국/일본/유럽연합/중국/호주..): 중국


통화명 중국 CNY의 환율시세는 매매기준율 176.94 살때 189.32 팔때 168.1


 


– public void Print(); // 매매기준율, 살때, 팔 때 기준에 대한 환전을 계산하여 출력한다.


매매기준율 살때 팔 때


100 USD => CNY 628.46 597.64 649.93


 


3. 프로그램에 본인이 더 테스트해보고 싶은 Methodroutine을 추가하라. 그리고 네이버 오늘의 환율 시세에서 제공하는 모든 통화에 대하여 환율이 정확히 계산됨을 네이버 환율계산기와 비교하여 증명하라. (10%)


 

pass by value vs pass by reference vs pass by output

http://dis.dankook.ac.kr/lectures/hci10/entry/pass-by-value와-pass-by-reference와-pass-by-output-비교

pass value type by value (값형식을 값에 의한 전달)
pass reference type by value (참조형식을 값에 의한 전달)
-copy of reference가 전달

pass value type by reference (값형식을 참조에 의한 전달)
ref 키워드 사용
pass reference type by reference (참조형식을 참조에 의한 전달)
ref 키워드 사용

pass value type by output (값형식을 output에 의한 전달)
out 키워드 사용
pass reference type by output (참조형식을 output에 의한 전달)
out 키워드 사용

static class vs singleton design pattern

공용 데이터를 저장하여 사용하고자 할 때, singleton 패턴이나 static 클래스를 사용한다.

싱글톤 패턴 (Singleton design pattern)
-싱글톤 패턴이란 single instance object(해당 클래스의 인스턴스 하나)가 만들어지고, 어디서든지 그 싱글톤에 접근할 수 있도록 하기 위한 패턴

정적 클래스 (Static class)
-static 키워드를 사용한 정적 클래스는 정적 멤버만 포함 가능
-정적 클래스는 new 키워드를 사용하여 정적 클래스의 인스턴스를 생성할 수 없음
-정적 클래스는 봉인 클래스 (sealed class) 임
-static 클래스는 single-instance, global 데이터를 저장하여 사용하는 용도로 적당
-그러나, 싱글톤은 인자(parameter)나 객체(object)로 사용가능하나 정적클래스는 불가능

http://dis.dankook.ac.kr/lectures/hci10/entry/singleton-pattern과-static-class-비교