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 //네임스페이스안에 여러 클래스 정의 가능

{

....

}

}

닷넷이란?(CLI, CLR, CTS, CLS)

1-1. 닷넷이란?(CLI, CLR, CTS, CLS)

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

n 닷넷이란? 현재의 인터넷 환경을 혁신적으로 바꿀 차세대 MS의 제품군과 기술, 프로그램개발환경을 총칭하며 다음 세대의 플랫폼과 서비스를 위한 프레임웍이며 서비스로서의 소프트웨어의 개발환경이다. 마이크로소프트에서 개발한 프로그램 개발 및 실행 환경이다.

n CLS(Common Language Specification, 닷넷 컴파일러가 지원해야 하는 최소한의 표준규약으로 닷넷 프레임웍 언어가 반드시 지켜야 하는 언어 스펙)를 따르는 언어라면 어떠한 언어라도 닷넷 프레임워크에서 실행가능하며 CLR(Common Language Runtime)이라는 독립적인 환경에서 실행된다.

n 닷넷 프레임워크는 CLR(Common Language Runtime)과 BCL(Base Class Library)로 구성되며 용도에 따라 ASP.NET과 같은 웹폼과 일반 어플리케이션을 구성하는 윈폼으로 구분할 수 있다. ASP.NET에서 사용하는 폼이 WebForm이기에 WebForm프로그램 이라고도 한다.

n 인터넷을 통해서 자유롭게 프로그램을 배포하고 개발하려면 하나의 언어만(예를 들어 C#)알고 있으면 되고, .NET framework에 의해서 동일한 컴파일된 코드를 만들 수 있다면 모든 프로그램을 .NET으로 통합할 수 있고 서비스 할 수 있다. (자바 진영의 경우 자바언어 하나만 알고 있으면 웹프로그래밍, 응용 프로그래밍, 모바일 프로그래밍 등 모두 개발이 가능한데 MS의 종래 Visual C, Visual Basic등은 그러질 못했다.)

n 공통 언어 런타임(Common Language Runtime) : 소스코드를 컴파일 하면 어셈블리가 되는데, 이 어셈블리가 CLR 위에서 동작한다. 즉 CLR은 .Net Framework의 Runtime이다. CLR은 다음과 같은 구성요소가 있다. - 공통 타입 시스템(Common Type System), 공용 언어 스펙(Common Language Specification), JIT 컴파일러(Just-In-Time Compiler), 가상 실행 시스템(Virtual Execution System)

n Visual Studio.NET은 C#, Visual Basic.NET, C++, J#, Jscript 등 여러 언어들을 지원하며 닷넷 환경에서 어느 프로그래밍 언어로 작성하든 컴파일 된 코드(MSIL, Microsoft Intermediate Language)는 같다는 것이 아주 강력한 특징이다. 즉 프로그래머가 가장 자신 있고 편한 언어로 개발하면 된다는 것이다. 그렇지만 대부분 C#을 많이 사용하고 있다. C#은 자바의 객체지향 특징과 C++의 강력함, VB처럼 쉬운 통합환경의 3가지 요소가 결합된 최고의 언어라고 할 수 있다.

n C#으로 프로그래밍을 하기 위해서는 닷넷프레임워크에 대한 이해가 우선되야 하는데 먼저 CLR(Common Language Runtime)에 대해 알아보자. CLR의 Architecture는 아래와 같다.

n CLR(닷넷 환경의 런타임)은 하부구조 OS를 가지며 OS 위에서 닷넷 Application을 실행할 수 있게 해주는 중요한 환경이다. 이 때문에 닷넷 환경하에서 어떠한 언어로 개발하든 컴파일된 파일은 같은 모양을 가지며 파일들은 CLR 위에서 여러 라이브러리 등을 참고해서 실행 하게 된다.

(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...