[닷넷강의]1-2. C#, 변수, 상수, 기본구조

오라클왕 0 171 04.12 11:42

1-2. C#, 변수, 상수, 기본구조

 

변수

 

l  변수의 선언 방법은 다른 프로그래밍 언어와 비슷하다.

l  변수는 변하는 값을 저장하는데 a=a+1 이라는 문장에서 a가 변수이고 a의 값은 변한다.

l  메소드 내부에서 사용되는 지역(Local)변수는 스택(Stack)에 저장되며 사용 전에 반드시 초기화 되어야 한다.

 

int a

int a, b;

System.Int32 a, b;   //위와 동일

int a=1, b=2;

int a, b=2;

 

l  특수문자 사용할 수 없으며 변수명 첫글자를 소문자로 시작하는 것이 관례이다.

l  여러단어로 구성된 변수는 첫글자는 소문자로 나머지 단어의 첫머리는 대문자로.

l  대체로 영문 알파벳으로 변수명을 정한다.

l  가독성을 좋게하기 위해 변수명을 i, j, k와 같이 쓰는 것보다 역할을 인지할 수 있도록 정하는 것이 좋다. (: string name, int age, 물론 루프 카운터 변수는 주로 i,j,k 등을 사용한다).

 

변수의 형 변환(Type Casting)

 

l  변수에 담겨진 값의 형식(Type)을 다른 형식으로 변환하는 것으로 형 변환은 묵시적 형 변환(Implicit conversions)과 명시적 형 변환(Explicit conversions) 방법이 있다.

l  short a; int b=a 를 수행하면, a의 값은 int로 자동형 변환되어 b에 저장된다.(묵시적 형 변환)

l  위 예문처럼 shortint로 바꾸는 것은 문제의 소지가 없으며 컴파일러에서 자동으로 형 변환한다. 그러나 크기를 줄이는 변환이 필요한 경우에는 명시적으로 형 변환을 해야 한다. intshort로 바꾸는 것은 오버플로우를 야기할 가능성이 있으며 원하는 값으로 형 변환 되지 않을 수 있다.

          

using System;

 

class TypeCastExample1

{

           public static void Main()

           {

                     short a = 10;

                     int   b = a;      //short형은 int형에 묵시적으로 변환되어 대입된다.

                     int   c = 50000;  //이진수로 “0000 0000 0000 0000 1100 0011 0101 0000”

                                 //short형으로 변환하면 부호비트가 0에서 1, 음수가 된다.

                     short d = (short)c;          //명시적으로 형변환 하지않으면 오류!

                     Console.WriteLine("Short : {0}",d); 

           }

}

 

checked 형변환

 

l  intshort로 묵시적 형 변환 할 수 없고, 명시적으로 변환하면 overflow가 발생하는 것을 확인했다. 그러므로 형 변환 하기 전에 값이 overflow가 생기는지 미리 점검해 볼 필요가 있다.

l  이때 checked 키워드가 필요하며, C# 닷넷에서는 checked/unchecked 키워드를 제공하여 정수 형식의 산술 연산 및 변환에 대한 오버플로 검사를 명시적으로 하도록 하고 overflow가 발생한다면 Exception을 발생시킨다.

 

using System;

class TypeCastExample2

{

        public static void Main()

        {

          int   a = 50000;

          try{

               short  b = checked ((short) a);  // overflow 검사하여 예외를 발생시킴

          } catch (Exception e){                   

               Console.WriteLine(“예외 : {0}”,e.StackTrace);

          }           

        }

}

 

 

l  명령행에서 컴파일하는 경우 아래처럼 사용가능 하다.

 csc /unchecked TypeCastExample2.cs

csc /checked TypeCastExample2.cs

 

모든 소스코드에 대해 overflow 검사를 한다.

 

var Type

 

l  메소드 안에 사용되는 지역변수인 경우 명시적인 Type 대신 var를 사용할 수 있다.

l  변수의 형식을 유추하도록 컴파일러에 지시한다.

 

// i int형으로 컴파일러가 유추하여 컴파일 한다.

var i = 999;

 

// s 는 문자열로 유추하여 컴파일 한다.

var str = "OJC";

 

// iArray변수는 int형 배열로 유추하여 컴파일한다.

var iArray = new[] { 0, 1, 2 };

 

l  Var는 동일한 문에서 지역 변수를 선언하고 초기화하는 경우에만 사용할 수 있다.

 

아래는 오류!

var a;

a = 888;

 

Implicitly-typed local variables must be initialized

 

상수

 

l  컴파일 타임에 값이 정해지는 멤버, 필드이므로 값이 변경될 수 없다. 항상 고정된 데이터형식과 값을 가진다.

l  const 키워드를 사용하여 필드상수 또는 지역상수를 정의하며 선언 시 초기값을 주어야 한다.

) const double PI=3.141592;

l  선언할 때 값을 할당하지 않으면 에러가 발생하고 선언 후 값을 할당해도 에러가 발생한다.

l  상수는 주로 대문자로 변수명을 지정한다.

 

using System;

 

namespace ConsoleApplication1

{

    class MyConstants

    {

        public const double PI = 3.14;

        public const int MYAGE = 22;

    }

 

    class Program

    {

        static void Main(string[] args)

        {

            double radius = 2;

            double area = MyConstants.PI * (radius * radius);

            Console.WriteLine("Area = {0}, Age={1}", area, MyConstants.MYAGE);

            //MyConstants.MYAGE = 20;   //오류

 

            const string name = "홍길동";

            Console.WriteLine("name : " + name);

 

            //name = "김길동";  //오류

        }

    }

}

 

C# 프로그램의 기본 구조

 

// BCL System 네임스페이스를 사용하겠다는 의미, 네임스페이스는 닷넷에서 제공되는

// 수없이 많은 클래스를 네임스페이스로 분류하여 놓은것, 비슷한 기능을 하는 클래스

// 인터페이스 등을 그룹핑한 이름 정도로 보면 된다.

using System;  

namespace namespace_name   //네임스페이를 지정, 생략가능

{

                              //using절은 이곳에서도 정의 가능

           class ClassName1      //클래스명을 지정, 파일명일 필요는 없다.

           {

                             //C#의 메인함수, 하나만 가능, 프로그램의시작점

           public static void Main(string[] args) 

                     {

                                명령1;

                                명령2;

                                //…………..  //한줄 주석

                                명령n;

                       /* ... */     //멀티라인 주석

                     }

           }

                           //이곳에서 using선언은 불가.

        class ClassName2   //네임스페이스안에 여러 클래스 정의 가능

        {

            ....

        }

}

 


자마린교육,자마린학원,구로자마린학원, 구로자마린교육,자마린강좌,WPF실무교육, 자마린실무교육, 자마린예제, WPF예제, C#학원, C#교육, WPF학원, WPF교육, XAMARIN교육, XAMARIN학원, 자마린학원 ,자마린교육, 구로닷넷교육, 구로자마린교육, 구로WPF교육, 강남WPF교육, 강남자마린교육, 구로닷넷학원, 구로자마린학원, 구로WPF학원,자마린강의,자마린 HelloWolrd,강남WPF학원, 강남자마린학원,C#강의, 자마린강의, 닷넷강의, WPF강의, WPF강좌, C#강좌, 닷넷강좌



Comments