2 장. C# 기초문법 자료형 제어문 배열 연산자 순천향대학교컴퓨터학부이상정 1 자료형 순천향대학교컴퓨터학부이상정 2
CTS CTS(Common Type System) 닷넷기반의여러언어에서공통으로사용되는자료형 언어별로서로다른자료형을사용할때발생할수있는호환성문제를해결 값 (Value) 형과참조 (Reference) 형을지원 CTS가제공하는모든자료형은 System.Object를상속받아구현 System.Object 클래스에서제공하는생성자와메서드를 CTS 가제공하는모든자료형에서호출가능 순천향대학교컴퓨터학부이상정 3 C# 자료형 값형 (Value Type) 과참조형 (Reference Type) 값형 실제데이터의값을저장 참조형 데이터에대한주소 ( 참조 ) 만을저장 스택 (stack) 영역에데이터저장 힙 (heap) 영역에데이터저장 순천향대학교컴퓨터학부이상정 4
값형 (1) 값형으로선언된변수는메모리의스택에할당 변수의선언과동시에메모리에생성되고, 변수의형에따라서메모리의할당크기결정 내장형과사용자정의형으로구분 내장형 (Built-in type) bool, char, int, long, float, double 등 사용자정의형 (User-Defined type) enum( 열거형 ), struct( 구조체형 ) 등 bool 형 System.Boolean 구조의별칭 참일경우 true, 거짓일경우 false char 형 char 형은 System.Char 구조의별칭 유니코드 (Unicode) 문자하나를저장할수있는자료형 순천향대학교컴퓨터학부이상정 5 값형 (2) 정수형 decimal 형 System.Decimal의별칭 최대 28 자리까지수를나타낼수있는자료형 (128 비트 ) 금융이나회계용프로그램을작성할경우유용하게사용 순천향대학교컴퓨터학부이상정 6
값형 (3) 부동소수점형 소수점이들어간실수를표현할수있는자료형 float (32 비트, System.Float 의별칭 ) double (64 비트, System.Double 의별칭 ) 열거형 숫자상수대신에상징적인이름의상수들의집합으로구성된자료형 구조체형 하나의자료형에여러형의변수를가질수있는자료형 3 장에서소개 순천향대학교컴퓨터학부이상정 7 참조형 참조형은객체를가르키는형 참조형은변수의선언과메모리의생성이분리 변수를선언하더라도객체의메모리가생성이되지않는다. 객체를생성할때메모리를힙으로부터생성해주는순간에참조형의변수에객체의참조를저장 클래스형, 인터페이스형, 델리게이트형, 배열형 3,4,5 장에서소개 클래스형중에서 C# 의기본내장형으로 object, string 형이있음 object는모든자료형의조상으로어떤값이든저장 GetType() 메서드 :.NET 프레임워크자료형 ToString() 메서드 : 문자열자료형값 string 형 문자열을저장하는자료형 순천향대학교컴퓨터학부이상정 8
using System; using System.Collections.Generic; using System.Text; 예제 2-1: 참조형예 namespace Ex2_1_Reference class Program static void Main(string[] args) object a = 22; object b = 3.14; object c = "abc"; Console.WriteLine("Value of a : 0", a); Console.WriteLine("Type of a : 0", a.gettype()); Console.WriteLine(); Console.WriteLine("Value of b : 0", b); Console.WriteLine("Type of b : 0", b.gettype()); Console.WriteLine(); Console.WriteLine("Value of c : 0", c); Console.WriteLine("Type of c : 0", c.gettype()); string u = " 순천향대학교 "; string d = " 컴퓨터학부 "; int g = 2005; string h = " 저는 " + u + d + g.tostring() + " 학번입니다."; Console.WriteLine(h); 순천향대학교컴퓨터학부 이상정 9 제어문 순천향대학교컴퓨터학부이상정 10
제어문 제어문은프로그램실행흐름을변경 C, C++ 에서제공하는제어문과유사 선택문 : if ~ else, switch 반복문 : for, while, do ~ while, foreach 기타제어문 : continue, break, goto foreach문 배열 (Array) 이나컬렉션 (collection) 에있는원소들을차례대로순회하는반복문 순천향대학교컴퓨터학부이상정 11 using System; namespace Ex2_2_Calculator class Program static void Main(string[] args) int x,,y, result = 0; char op; Console.Write(" 두숫자와연산자를입력하시오?(x+y) : "); x = Console.Read() -'0'; // Read 메서드는문자를읽음, 반환형은 int op = (char)console.read(); y = Console.Read() - '0'; switch (op) case '+': result = x + y; Console.WriteLine(x + " + " + y + " = " + result); break; case '-': result = x - y; Console.WriteLine(x + " - " + y + " = " + result); break; case '*': result = x * y; Console.WriteLine(x + " * " + y + " = " + result); break; case '/': result = x/y; Console.WriteLine(x + " / " + y + " = " + result); break; default: Console.WriteLine(" 연산자를잘못입력하였습니다?,"); break; 순천향대학교컴퓨터학부이상정 12 예제 2-2: Calculator l 예
예제 2-3: TotalSum 예 using System; namespace Ex2_3_TotalSum class Program static void Main(string[] args) int sum = 0; int[] arr = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ; // foreach 문사용예 foreach (int i in arr) sum += i; Console.WriteLine("1 부터 10 까지합은 0 입니다. ", sum); 순천향대학교컴퓨터학부이상정 13 배열 순천향대학교컴퓨터학부이상정 14
배열 배열 (array) 배열은동일한자료의연속된집합 C# 에서는배열을객체로취급하고배열의각요소는인덱스를통해접근 C# 의모든배열은System.Array 클래스를상속받아구현 순천향대학교컴퓨터학부이상정 15 다차원배열 선언과동시에초기값지정가능 순천향대학교컴퓨터학부이상정 16
System.Array 클래스 순천향대학교컴퓨터학부이상정 17 예제 2-4: Array 예 (1) using System; using System.Collections.Generic; using System.Text; namespace Ex2_4_Array class Program static void Main(string[] args) int [] array = 9,4,7,2,10,3; int [] clone_array = new int[6]; // clone 함수테스트하기위해사용할배열 Console.WriteLine(" narray Rank 는 0", array.rank); Console.WriteLine("GetLength() : 배열이갖는요소의개수반환 => 0", array.getlength(0)); Console.Write("Sort() : 배열을오름차순으로정렬 => "); System.Array.Sort(array); for(int i=0; i < array.length ; i++ ) Console.Write(" 0 ", array[i]); Console.Write(" nreverse() : 배열을내림차순으로정렬 => "); System.Array.Reverse(array); for( int i=0; i < array.length ; i++ ) Console.Write(" 0 ", array[i]); // 출력 Console.Write( Write(" nclone() : 동일한내용을갖는배열을복사 => "); clone_array = (int[])array.clone(); // 리턴값이 object 형이므로형변환 for(int i=0; i < clone_array.length ; i++ ) Console.Write(" 0 ", clone_array[i]); // 출력 순천향대학교컴퓨터학부이상정 18
예제 2-4: Array 예 (2) Console.Write(" ngetlowerbound() : 배열의시작요소첨자반환 => "); Console.WriteLine(" 0 ", array.getlowerbound(0)); Console.Write( Write("GetUpperBound() : 배열의마지막요소첨자반환 => "); Console.WriteLine(" 0 ", array.getupperbound(0)); Console.Write("GetValue() : 선택된인덱스위치의요소값반환 => "); 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); // 인덱스 0부터 arrry.length까지초기화 for( int i=0; i < array.length ; i++ ) Console.Write(" 0 ", array[i]); // 출력 순천향대학교컴퓨터학부이상정 19 가변배열 (jagged array) 배열요소마다차원과크기를다르게지정할수있는배열 예 배열의요소에배열이저장 int[][] myjaggedarray = new int[3][]; myjaggedarray[0] = new int[4]; myjaggedarray[1] = new int[2]; myjaggedarray[2] = new int[3]; 순천향대학교컴퓨터학부이상정 20
예제 2-5: JaggedArr 예 using System; using System.Collections.Generic; using System.Text; namespace Ex2_5_JaggedArr class Program static void Main(string[] args) int[][] arr_data = new int[5][]; arr_data[0] = new int[] 1, 2 ; arr_data[1] = new int[] 3, 4, 5 ; arr_data[2] = new int[] 6 ; arr_data[3] = new int[] 7, 8, 9, 10 ; arr_data[4] = new int[] 11, 12 ; for (int i = 0; i < 5; i++) Console.Write( Write(" n arr_data[0] = ", i); for (int j = 0; j < arr_data[i].length; j++) Console.Write(" 0 ", arr_data[i][j]); 순천향대학교컴퓨터학부이상정 21 ArrayList 클래스 Array 클래스보다많은기능을갖고있고편리하게사용할수있는클래스 배열의크기를임의로변화시킬수있으며다른타입의원소를배열에저장가능 System.Collections 네임스페이스에포함 C# 은다양한자료구조의컬렉션클래스 (collection class) 를제공 ArrayList, HashTable, Stack, Queue 등 object 형기반구성 순천향대학교컴퓨터학부이상정 22
ArrayList 클래스의주요속성과메서드 순천향대학교컴퓨터학부이상정 23 예제 2-6: ArrayList 예 using System; using System.Collections; using System.Text; namespace Ex2_6_ArrayList class Program static void Main(string[] args) int[] data = new int[3] 100, 200, 300; ArrayList al = new ArrayList(); // ArrayList 객체생성 al.add("c#"); ladd("c#") al.add(" 프로그래밍 "); al.addrange(data); al.reverse(2, 3); foreach (object ob in al) Console.WriteLine(ob); // ArrayList 끝에배열 data의요소를복사 // 인덱스 2부터 3개요소의순서를반대로 순천향대학교컴퓨터학부이상정 24
연산자 (1) 순천향대학교컴퓨터학부이상정 25 연산자 (2) checked, unchecked 연산자 정수형산술연산과변환에대한오버플로를검사하거나무시하도록제어하기위해사용 checked는변수의오버플로를검사하는연산자 unckeked 는변수가오버플로되어도이를무시하고잘린값을저장 예 ) unchecked(x*y); is 연산자 런타임시지정된형이서로호환되는동일한형인지를동적으로비교 예 ) if ((a is int) == true)) as 연산자 주어진값을지정한타입으로변환시키는연산자 캐스트연산과비슷하지만변환이가능하지않은경우에사용하면예외가발생하지않고대신 null이반환 예 ) if (b as string) == null) typeof 객체의형 (System::Type) 을반환하는연산자 예 ) typeof(int) // Int32 순천향대학교컴퓨터학부이상정 26
과제 1. 1~100 까지 3 의배수를구하여출력하는프로그램 한줄에10개씩출력 foreach 문사용 2. N 명의학생의이름, 주소, 전화번호를입력하고배열에저장한후화면에출력하는프로그램 데이터입력 : Console.ReadLine 메서드사용 데이터출력 : Console.WriteLine 메서드사용 이름과전화번호는배열에저장 주소는 ArrayList 에저장 순천향대학교컴퓨터학부이상정 27