'C#/Programming C#'에 해당되는 글 5건

  1. 2012/01/10 Chapter 5 - 클래스 기초
  2. 2012/01/10 Chapter 4 - C# 언어 구문 II - 연산자, 제어문
  3. 2011/11/07 Chapter 3 - C# 언어 구문 I - 프로그램 구성 요소, 데이터 타입, 변수, 배열
  4. 2011/11/07 Chapter 2 - 객체지향 개념
  5. 2011/11/07 Chapter 1 - C# 프로그래밍 기초

Chapter 5 - 클래스 기초

C#/Programming C# 2012/01/10 14:33
* 개요 설명
우리가 클래스를 정의하는 것은 하나의 데이터 타입을 만드는 것과 같습니다. 그래서 클래스를 사용자 정의 데이터 타입(user-defined data type)이라고 하는 것이지요.

클래스는 클래스명 앞에 'class'라고 하는 키워드를 사용하여 정의합니다.
class MyClass {
	.....
}

클래스는 생성자(constructor), 소멸자(destructor), 상수(constant), 필드(field), 메서드(method), 속성(property), 인덱서(indextor), 연산자(operator)등을 멤버로 포함할 수 있습니다.

C# 언어에서는 클래스의 특성(attribute)을 필드(field)로 구현합니다.
class MyClass {
	private int myField // 필드 멤버
}
또한, 속성(property)으로 특성을 구현할 수도 있습니다.
class MyClass {
	public int MyProperty { // 속성 멤버
		set {
			// 속성 설정 구현 코드
		}
		get {
			// 속성값 반환 구현 코드
		}
	}
}

또한, 클래스의 행위(behavior)는 메서드(method)로 구현합니다.
class MyClass {
	public void MyMethod() { // 메서드 멤버
		// 메서드 구현코드
	}
}
클래스를 정의한 후에는 new 연산자를 사용하여 객체 즉, 클래스의 인스턴스(instance)를 생성할 수 있습니다. 이때 생성된 인스턴스는 힙(heap) 메모리에 저장됩니다.
MyClass myclass = new MyClass();
new 연산자가 호출될 때 해당 클래스의 생성자(constructor)가 호출됩니다. 생성자는 클래스명과 같은 이름의 반환값이 없는 메서드로 , 주로 멤버 필드를 초기화 하기 위해 정의합니다.
class MyClass {
	public MyClass() {	// 생성자
		// 멤버 필드 초기화 코드
	}
}
인수가 있는 생성자도 있을 수 있으며, 여러 개의 생성자를 동시에 정의할 수도 있습니다.
class MyClass {
	public MyClass() {	// 생성자
		// 멤버 필드 초기화 코드
	}
	public MyClass(int param) { // 인수가 한 개인 생성자
		// 멤버 필드 초기화 코드
	}
}

만약 클래스에 생성자를 정의하지 않았다면 C# 컴파일러는 인수가 없는 디폴트 생성자(default constructor)를 자동적으로 생성해 줍니다.

new 연산자를 사용하여 클래스의 인스턴스를 생성한 후에는 참조 변수를 통하여 해당 클래스에 공개(public)로 정의된 멤버를 호출할 수 있습니다. 공개 멤버(public)이란 public 키워드를 사용하여 정의합니다. 만약 비공개(private)로 정의함으로써 클래스 외부의 다른 클래스 외부의 다른 클래스의 객체에서 접근할 수 없도록 할 수 있습니다. 

사용자 정의 데이터 타입을 정의하는데 구조체(structure)를 사용할 수도 있습니다. 구조체는 struct 키워드를 사용하여 정의한다. 구조체는 값 타입이기 때문에 new 연산자를 사용하여 인스턴스를 생성하지 않고 단순히 구조체 변수를 정의합니다. 이때 스택(stack) 메모리에 할당합니다.
struct Point {
	public int x;
	public int y;
}


Point pt;
pt.x = 20;
pt.y = 20;
열거형(enumeration)이란 열거자(enumerator)란 이름이 부여된 일력의 정수 상수로 구성되는 데이터 타입니다. 열거형의 디폴트 데이터 타입은 int 입니다. 필요하다면 열거형의 데이터 타입을 바꿀 수도 있습니다. 이때 char 데이터 타입을 제외한 다른 정수 타입만 가능합니다.
enum WeekDay {Mon, Tue, Wed, Thu, Fri, Sat, Sun}
네임스페이스(namespace)는 영역을 구분하는데 사용합니다.
namespace MyNameSpace {
	// 네임스페이스 영역에 속해있는 타입정의
}
네임스페이스 안에는 클래스(class), 인터페이스(interface), 구조체(struct), 열거형(enum), 위임(delegate) 타입이나 다른 네임스페이스가 포함될 수 있습니다.
namespace MyNameSpace {
	class MyClass {
		// 멤버 추가
	}
}
다른 네임스페이스에 포함된 클래스에 접근하기 위해서는, 클래스명 앞에 네임스페이스명을 지정하고 구분자(.)를 붙입니다.
MyNameSpace.MyClass myclass = new MyNameSpace.MyClass();

또는, using 키워드를 사용하여 해당 네임스페이스를 사용할 것임을 선언한 후 네임스페이스를 지정하지 않고 해당 네임스페이스에 포함된 클래스에 접근할 수 있습니다.
using MyNameSpace;
MyClass myclass = new MyClass();
저작자 표시
Trackback 0 : Comment 0

Chapter 4 - C# 언어 구문 II - 연산자, 제어문

C#/Programming C# 2012/01/10 14:15
 * 제어문
C# 언어에서도 case 레이블에 비교값의 범위를 지정할 수는 없습니다. 또한 아래와 같은 구문도 사용을 할수도 없음
switch(score) {
case 91:
// 생략...
case 99:
case 100:
	// Nooo!! 모든 case 레이블에는 break나 return, throw, goto문이 와야 합니다.
	rate = 1;
	break;
....
하지만 goto 문을 사용하여 아래와 같은 방법을 사용할수는 있음 
switch(score) {
case 91 :
	goto case 100;
	// 생략...
case 99 :
	goto case 100;
case 80 :
	goto default;
case 100 :
	rate = 1;
	break;
default :
	rate = 4;
	break;
....

 
저작자 표시
Trackback 0 : Comment 0

Chapter 3 - C# 언어 구문 I - 프로그램 구성 요소, 데이터 타입, 변수, 배열

C#/Programming C# 2011/11/07 21:06
* 개요 설명

// C# 프로그램 골격
using System;
namespace MyNamespace1
{
	class MyClass1
	{
	}

	struct MyStruct
	{
	}

	interface IMyInterface
	{
	}

	delegate int MyDelegate();
		
	enum MyEnum
	{
	}

	namespace MyNameSpace2
	{
	}

	class MyClass2 
	{
		public static void Main(string[] args)
		{
		}
	}
}


- C# 언어는 식별자의 대소문자를 구별합니다. 다시 말해 MyClass1과 myclass1은 서로 다른 식별자가 되는 것입니다.

* 식별자 사용시 주의 사항
  • 모든 식별자는 영문자, 밑줄문자(_), 달러 기호($)로 시작해야 합니다.
  • 식별자에 숫자를 포함시킬 수는 있지만, 숫자로 시작할 수는 없습니다.
  • 식별자에는 공백 문자를 포함시킬 수 없습니다.
  • 식별자는 대소문자를 구별합니다.
  • C# 키워드를 식별자로 사용할 수는 없습니다.

* 강제 타입 변환 주의 사항
강제 타입 변환을 한 다는 것은 프로그래머가 컴파일러에게 '강제 타입 변환으로 발생하는 모든 결과는 내가 책임 질테니까 C# 컴파일러는 안심하고 타입을 변환해주길 바란다.' 라고 말하는 것과 같다. 그러므로 강제 타입 변환을 하면 컴파일 에러가 발생하지 않는다.

 * 문자열 리터럴
C#는 문자열을 C나 C++ 와는 다른 방식으로 처리합니다. C나 C++에서 문자열은 '널(NULL)문자로 끝나는 문자의 배열'로 정의합니다. 그러나 C#는 문자열을 string 클래스의 객체(object)로서 정의합니다. 

저작자 표시
Trackback 0 : Comment 0

Chapter 2 - 객체지향 개념

C#/Programming C# 2011/11/07 20:48

항상 나오는 소리 이지만.. 객체지향(object-oriented)이란...
책에 첫 마디는 언제나 이렇다... "여러분이 프로그래밍을 하기 위해서는 객체지향이란 개념을 반드시 이해해야 한다."
"그래서 많은 프로그램머들이 객체지향 개념은 어렵다고 이야기 합니다. 하지만 이 책을 천천히 따라해보면 쉽게 알수 있을것이다."  과연... 이해 할수 있을까?
갑자기 이런 생각이... 한번도 객체지향이란 소리에 겁을 먹지는 않았던거 같다.. 왜냐.. 첨에 개발을 배울때 객체지향 개념부터 말하기 때문에... 말은 어렵다고해도 이미 어렵다고하면서도 다 소개를 하기 때문에...ㅋㅋ

다시 한번 정리 하면.. 객체지향의 기본적인 원리는 추상화(abstraction), 캡슐화(encapsulation), 모듈성(modularity), 계층성(hierarchy)라는 4가지 개념으로 요약할수 있다. 
저작자 표시
Trackback 0 : Comment 0

Chapter 1 - C# 프로그래밍 기초

C#/Programming C# 2011/11/07 20:21
모든 개발 언어에 기초 라고 하는 Hello World를 구성해 보자..
맨날 하는것이지만 이해를 못하겠당. 왜 Hello World 를 하는것인지.. 쩝쩝...

그래도 해보자.. 에휴

using System;
class Hello
{
  public static void Main()
  {
    Console.WriteLine("Hello World?");
  } 
} 


저작자 표시
Trackback 0 : Comment 0