2020년 7월 22일 수요일

C#, 변수, 상수, 기본구조

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

http://ojc.asia/bbs/board.php?bo_table=LecCsharp&wr_id=378

변수

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

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

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

int a // 4바이트 정수, 원 타입은 System.Int32, 즉 System.Int32의 Alias

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

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 int를 short로 묵시적 형 변환 할 수 없고, 명시적으로 변환하면 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 //네임스페이스안에 여러 클래스 정의 가능

{

....

}

}

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...