.NET - 해당되는 글 8건
@차이점
값 타입과 참조 타입의 근본적인 차이점은 데이터가 저장되는 메모리상의 위치이다. 값 타입은 크기가 작고 고정적이기 때문에 스택에 생성되며 참조 타입은 크고 가변적이기 때문에 동적으로 관리되는 힙에 생성된다. 저장 위치의 차이로 인해서 많은 파생 차이점들이 발생하며 관리하는 방법이나 대입 시의 효과 등이 달라진다.
- 값 타입은 선언만 하면 스택에 즉시 생성되므로 선언 직후부터 데이터를 저장하는 용도로 사용할 수 있다. 하지만 참조 타입은 선언에 의해 참조만 생성될 뿐이지 데이터를 저장할 수 있는 실제 메모리가 할당되는 것은 아니므로 선언 즉시 사용할 수 없다. 반드시 new 연산자로 메모리를 할당받아 초기화해야 한다.
- 데이터 저장에 사용된 기억 장소가 파괴되는 시기가 다르다. 값 타입은 변수를 선언한 메서드가 종료될 때나 소속된 객체가 사라질 때 자동으로 파괴된다. 참조 타입은 더 이상 참조하는 변수가 없을 때 가비지 컬렉터에 의해 파괴된다.
- 같은 타입의 변수로 대입할 때의 효과가 다르다. 값 타입은 복사에 의해 완전한 별개의 사본이 생성되며 복사 한 사본과 원본은 별개의 변수이다. 이 상태에서 사본을 변경해도 원본은 원래 값을 그대로 유지하며 원본을 바꿔도 사본이 변경되지는 않는다. 완전히 다른 두개의 변수가 생성되는 것이다. 이에 비해 참조 타입끼리의 대입은 힙에 할당된 데이터를 참조하는 참조자가 하나 더 늘어날 뿐 별도의 메모리가 추가로 할당되는 것은 아니다. 그래서 둘 중 하나를 변경하면 상대쪽도 같이 변경된다.

@변수의 범주
메서드를 호출할 때 인수로 값 타입과 참조 타입을 모두 전달할 수 있다. 인수 전달이란 메서드의 형식 인수에 호출원의 실인수를 대입하는 것이므로 형식 인수와 실인수의 관계는 앞서 연구해 본 바와 같다. 값 타입은 사본이 전달되며 참조 타입은 참조자가 전달되므로 메서드 내에서 형식 인수를 변경할 때의 효과가 다르다. 다음은 C#의 7개의 변수의 범주이다.
- 지역변수: 메서드의 내부 또는 특정한 {} 블록 내에 선언되는 변수이다. 블록 내에서만 사용되며 별도의 초기값 대입이 없으면 쓰레기 값을 가지며 메서드나 블록이 종료되면 자동으로 사라진다. 메서드가 재귀 호출되면 호출될 때마다 새로 생성된다. 정식 명칭은 블록 범위 변수이다.
- 인스턴스 변수: 클래스 선언문 내에 선언되며 클래스 타입의 객체에 소속된다. 객체가 생성될 때 같이 생성되고 객체가 파괴될 때까지 존재한다. 흔히 필드라고 부르는 멤버 변수가 이 범주에 속한다.
- 정적 변수: 클래스 내에 static 키워드와 함께 선언되며 객체가 아닌 클래스에 소속된다. 정적 변수는 객체가 생성되기 전에 이미 존재하며 프로그램이 종료되어야 사라진다. C의 전역 변수와 비슷한 특성을 가지되 클래스에 소속된다는 점이 다르다. C#에서 진정한 의미의 전역변수는 존재하지 않는다.
- 배열 요소: 배열의 한 요소로 생성된다. 배열이 생성될 때 같이 생성되며 배열이 해제될 때 파괴된다. 선언문에 초기값 목록이 있으면 이 목록대로 초기화되며 그렇지 않으면 디폴트값(보통0)으로 초기화된다.
-값 인수: 메서드의 인수로 선언되며 메서드가 호출될 때 생성된다. 호출원에서 전달한 실인수의 값으로 초기화되며 메서드가 리턴할때 파괴된다.
-참조 인수: 값 인수와 같되 앞에 ref라는 키워드를 붙인다. 실인수의 값으로 초기화되지 않고 실인수를 가리키는 참조자로 초기화된다.
- 출력용 인수: 참조 인수와 같되 앞에 out라는 키워드를 붙인다. 참조 인수로 전달되는 실인수는 반드시 초기화되어야 하지만 출력용 인수는 초기화되지 않아도 상관없다. 메서드는 출력용 인수에 값을 담아 호출원으로 돌려보내며 리턴하기 전에 반드시 대입해야 한다.
저작자 표시
신고
Trackback 0 | Comment 0
클래스는 객체 지향 프로그래밍의 중심이다. 닷넷의 기본 라이브러리는 클래스 라이브러리이므로 모든 것들이 클래스로 되어 있다. 따라서 닷넷을 잘 활용하기 위해서는 클래스를 만들고 활용하는 방법을 속속들이 잘 알고 있어야 한다. 클래스는 속성을 표현하는 데이터와 동작을 기술하는 함수의 묶음으로 정의되며 유식한 표현으로 필드와 메서드를 캡슐해 놓은 것이다.
기본적인 개념은 C++이나 자바의 클래스와 똑같지만 닷넷의 클래스는 C++에 비해 훨씬 더 기능적으로 확장되었으며 새로운 개념들이 존재한다. C++의 클래스는 변수와 함수를 가지는 정도이지만 닷넷의 클래스에는 이 외에도 프로퍼티, 델리게이트, 인덱서 등이 더 포함된다. 우리는 닷넷 라이브러리의 무수한 클래스들이 제공하는 메서드, 필드, 프로퍼티 등을 활용하여 원하는 프로그램을 빠르고 쉽게 작성할 수 있다.
저작자 표시
신고

'Study > C#' 카테고리의 다른 글

[C# : 현재 실행중인 Process 목록 구하기]  (0) 2010.08.01
[C# : 값 타입(Value)과 참조 타입(Reference)  (0) 2010.07.25
[C# : 클래스]  (0) 2010.07.25
[C# : 배열의 메서드]  (0) 2010.07.25
[C# : 콘솔의 여러가지 기능]  (0) 2010.07.25
[.NET : 닷넷의 네임스페이스]  (0) 2010.07.25
Trackback 0 | Comment 0
배열은 System.Array 클래스로부터 상속받아 만들어진다. Array 클래스에는 배열을 관리하는 다음과 같은 메서드와 프로퍼티들이 포함되어 있다. 이 메서드들만 사용해도 배열에 대한 검색, 정렬 등의 기본적인 자료 관리가 가능하다.

(메서드, 프로퍼티)GetLength(n) - (설명)n차원의 요소 개수를 조사한다.
(메서드, 프로퍼티)GetUpperBound(n) - (설명)n차원의 마지막 요소 첨자를 조사한다. 개수보다 항상 1작다.
(메서드, 프로퍼티)Length - (설명)배열 요소의 총 개수를 조사한다. 모든 차수의 곱과 같다.
(메서드, 프로퍼티)Rank - (설명)배열의 차수를 조사한다.
(메서드, 프로퍼티)Sort - (설명)배열 요소들을 크기순으로 정렬한다. 일정 범위의 요소들만 정렬할 수도 있다.
(메서드, 프로퍼티)Reverse - (설명)배열 요소들의 순서를 반대로 뒤집는다. 일정 범위의 요소들만 뒤집을 수도 있다.
(메서드, 프로퍼티)BinarySearch - (설명)이분 검색으로 요소를 찾는다. 검색된 경우 그 첨자가 리턴된다. 이 메서드를 호출하려면 배열이 정렬되어 있어야 한다.
(메서드, 프로퍼티)Clear - (설명)지정한 범위의 요소들을 삭제하여 기본값으로 만든다.


저작자 표시
신고

'Study > C#' 카테고리의 다른 글

[C# : 값 타입(Value)과 참조 타입(Reference)  (0) 2010.07.25
[C# : 클래스]  (0) 2010.07.25
[C# : 배열의 메서드]  (0) 2010.07.25
[C# : 콘솔의 여러가지 기능]  (0) 2010.07.25
[.NET : 닷넷의 네임스페이스]  (0) 2010.07.25
[.NET : 닷넷의 장점]  (0) 2010.07.25
Trackback 0 | Comment 0
Console 클래스에는 ReadLine, WriteLine 같은 기본적인 입출력 메서드 외에도 콘솔 관리를 위한 여러가지 멤버들이 제공된다. 어떤 멤버는 함수처럼 필요할 대 호출할 수 있는 메서드이고 어떤 것으 값을 읽고 쓰는 프로퍼티 형태로 되어 있다. 이 중 당장의 실습에 쓸만한 것들만 정리해보자.

(멤버)Title - (설명)콘솔 창의 제목 문자열이다.
(멤버)BackgroundColor, ForegroundColor - (설명)전경색, 배경색의 색상이다.
(멤버)CursorSize - (설명)커서의 높이를 지정한다.
(멤버)CursorVisible - (설명)커서의 보임/숨김을 지정한다.
(멤버)CursorLeft, CursorTop - (설명)커서의 현재 위치이다.
(멤버)Clear() - (설명)화면을 지운다.
(멤버)Beep() - (설명)삑 소리를 낸다. 
(멤버)ResetColor() - (설명)디폴트 색상으로 변경한다. 
(멤버)SetCursorPosition(x,y) - (설명)커서의 위치를 옮긴다. 
뒤에 괄호가 붙은 것은 메서드이며 그렇지 않은 것은 프로퍼티이다 프로퍼티는 변수처럼 값을 읽거나 쓸 수 있는 일종의 멤버변수라고 생각하면 된다. Console의 멤버는 모두 static이므로 객체 없이도 Console클래스로부터 바로 호출하거나 액세스 할 수 잇다.  

저작자 표시
신고

'Study > C#' 카테고리의 다른 글

[C# : 클래스]  (0) 2010.07.25
[C# : 배열의 메서드]  (0) 2010.07.25
[C# : 콘솔의 여러가지 기능]  (0) 2010.07.25
[.NET : 닷넷의 네임스페이스]  (0) 2010.07.25
[.NET : 닷넷의 장점]  (0) 2010.07.25
[.NET : 닷넷의 구성요소]  (0) 2010.07.25
Trackback 0 | Comment 0
네임스페이스의 기본적인 기능은 명칭의 선언 영역을 격리하여 명칭끼리의 충돌을 방지하는 것이지만 클래스를 기능별로 분류하는 역할도 한다. 닷넷의 라이브러리는 워낙 방대하기 때문에 모든 클래스들을 같은 범위에서 정의하면 명칭 충돌뿐만 아니라 명칭 검색 시간도 굉장히 오래 걸릴 것이다. 그래서 클래스들을 기능에 따라 그룹을 분류하여 네임스페이스에 체계적으로 정리해 놓았다. 닷넷의 루트 네임스페이스는 System이며 System안에 기능별로 네임스페이스가 나누어져 있고 이 안에 클래스들이 정의되어 있다. 네임스페이스가 3중, 4중으로 중첩되어 있는 경우도 많다. 닷넷 라이브러리의 주요 네임스페이스는 다음과 같다. 이 네임스페이스 체계는 닷넷이 정의하는 것이므로 언어에 상관없이 동일하다. 

(네임스페이스)System - (설명)타입, 메모리 관리 등 핵심 클래스 
(네임스페이스)System.Collections - (설명)배열, 연결 리스트 등의 컬렉션 클래스 
(네임스페이스)System.IO - (설명)파일 입출력 및 네트워크 관련 클래스 
(네임스페이스)System.Windows.Forms - (설명)윈도우즈 폼과 컨트롤
(네임스페이스)System.Drawing - (설명)GDI+ 
(네임스페이스)System.Web - (설명)웹 개발에 관련된 클래스 
(네임스페이스)System.Xml - (설명)XML 관련 클래스들 
(네임스페이스)System.Security - (설명)보안, 암호, 권한 관련 클래스 
해당 기능을 쓰고 싶다면 기능을 제공하는 클래스들의 소속 네임스페이스에 대한 using 선언을 해야 하며, 그러기 위해서는 어떤 클래스가 어떤 네임스페이스 소속인지를 알아야 한다. 

using System; 
선언은 System 네임스페이스 안에 정의된 클래스들을 사용할 것이므로 준비하라는 지시사항이다. 컴파일러는 이 선언을 읽고 이후 나타나는 명칭들이 using 선언된 네임스페이스에 있는지 검색해 볼 것이다. using선언은 C의 #include와 유사해 보이지만 물리적인 파일을 포함하는 것이 아니라 논리적인 네임스페이스를 참조한다는 점이 다르다. 
using 선언은 꼭 필요한 것들만 선언하는 것이 좋다. 닷넷 라이브러리의 모든 네임스페이스들을 using 선언해 놓으면 명칭들을 자유롭게 쓸 수 있어서 좋기는 하겠지만 컴파일러가 명칭을 찾아야 할 범위가 넓어지므로 컴파일 시간이 오래 걸리고 명칭 충돌 확률이 높아진다.  
저작자 표시
신고

'Study > C#' 카테고리의 다른 글

[C# : 배열의 메서드]  (0) 2010.07.25
[C# : 콘솔의 여러가지 기능]  (0) 2010.07.25
[.NET : 닷넷의 네임스페이스]  (0) 2010.07.25
[.NET : 닷넷의 장점]  (0) 2010.07.25
[.NET : 닷넷의 구성요소]  (0) 2010.07.25
[.NET: 닷넷의 구조]  (0) 2010.07.25
Trackback 0 | Comment 0
@장점
- 닷넷의 가장 큰 장점은 플랫폼에 독립적인 응용프로그램을 만들 수 있다는 것이다. 플랫폼 독립성은 중간 코드와 JIT 컴파일러에 의해 구현된다. 닷넷이 필요해진 이유이기도 하다 소프트웨어를 딱 한 번만 작성해서 수정없이 어디에서나 실행된다는 것은 정말 큰 매력이다.
- 언어 상호 운용이 가능하다. CLS를 만족하고 관리코드를 생성해 낼 수 있다면, 어떤 언어로든 닷넷 응용 프로그램을 개발할 수 잇다. 오로지 자바 언어만 인정하는 자바와는 비교되는 부분이다. 언어 상호 운용성은 언어 독립성보다는 한 단계 더 상위의 개념으로서 다른 기종의 언어끼리 교차 호출, 교차 상속, 교차 디버깅 까지도 가능하다.
- 닷넷은 플랫폼 자체가 객체 지향적이며 닷넷 언어들도 모두 완전한 객체 지향언어이다. C수준의 API 함수로만 구동되는 윈도우즈와 비교되는 부분이다. 객체 지향은 절차식에 비해 직관적이고 개발 속도가 빨라 생산성이 높고 배우기도 훨씬 더 쉽다.
- 응용 프로그램을 배포하기 쉽다. 어셈블리가 자신에 대한 정보인 메타 데이터를 내장하고 있으므로 단순히 복사하기만 하면 설치 완료된다. 레지스트리에 의존하는 COM과는 달리 시스템에 부하를 주지 않으며 DLL처럼 덮어쓰기에 의해 이전 프로그램이 영향을 받는 경우도 없다.
- 프로그래밍 환경이 아주 쾌적하다. CLR은 가비지 컬렉션 기능을 제공하며 할당한 객체를 해제 하지 않아도 자동으로 해제한다. C++은 할당 후 반드시 직접 해제해야 하는데 이런 문제로 인해 여러 가지 부작용이 나타나고 메모리 누수로 인해 시스템에도 악영향을 미쳤다. 닷넷에서는 이런 문제가 없어 프로그래밍하기 편리하다. 필요한 만큼 생성해서 쓰고 다 쓴 후 그냥 내버려두면 된다. 또한 비주얼 스튜디오 닷넷 같은 막강한 컴파일러의 지원을 받을 수 있다. .
- 닷넷의 활용범위는 광범위하다. 일반적인 응용프로그램뿐만 아니라 데이터베이스 접속도 할 수 있으며 웹 응용 프로그램 개발도 지원한다. 분산 환경의 서버, 클라이언트도 작성할 수 있고 모바일 응용 프로그램까지도 만들 수 있어 필요한 거의 대부분의 응용 프로그램 제작이 가능하다.
- 방대한 양의 클래스 라이브러리(BCL)가 제공된다. BCL에는 윈폼, 웹폼, ADO, 리모팅 등의 기능을 제공하는 클래스들이 체계적으로 잘 정리되어 있다. 그 뿐만 아니라 XML, 정규식, 이미지 출력, 네트워킹 등 웬만한 기능이 다 포함되어 있어 공짜로 쓸 수 있다. 게다가 BCL은 개별 언어가 아닌 닷넷 플랫폼에 의해 제공되는 것이므로 모든 닷넷 지원 언어들이 이 라이브러리의 서비스를 받을 수 있다. 닷넷 프레임워크는 닷넷 언어들이 공유하는 거대 규모의 라이브러리이다.
저작자 표시
신고

'Study > C#' 카테고리의 다른 글

[C# : 배열의 메서드]  (0) 2010.07.25
[C# : 콘솔의 여러가지 기능]  (0) 2010.07.25
[.NET : 닷넷의 네임스페이스]  (0) 2010.07.25
[.NET : 닷넷의 장점]  (0) 2010.07.25
[.NET : 닷넷의 구성요소]  (0) 2010.07.25
[.NET: 닷넷의 구조]  (0) 2010.07.25
Trackback 0 | Comment 0

닷넷은 플랫폼 독립성과 언어 독립성을 확보하기 위해 다음과 같은 여러가지 장치들을 제공한다. 대부분 Common으로 시작하는데 그만큼 닷넷이 공용성과 일반성에 역점을 두었다는 뜻이다.

@CLR(Common Language Runtime)
- 닷넷 실행 엔진을 의미한다. 자바의 가상 머신(JVM)과 개념적으로 동일하다. 런터임이란 프로그램이 실행되기 위한 핵심 모듈들의 집합이다. CLR은 닷넷 프로그램 실행에 필수적인 런타임들의 집합이되 이름이 의미하듯이 모든 언어에 공용으로 사용된다. 어떤 언어로 만든 프로그램이든지 IL을 JIT로 컴파일 한후 CLR과 연결되므로 제작 언어에 상관없이 CLR의 서비스를 받을 수 있다. 닷넷 응용프로그램은 운영체제와 직접 통신하지 않으며 반드시 CLR을 거쳐야 한다. CLR은 물론 플랫폼별로 따로 제공된다. CLR이 호스트 운영체제와의 통신을 책임지므로 응용 프로그램은 운영체제에 대해서 독립적이다. 응용프로그램은 호스트 운영체제는 거의 신경 쓸 필요가 없고 오로지 CLR과의 약속만 잘 지키면 된다.

@CTS(Common Type System)
- CTS는 모든 닷넷 언어들이 공동으로 사용하는 타입 체계를 정의한다. 언어끼리 함수를 호출하려면 인수나 리턴값에 대해 서로의 타입을 알 수 있어야 한다. 예를 들어, C++에서 int형의 값을 넘기면 VB에서는 Integer 타입으로 이 값을 받아 들일 것이다. 이때 int와 Integer는 같은 타입이라는 것을 두 언어가 모두 알고 있어야 하며 물리적인 포맷이 같아야 한다. CTS는 닷넷 지원 언어들이 공동으로 사용하는 타입에 대한 약속이며, IL에서 사용 가능한 타입들의 집합이다. CTS에는 정수, 실수 같은 기본형뿐만 아니라 클래스, 배열 같은 좀 더 복잡한 타입까지 계층이 잘 정의되어 있다.

@CLS(Common Language Specification)
- 각각의 언어들은 다른 언어와 구분되는 아주 고유한 특성들을 가지기도 한다. 예를 들어 명칭의 대소문자를 구분하는가, 다중 상속은 지원하는가, 연산자 오버로딩은 가능한가 등은 언어마다 다르다. 이렇게 언어마다 특성이 각각 다르면 언어 상호 운용이 아주 어려워진다. 그래서 닷넷은 언어들이 지켜야 하는 최소한의 사양을 정의하는데 이를 CLS라 한다. CLS는 닷넷용 언어가 되기 위한 최소한의 규정이다.

@BCL
- 닷넷에는 여러 가지 복잡한 기능을 제공하는 바대한 기본 클래스 라이브러리(BCL)이 탑재되어 있다. 닷넷은 플랫포이면서 라이브러리라고 할 수 있는데 사실 플랫폼은 응용 프로그램 제작을 위한 라이브러리를 포함할 수밖에 없다. 플랫폼이 라이브러리를 제공하지 않으면 응용프로그램 개발자들이 해야 할 일들이 너무 많아지기 때문이다. 마치 윈도우즈가 방대한 Win32 API를 제공하는 것처럼 닷넷도 같은 개념의 BCL을 제공한다. BCL은 마이크로소프트가 미리 작성하여 제공하는 잘 정리된 클래스들의 거대한 집합이다. 제공되는 클래스드릐 규모가 엄청날 뿐만 아니라 객체 지향적이고 문서화도 잘 되어 있어서 잡스러운 처리들의 대부분은 BCL을 호출하기만 하면 된다.

BCL에 포함된 클래스의 목록과 기능
- 기본 타입에 대한 정보 제공
- 배열, 연결 리스트, 큐 등의 컬렉션 클래스
- 그래픽 라이브러리(GDI+)
- 스레드와 동기화 클래스
- 각종 컨트롤
- 파일 입출력
- 네트워크와 인터넷 프로그래밍
- 데이터베이스 액세스
응용 프로그램 제작에 필요한 기능들의 대부분이 BCL에 이미 구현되어 있으므로 공짜로 쓸 수 있는 기능들이 아주 많다. 더구나 BCL은 언어 차원이 아니라 닷넷 플랫폼 차원에서 제공하는 라이브러리이므로 모든 언어들이 공유할 수 있다는 면에서 더 매력적이다.
저작자 표시
신고

'Study > C#' 카테고리의 다른 글

[C# : 배열의 메서드]  (0) 2010.07.25
[C# : 콘솔의 여러가지 기능]  (0) 2010.07.25
[.NET : 닷넷의 네임스페이스]  (0) 2010.07.25
[.NET : 닷넷의 장점]  (0) 2010.07.25
[.NET : 닷넷의 구성요소]  (0) 2010.07.25
[.NET: 닷넷의 구조]  (0) 2010.07.25
Trackback 0 | Comment 0
@플랫폼 독립
- 닷넷은 한번 작성한 프로그램을 운영체제에 상관없이 실행할 수 있다. 또한 닷넷 프로그램을 개발하는 언어에도 제약이 없어서 최소한의 규격을 만족하는 모든 언어를 활용할 수 있다. 이것이 가능한 이유는 닷넷 지원 컴파일러들이 IL(Intermediate Language)이라고 하는데 자바의 바이트 코드와 동일한 개념이다. 
물론 IL은 어디까지나 중간 코드일뿐이므로 직접적으로 실행할 수는 없다. IL이 실행되려면 기계가 이해할 수 있는 네이티브 코드로 변환하는 과정을 거쳐야 한다. 중간 코드를 기계어로 컴파일하는 작업은 JIT(Just In Time)컴파일러가 담당하는데 각 플랫폼별로 JIT컴파일러가 따로 제공된다. 그래서 JIT컴파일러만 바꾸면 어떤 플랫폼에서나 실행 가능한 것이다. 
닷넷 프로그램은 IL로만 컴파일되고 실행 직전에 플랫폼별 JIT 컴파일러에 의해 기계어 코드로 변환되어 실행된다. 물론 중간 코드를 생성함으로 인한 불이익도 있다. CPU가 IL을 직접해석하지 못하므로 컴파일 과정을 거쳐야 실행할 수 있는 번거로움이 있고 컴파일 후 실행단계를 거치므로 네이티브 언어보다 성능이 떨어진다. 하지만 인터프리터 방식으로 동작했던 초기의 자바와는 달리 닷넷의 JIT는 컴파일 방식으로 동작하므로 속도가 더 빠르다. 또한 꼭 필요한 부분만 컴파일하고 한번 컴파일한 것은 캐시한 후 두번 컴파일 하지 않도록 되어 있다.

 
저작자 표시
신고

'Study > C#' 카테고리의 다른 글

[C# : 배열의 메서드]  (0) 2010.07.25
[C# : 콘솔의 여러가지 기능]  (0) 2010.07.25
[.NET : 닷넷의 네임스페이스]  (0) 2010.07.25
[.NET : 닷넷의 장점]  (0) 2010.07.25
[.NET : 닷넷의 구성요소]  (0) 2010.07.25
[.NET: 닷넷의 구조]  (0) 2010.07.25
Trackback 0 | Comment 0

강군v's Blog is powered by Daum & tistory

 

티스토리 툴바