기본자료형 연산자와제어문 배열 컬렉션과반복자 순천향대학교컴퓨터학부이상정 1 기본자료형 순천향대학교컴퓨터학부이상정 2
C# 자료형 C# 은.NET 프레임워크가제공하는 CTS(Common Type System) 자료형을사용 CTS는닷넷기반의여러언어에서공통으로사용되는자료형 CTS 는값 (value) 형과참조형 (reference) 형지원 CTS가제공하는모든데이터형은 System.Object를상속받아구현 값형 (Value Type) 과참조형 (Reference Type) 값형실제데이터의값을저장스택 (stack) 영역에데이터저장 참조형데이터에대한참조만을저장힙 (heap) 영역에데이터저장 순천향대학교컴퓨터학부이상정 3 단순자료형 C# 에서사용되는값형 단순자료형 : bool, char, int, long, float, double 등 사용자정의형 : enum( 나열형 ), struct( 구조체형 ) 등 bool 형 참일경우 true, 거짓일경우 false char 형 유니코드 (unicode) 문자하나를저장, 2바이트 정수형 Signed: sbyte(1 byte), short(2 byte), int(4 byte), long(8 byte) Unsigned: byte(1 byte), ushort(2 byte), uint(4 byte), ulong(8 byte) 부동소수점형 float (4 byte), double (8 byte) decimal 형 금융이나회계용프로그램에사용되는더정밀한수표현 (16 byte) 순천향대학교컴퓨터학부이상정 4
class SimpleTypeTest public static void Main() int e = 3; int f = 4; bool bgte = (e >= f); bool blt = (e < f); Console.WriteLine("i >= j : 0, i < j : 1", bgte, blt); 단순자료형예 float a = 22f; float b = 7f; float c = a / b; Console.WriteLine("float type pie = 0", c); double i = 22; double j = 7; double k = i / j; Console.WriteLine("double type pie = 0", k); decimal x = 22m; decimal y = 7M; decimal z = x / y; Console.WriteLine("decimal type pie = 0", z); 순천향대학교컴퓨터학부이상정 5 나열형 나열형 (Enumeration Type) 이름을가진상수들의집합으로구성된자료형 형식 예제 enum 나열자이름 : 기반자료형 나열멤버1, 나열멤버2, 나열멤버3 enum Color : int Red, Yellow, Blue 순천향대학교컴퓨터학부이상정 6
나열형예 class EnumTest enum Color Red = 4, Yellow = 25, Blue, White = Red * Yellow * Blue public static void Main() Console.WriteLine("First member of Color is 0", Color.Red); Console.WriteLine("Value of Second member Yellow is 0", (int)color.yellow); Console.WriteLine("Third member of Color is 0", Color.Blue); Console.WriteLine("Value of Blue is 0", (int)color.blue); Console.WriteLine("Value of White is 0", (int)color.white); 순천향대학교컴퓨터학부이상정 7 참조형 참조형 (Reference Types) 클래스, 인터페이스, 배열, 델리게이트로구분 이장에서는클래스형중에서 C# 의기본내장형인 object 와 string 소개 object 형 object 는모든자료형의조상으로어떤값이든저장 GetType() 메쏘드 :.NET 프레임워크자료형 ToString() 메쏘드 : 자료형값 string 형 문자열을저장하는자료형 순천향대학교컴퓨터학부이상정 8
참조형예 class ObjectTest public static void Main() object a = 22; object b = 3.14; object c ="abc"; Console.WriteLine("Value of a : 0", a); Console.WriteLine("Value of a : 0", a.tostring()); Console.WriteLine("Type of a : 0", a.gettype()); Console.WriteLine(); Console.WriteLine("Value of b : 0", b); Console.WriteLine("Value of b : 0", b.tostring()); Console.WriteLine("Type of b : 0", b.gettype()); Console.WriteLine(); Console.WriteLine("Value of c : 0", c); Console.WriteLine("Value of c : 0", c.tostring()); Console.WriteLine("Type of c : 0", c.gettype()); string u = " 순천향대학교 "; string d = " 컴퓨터학부 "; int g = 2007; string h = " 저는 " + u + d + g.tostring() + " 학번입니다."; Console.WriteLine(h); 순천향대학교 컴퓨터학부이상정 9 연산자와제어문 순천향대학교컴퓨터학부이상정 10
연산자 (1) 연산자범주 산술연산자 + - * / % 연산자 논리연산자 ( 부울및비트 ) & ^! ~ && true false 문자열연결연산자 + 증가, 감소연산자 ++ -- 시프트연산자 << >> 관계형연산자 ==!= < > <= >= 할당연산자 = += -= *= /= %= &= = ^= <<= >>= 멤버액세스연산자. 인덱스연산자 [] 캐스트연산자 () 조건연산자?: 대리자연결및제거연산자 + - 개체작성연산자 new 형식정보연산자 as is sizeof typeof 오버플로예외처리연산자 간접참조및주소연산자 순천향대학교컴퓨터학부이상정 11 checked unchecked * -> [] & 연산자 (2) check, unchecked 정수형산술연산과변환에대한오버플로우체크 is is 연산자는지정된형이서로호환되는동일한형인지를체크 typeof 어떤형 (type) 에대한 System.Type 개체를얻기위해사용 순천향대학교컴퓨터학부이상정 12
연산자예 class OperatorTest static void Main() int x = 1000000; int y = 1000000; int z; z = unchecked(x*y); // z = -727379968 // z = checked(x * y); => compile error, overflow Console.WriteLine("z = 0", z); int a; Console.WriteLine("typeof(int) = 0", typeof(int)); if (a is System.Int32) Console.WriteLine(" 정수형입니다."); else Console.WriteLine(" 정수형이아닙니다."); 순천향대학교컴퓨터학부이상정 13 제어문 제어문은프로그램실행흐름을변경 C, C++ 에서제공하는제어문과유사 선택문 : if ~ else, swith 반복문 : for, while, do ~ while, foreach 기타제어문 : continue, break, goto foreach 문 배열 (Array) 이나컬렉션 (collection) 에있는원소들을차례대로순회하는반복문 형식 foreach ( 자료형변수이름 in 배열이나콜렉션 ) 실행블럭 ; 순천향대학교컴퓨터학부이상정 14 예 int[] array = new int[]3, 6, 9, 13, 16, 19; foreach ( int n in array ) Console.WriteLine( n : 0, n);
foreach 문예 class TotalSum // foreach 문사용 public static void Main() int sum = 0; int[] arr = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; foreach (int i in arr) sum += i; Console.WriteLine("1 부터 10 까지합은 0 입니다. ", sum); 순천향대학교컴퓨터학부이상정 15 배열 순천향대학교컴퓨터학부이상정 16
배열 배열 배열 (Array Type) 은동일한자료의연속된집합 각요소는배열의인덱스를통해접근 C# 의모든배열은 System.Array 클래스를상속받아구현 형식 예 자료형 [] 배열변수명 ; 배열변수명 = new [ 자료형 ][ 배열크기 ]; int [] data; data = new int[5]; int [] data = new int[5]; int [, ] array2 = new int[3,5]; int[,,]array3=, new int[2,5,7]; 순천향대학교컴퓨터학부이상정 17 배열초기화 선언과동시에초기값지정 예 int[] Arr = new int[5] 1, 2, 3, 4, 5; int[] Arr = new int[] 1, 2, 3, 4, 5; int[] Arr = 1, 2, 3, 4, 5; int [, ] data = newint[, ]123 1,2,3, 456 4,5,6, 789; 7,8,9 ; 순천향대학교컴퓨터학부이상정 18
System.Array 클래스 C# 의모든배열은 System.Array 클래스를상속받아구현 System.Array 클래스에는배열의사용에관한메쏘드제공 System.Array 클래스에서제공하는중요메쏘드 메쏘드 설명 Sort 오름차순으로정렬 Reverse 내림차순으로정렬 Clear 모든요소를초기화 Clone 동일한내용을갖는배열을복사 GetLength 요소의개수를반환 GetLowerBound 시작요소의첨자를반환 GeyUpperBound 마지막요소의첨자를반환 GetValue 선택된인덱스위치의요소값을반환 SetValue 선택된인덱스위치에요소값을저장 순천향대학교컴퓨터학부이상정 19 System.Array 클래스예 (1) class ArrayTest public static void Main() int[] array = 9, 4, 7, 2, 10, 3 ; int[] clone_arr = new int[6]; // clone 함수테스트하기위해사용할배열 Console.WriteLine("GetLength() : 요소의개수 => >0" 0", array.getlength(0)); Console.Write("Sort() : 오름차순정렬 => "); System.Array.Sort(array); for (int i = 0; i < array.length; i++) Console.Write( Write(" 0 ", array[i]); Console.Write(" nclone() : 배열복사 => "); clone_arr = (int[])array.clone(); // 리턴값이 object 형이므로형변환 for(inti=0;i<clone i i clone_arr.length; arrlength;i++) Console.Write(" 0 ", clone_arr[i]); Console.Write(" ngetupperbound() : 마지막요소인덱스 => "); Console.WriteLine( WriteLine(" 0 ", array.getupperbound(0)); 순천향대학교컴퓨터학부이상정 20
System.Array 클래스예 Console.Write(" ngetvalue() tv l () : 인덱스위치의요소값 => "); Console.WriteLine(" 0 ", array.getvalue(3)); Console.Write("SetValue() : 인덱스위치에요소값저장 => "); array.setvalue(20, 3); Console.WriteLine(" 0 ", array.getvalue(3)); Console.Write("Clear() : 배열을초기화 => "); System.Array.Clear(array, 0, array.length); for (int i = 0; i < array.length; i++) Console.Write(" 0 ", array[i]); // 출력 Console.WriteLine(""); 순천향대학교컴퓨터학부이상정 21 가변배열 C# 은배열요소마다차원과크기를다르게지정할수있는가변배열 (jagged array) 을지원 예 배열의요소에배열이저장 int[][] myjaggedarray = new int[3][]; myjaggedarray[0] = new int[4]; myjaggedarray[1] = new int[2]; myjaggedarray[2] = new int[3]; 순천향대학교컴퓨터학부이상정 22
public class JaggedTest public static void Main() int[][] arr = new int[3][]; 가변배열예 arr[0] = new int[] 4, 2, 8, 9 ; arr[1] = new int[] 2, 3 ; arr[2] = new int[] 5, 2, 7 ; for (int i = 0; i < arr.length; i++) Console.Write("(0) 번째배열의요소 : ", i); for (int j = 0; j < arr[i].length; j++) Console.Write("0 ", arr[i][j]); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("arr의차수 0 입니다.", arr.rank); Console.WriteLine("arr[0] 의차수는 0 입니다.", arr[0].rank); Console.WriteLine("arr[1] 의차수는 0 입니다.", arr[1].rank); Console.WriteLine("arr[2] 의차수는 0 입니다.", arr[2].rank); 순천향대학교컴퓨터학부이상정 23 컬렉션과반복자 순천향대학교컴퓨터학부이상정 24
컬렉션 C# 은다양한자료구조의컬렉션클래스 (collection class) 를 제공 ArrayList, HashTable, Stack, Queue 등 System.Collections 네임스페이스에정의 object 형기반구성 ArrayList 배열과비슷하지만, 요소를동적으로삽입하거나제거 예 ArrayList list = new ArrayList(); // ArrayList 객체생성 list.add( 123 ); // 첫번째요소추가 list.add( abc ); // 두번째요소추가 list.removeat( 0); // 첫번째요소제거 순천향대학교컴퓨터학부이상정 25 using System.Collections; class MainApp static void Main(string[] args) ArrayList list = new ArrayList(); ArrayList 예 Console.WriteLine("Adding 3 items..."); list.add("123"); list.add("456"); list.add("789"); Console.WriteLine("Length of list : 0", list.count); foreach (object o in list) Console.WriteLine(o); Console.WriteLine(); Console.WriteLine("Removing an item at 1..."); list.removeat(1); Console.WriteLine("Length of list : 0", list.count); foreach (object o in list) Console.WriteLine(o); 순천향대학교 컴퓨터학부이상정 26
Hashtable Hashtable Hashtable은정수의인덱스대신에객체키 (Key) 를이용하는자료구 조 클래스나구조체, 정수나소수형까지모두키로사용가능 예 Hashtable ht = new Hashtable ( ); ht [ "frequency" ] =" 주파수 "; ht [ "function" ] = " 함수 "; ht [ "evaluate" ] = " 평가하다 "; 순천향대학교컴퓨터학부이상정 27 Hashtable 예 using System.Collections; class MainApp static void Main(string[] args) Hashtable ht = new Hashtable(); ht["frequency"] = " 주파수 "; ht["function"] ti "] = " 함수 "; ht["evaulate"] = " 평가하다 "; Console.WriteLine("frequency : 0", ht["frequency"]); Console.WriteLine("function : 0", ht["function"]); Console.WriteLine("evaluate : 0", ht["evaulate"]); 순천향대학교컴퓨터학부이상정 28
반복자 반복자 (iterator) 클래스에내장된배열이나컬렉션을foreach 문을통해접근할수있도록해주는메쏘드 System.Collections.IEnumerator 형을반환하는 GetEnumerator() 메쏘드로구현 yield return foreach 문이실행되면서몇번째의컬렉션요소를반환해가져갔는지를기억하도록함 예 class MyStringArray private string[] string_array = new string " 가나다 ", " 라마바 ", " 사아자 " ; public System.Collections.IEnumerator GetEnumerator ( ) for ( int i = 0; i < array.length; i++ ) yield return string_array[i]; 순천향대학교컴퓨터학부이상정 29 반복자예 class MyArray private object[] array; class MainApp static void Main(string[] args) MyArray myarray = new MyArray(3); public MyArray(int size) array = new object[size]; public void Set(int index, object value) array[index] = value; myarray.set(0, " 재미있는 "); myarray.set(1, " 프로그래밍! "); myarray.set(2, "C# 과함께하세요!"); foreach (object o in myarray) Console.WriteLine(o); public System.Collections.IEnumerator GetEnumerator() for (int i = 0; i < array.length; i++) yield return array[i]; 순천향대학교컴퓨터학부이상정 30
과제 N 명의학생의이름, 번호, 국어, 영어, 수학점수를배열로표현하여학생별총점, 평균과과목별평균및학생의석차를구하는프로그램을작성하라. 순천향대학교컴퓨터학부이상정 31