Properties

2011. 3. 13. 00:51 from PROGRAMMING/C#.NET

■ Properties(속성)

private한 field의 값을 읽고, 쓰고, 연산할 수 있도록 하는 유연한 메카니즘을 제공하는 멤버.

public data 멤버처럼 사용될 수 있으며, 실은, 접근자(accessors)라고 불리는 특별한 메서드 이다.

Properties는 데이타가 쉽게 접근할 수 있게 하고, 메서드의 안정성과 유연성을 높여준다.

 

■ Properties Overview

1. 코드의 구현이나 확인을 숨긴상태에서, 클래스가 값(values)을 가져오고(getting) 설정하는(setting)을 공개적인 것으로 드러낼 수 있다.

2. Get property accessor는 property value을 리턴하는 데 사용되고, set accessor는 new value을 할당하는데 사용된다.

이러한 접근자는 다른 접근 레벨을 가진다.

3.value 키워드는 set accessor에 의해 할당된 값을 정의한다.

4. set accessor가 구현되지 않은 properties는 읽기 전용(read only)이다.

5.  지정된 접근자 코드(custom accossor code)를 요구하지 않는 간단한 properties를 위해,

자동으로 구현된 프로퍼티(auto-implemented properties)를 사용하는 것을 생각해 볼 수 있다.

 

■ Using Properties

형식

지정자 타입 이름

{

       get { return ; }

       set { 변경; }

}

 

데이터 멤버 대신 프로퍼티를 쓰는 이유

 

캡슐화(=정보의 은닉)를 위해

객체지향언어는 캡슐화를 특징으로 함. 일반 변수를 private으로 선언하여 외부로부터 접근을 막고 public으로 된 프로퍼티를 선언하여 객체를 보호할 수 있음.


 

See Also

Properties (C# Programming Guide) in msdn

Using Properties (C# Programming Guide) in msdn

'PROGRAMMING > C#.NET' 카테고리의 다른 글

Constructor and Destructor  (0) 2011.03.12
static and instance  (0) 2011.03.11
chap.3 타입 2. 참조 타입  (0) 2011.03.08
chap.3 타입 1.값 타입  (0) 2011.03.08
[0304과제] 연산자 종류(C, C#)  (0) 2011.03.06
Posted by 마마필로 :

■  생성자(Constructor)

객체지향프로그래밍(OOP: objective-oriented programming)에서 쓰이는 객체 초기화 함수.

(네이버 용어사전 참고)

 

■ 생성자를 쓰는 이유(생성자의 역할)

1. 필드 내 정보 보호

→ 캡슐화의 원칙상 필드는 가급적이면 숨기는 것이 좋다.

→ 중요한 필드가 외부로 공개되어 있으면 아무나 정보를 건드릴 수 있어 안전하지 못하다.

→ 따라서 객체는 적당한 수준의 정보은폐를 스스로 해야 한다.

 

2. 객체(클래스의 필드) 초기화

→ 객체가 스스로를 초기화 하지 않음

→ 필드 유효화를 위해 필드에 값 대입 필요

→  Main에서 직접 초기화 하지 않고 생성자를 통해 초기화 가능

 

■ 생성자 사용 규칙

1. 생성자 메서드의 이름은 클래스 이름과 동일해야 한다.

2. 객체의 성질은 public과 static 두가지 사용 가능. 한 개의 클래스에 생성자가 두 개 같이 들어갈 일은 거의 없고, 주로 한개만 사용한다.

3. 사용자가 호출하는 것이 아니므로 리턴할 수 없다. void같은 리턴 타입도 적을 필요 없다.

4. 생성자가 있으면 반드시 인수값을 전달해야 한다.

5. 한 클래스 내에 여러 개의 생성자를 정의 할 수 있다.

6. 한 클래스 내에 정의된, 각 생성자가 요구하는 인수가 다르므로 오버로딩 가능하다.

7. 생성자끼리 호출 가능 하다(호출 문법: :this (인수)). 생성자끼리의 호출로 반복되는 코드 작성을 피할수 있다.

 

■  생성자 호출시기

객체 생성 시에 자동으로 호출

정적생성자(static constructor) → 정적인 멤버가 호출 되는 순간

인스턴스 생성자(public constructor) → 인스턴스 객체가 선언되는 순간. 생성자 호출한 후 객체 만듬.

 

 

■ 소멸자(Destructor)

객체지향프로그래밍(OOP: objective-oriented programmin)에서 쓰이는 객체 파기 함수.

 

[!] 문법적으로 만들어져 있으나 닷넷에서는 가비지 컬렉터(Garbage Collector)에 의해 자원이 관리되므로 소멸자를 쓸일이 거의 없다.

 

■ 파괴하고자 하는 클래스 이름 앞에 ~ 기호를 붙인다.

 

 

See Also

Constructors (C# Proganmming Guide)

Destructors (C# Programming Guide)

IDisposable Interface

how to use constructor (basic)

'PROGRAMMING > C#.NET' 카테고리의 다른 글

Properties  (0) 2011.03.13
static and instance  (0) 2011.03.11
chap.3 타입 2. 참조 타입  (0) 2011.03.08
chap.3 타입 1.값 타입  (0) 2011.03.08
[0304과제] 연산자 종류(C, C#)  (0) 2011.03.06
Posted by 마마필로 :

static and instance

2011. 3. 11. 00:49 from PROGRAMMING/C#.NET

■ 클래스나 필드에 static을 썼을때와 쓰지 않았을 때, 데이터 접근 방법에 차이가 생긴다.

 

■ 클래스의 멤버(혹은 구조체 멤버)에 접근 할 수 있는 방법은,

 1. 정적인(static) 방법(다이렉트로 데이터에 접근 가능)과

 2. 인스턴스(instance, =객체)를 생성해 놓은 후 접근하는 것이 있다.

 

즉, 바로 데이터에 접근하고 싶다면 static 키워드 사용, static을 사용하지 않았다면 인스턴스로 접근 가능하다.

 

static과 instance 접근에 있어 클래스와 구조체 멤버의 차이

using System;

//클래스
public class Product
{
    public static string ModelName; // 상품명 저장 공간-static 사용
    public int UnitPrice;  // 단가-static 사용하지 않음
}

//구조체
public struct Customer
{
    public static string Name; //고객명-static 사용
    public int Age; // 나이-static 사용하지 않음
}

//실행영역
public class Program
    {
        public static void Main(string[] args)
        {
            // Product 클래스의 필드(멤버 변수)를 사용하고자 할때,
            Product.ModelName = "컴퓨터"; //정적(static) 접근
            Product pro = new Product(); // 인스턴스(Instance, 객체) 생성
            pro.UnitPrice = 1000; //객체를 통해 UnitPrice에 접근 가능
            Console.WriteLine("모델명 : {0}, 가격 : {1}", Product.ModelName, pro.UnitPrice);
           
            //Customer 구조체의 멤버에 접근하고자 할때,
            Customer.Name = "홍길동"; //정적(static) 접근
            Customer cust; // 구조체형 변수 선언으로 접근 가능-구조체는 값 타입 므로
            cust.Age = 21;
            Console.WriteLine("고객명 : {0}, 나이 : {1}", Customer.Name, cust.Age);
        }
    }

'PROGRAMMING > C#.NET' 카테고리의 다른 글

Properties  (0) 2011.03.13
Constructor and Destructor  (0) 2011.03.12
chap.3 타입 2. 참조 타입  (0) 2011.03.08
chap.3 타입 1.값 타입  (0) 2011.03.08
[0304과제] 연산자 종류(C, C#)  (0) 2011.03.06
Posted by 마마필로 :

2. 참조 타입

2.1 배열         2.2 문자열         2.3 클래스



2.1 배열 : 동일한 타입의 변수들을 하나의 이름으로 묶어 놓은 것

■ 형식

 

  타입 [] 변수명;

 

int[] arScore;            // 1차원 정수 배열

double[] arRate;        // 1차원 실수 배열

int[,] arSung;            // 2차원 정수 배열

string[,,] arName;      // 3차원 문자열 배열

: []안에 아무것도 없으면 1차원 배열, 배열의 차수는 []안의 콤마수 +1

 

■ 배열 할당

배열형 변수 선언 후, 배열 요소를 저장하기 위한 메모리 할당 필요

(모든 참조형은 new연산자로 실제 메모리를 할당받아야 함)

arScore = new int[5];        // new int 다음에 하나의 크기 지정, 정수형 변수 5개 저장 가능

arSung = new int[2,3];      // new int 뒤에 행과 열을 콤마로 구분하여 지정, 정수 변수를 3개씩2묶음(총6개) 저장가능

 

int [] arScore = new int[5];    // 선언문과 할당문을 한 줄로 쓸수 있음 

 

■ 배열의 초기값

힙에 할당된 배열 요소는 디폴트 값으로 초기화(디폴트 값:  각 타입의 가장 무난한 값. 정수는 0, 논리형은 false, 참조형은 null)

 

int [] arScore = new int[5] { 1, 2, 3, 4, 5 }     // { }안에 초기값 나열 가능

int [] arScore = new int[] { 1, 2, 3, 4, 5 }      // 크기 5 생략 가능. 컴파일러가 개수를 세어 보고 배열의 크기 자동으로 결정

int [] arScore = { 1, 2, 3, 4, 5 }            // 초기값 리스트가 있는 경우 new 연산자 빼고 초기값 리스트만 나열 가능

 

1) 배열의 초기값은 최초할당 할 때 딱 한번 지정 가능. 할당 후 변경 불가

2) 재초기화 시에는 값을 일일이 대입해야 함

 

string[,] arCity = {

{"서울", "용인", "수원", "의정부"},

{"춘천", "홍천", "평창", "양구"},

{"대전", "합덕", "논산", "당진"},

};        // 2차원 배열의 초기화, 각 행의 초기값 개수는 일치해야 함

 

■ 배열 요소의 참조

[]안에 읽고자 하는 요소의 첨자를 적는다. 상수, 변수 다 가능. 첨자는 0부터 시작하며, 최대 첨자는 배열 크기보다 1 작다.

배열에서 유효한 첨자는 0 ~ N-1.

 

using System;

namespace ex0309
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] ar;            //정수형 배열 선언
            ar = new int[5];    //크기 5로 할당
            for (int i = 0; i < 5; i++)
            {
                ar[i] = i * 2;
            }
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine(ar[i]);
            }
        }
    }
}


■ 배열의 메서드

System.Array 클래스로부터 상속받음.

 

'PROGRAMMING > C#.NET' 카테고리의 다른 글

Constructor and Destructor  (0) 2011.03.12
static and instance  (0) 2011.03.11
chap.3 타입 1.값 타입  (0) 2011.03.08
[0304과제] 연산자 종류(C, C#)  (0) 2011.03.06
[0304과제] 자료형(type)의 종류  (0) 2011.03.06
Posted by 마마필로 :

1. 값 타입

1.1 타입의 종류        1.2 내장형        1.3 열거형        1.4 구조체



■ 타입(Type) : 변수의 형식

■ CTS(Common Type System, 공용 타입 체계): CTS는 타입이 어떻게 선언되고, 사용되고, 다루어 지는지를 정의한다. 모든 닷넷용 언어들이 모두 공통의 타입 체계를 따르기 때문에 닷넷 언어끼리는 타입이 호환되어 혼합 프로그래밍이 가능해진다.

 

<CTS의 타입과 언어별 별칭>

 

■ 타입의 분류

1)

이미지출처: http://www.hanb.co.kr/network/view.html?bi_id=151

 

2)

 

■ 닷넷의 타입(CTS가 정의하는 모든 타입)은 단순한 예약어가 아니라 클래스이거나 구조체여서 타입 자체가 필드와 메서드, 프로퍼티들을 가진다.

 

■ 구조체: 타입이 다른 변수들의 집합. 구조체는 값타입이므로 선언되는 동시에 사용 가능. 사용자 정의형(열거 멤버나 필드, 메서드를 정의할 수 있음)

 

<기본형식>

Struct    이름

{

멤버 선언문;

}

 

<예제>

using System;

class CSTest

{

static void Main()

{

Book b;    // Book 타입의 구조체 변수 b 선언

b.Name = "노점상으로 떼돈벌기";        // b의 Name필드 초기화

b.Price = "10000"                              // b의 Price 필드 초기화

// 연산자(=)를 이용하여 구조체의 멤버 액세스

Console.WriteLine("책 제목 : " {0}, 가격 : {1}", b.Name, b.Price);      // 초기화된 구조체 내용 출력

}

}

 

struct Book                                //Book 구조체 선언

{

public string Name;        // Book 구조체의 필드-문자열형(string) 제목(Name)

public int Price;            // Book 구조체의 필드-정수형(int) 가격(Price)

}

 

1) 구조체 멤버의 디폴트 액세스 지정은 private, 외부 공개 멤버들은 반드시 public 액세스 지정

2) 구조체는 기반클래스로 사용할 수 없음. 즉, 구조체로부터 다른 구조체나 클래스를 파생시킬 수 없음

3) 구조체 선언이 Main보다 뒤쪽에 와도 상관없음

4) 구조체는 값 타입이므로 선언후 곧바로 사용 가능. 하지만 클래스(참조 타입)와 사용 방법을 통일하기 위해 new연산자를 쓸 수 있음

 

<new 연산자-통일성, 생성자 호출 위해 사용>

using System;

class CSTest

{

static void Main()

{

Book b = new Book("노점상으로 떼돈벌기", 10000);    //new연산자로 생성자 호출, 구조체 선언과 동시에 초기화 가능

b.OutBook();

}

}

 

struct Book

{

public string Name;

public int Price;

public Book(string aName, int aPrice)    //생성자 정의(제목과 가격을 인수로 받아 자신의 멤버를 초기화 함)

//생성자는 구조체의 타입면과 동일한 이름을 가져야 하며 결과를 리턴할 수 없다.

{

Name = aName;

Price = aPrice;

}

public void OutBook()

{

Console.writeLine("책 제목 : {0}, 가격 : {1}", Name, Price);

}

}

'PROGRAMMING > C#.NET' 카테고리의 다른 글

static and instance  (0) 2011.03.11
chap.3 타입 2. 참조 타입  (0) 2011.03.08
[0304과제] 연산자 종류(C, C#)  (0) 2011.03.06
[0304과제] 자료형(type)의 종류  (0) 2011.03.06
[0221과제] 수퍼팩(C#)  (0) 2011.02.23
Posted by 마마필로 :

1. C의 연산자 종류

 

 

2. C#의 연산자 종류

 

 

'PROGRAMMING > C#.NET' 카테고리의 다른 글

chap.3 타입 2. 참조 타입  (0) 2011.03.08
chap.3 타입 1.값 타입  (0) 2011.03.08
[0304과제] 자료형(type)의 종류  (0) 2011.03.06
[0221과제] 수퍼팩(C#)  (0) 2011.02.23
chap.10 닷넷 클래스  (0) 2011.02.22
Posted by 마마필로 :

■ CTS의 타입과 자료형(type)의 종류

'PROGRAMMING > C#.NET' 카테고리의 다른 글

chap.3 타입 1.값 타입  (0) 2011.03.08
[0304과제] 연산자 종류(C, C#)  (0) 2011.03.06
[0221과제] 수퍼팩(C#)  (0) 2011.02.23
chap.10 닷넷 클래스  (0) 2011.02.22
chap.9 델리게이트  (0) 2011.02.21
Posted by 마마필로 :

///////////////////////////////////미완성 입니다.////////////////////////////////////////

 

using System;

namespace CS0221
{
    class SuperPack
    {
        static void Main(string[] args)
        {
            Emp b = new Emp("이름","나이","키","IQ");
            b.OutEmp;           
        }
    }
}

struct Emp
{
    public string NAME;
    public int AGE;
    public double height;
    public double IQ;
    public Emp(string aName, int aAge, double aHeinght, double aIQ)
    {
        Name = aName;
        Age = aAge;
        Height = aHeight;
        IQ = aIQ;
    }
    public void OutEmp()
    {
        Console.WriteLine("이름 : {0}, 나이 : {1}, 키 : {2}, IQ : {3}", Name, Age, Height, IQ);
    }
}

'PROGRAMMING > C#.NET' 카테고리의 다른 글

[0304과제] 연산자 종류(C, C#)  (0) 2011.03.06
[0304과제] 자료형(type)의 종류  (0) 2011.03.06
chap.10 닷넷 클래스  (0) 2011.02.22
chap.9 델리게이트  (0) 2011.02.21
chap.8 인터페이스  (0) 2011.02.11
Posted by 마마필로 :

1. 루트 클래스

1.1 object 1.2 객체의 비교 1.3 리플렉션

 

2.string

2.1 string의 멤버 2.2 StringBuilder 2.3 서식화 2.4 정규식

 

3. 컬렉션

3.1 ArrayList 3.2 HashTable 3.3 스택과 큐

 

4. 유틸리티 클래스

4.1 DateTime 4.2 Math 4.3 Environment


 

1. object

닷넷 라이브러리 클래스의 가장 상위계층에 존재하는 루트 클래스.

닷넷의 모든 클래스는 선언문에 명시적인 상속 지정이 없더라도 암시적으로 object를 상속받도록 되어 있음.

<object내의 메서드>

 

메서드 

 속성

 설명

 ToString

public virtual   객체를 문자열 형태로 표현. 디폴트로 클래스 이름을 리턴하는데 필요 시 재정의 가능. 
 GetType  public  객테의 타입 정보를 제공하는 System.Type 객체 리턴
 MemberwiseClone  protected  객체의 멤버끼리 일대일 복사. 얕은 복사.
 GetHashCode  public virtual  객체를 검색하기 위한 해시값 리턴.
 Equals

 public virtual

 public static

 두 객체를 비교하여 같은 객체인지 판별. 널 객체와 비교할 수 있는 정적 버전도 중복 정의되어 있음.
 ReferenceEquals  public static  객체가 같은 대상을 가리키고 있는지 비교.
 Finalize 또는 ~Object();  protected virtual  정리 작업을 수행하는 파괴자. Finalize라는 이름을 쓰는 대신 클래스명 앞에 ~를 붙임.

 

2. 리플렉션(Reflection)

실행 중에 클래스나 객체의 타입 정보를 조사하는 기능

실행 중에 다른 모듈에 선언된 인스턴스를 생성, 메서드 호출 가능

 

3. String

닷넷에서 문자열을 표현하기 위한 별도의 클래스.

<String에 포함된 문자열 관리 메서드들>

Insert : 지정한 위치에 문자열 삽입

Remove : 지정한 범위에 문자 삭제

Replace : 지정한 문자를 다른 문자로 대체

Compare : 문자열 객체끼리 비교. 대소문자 구분, 언어 정보 등을 지정할 수 있으며 부분 문자열만 비교도 가능

IndexOf : 문자, 또는 부분 문자열을 검색하여 그 인덱스 리턴. 발견되지 않으면 -1리턴.

IndexOfAny : 주어진 문자집합 중 최초로 검색되는 위치 검색하여 그 인덱스 리턴

LastIndexOf : IndexOf와 같되 역검색

Contains : 부분 문자열이 있는지 조사

SubString : 지정한 위치부터 끝까지 부분 문자열을 만들어 리턴

Trim : 앞뒤의 불필요한 공백 문자 제거

TrimStart : 문자열 앞쪽에 있는 지정한 문자들 제거

TrimEnd : 문자열 뒤쪽에 있는 지정한 문자들 제거

ToLower : 소문자로 변환한 문자열 리턴

ToUpper : 대문자로 변환한 문자열 리턴

PadLeft : 지정한 폭으로 늘리고 왼쪽에 공백 삽입

PadRight : 지정한 폭으로 늘리고 오른쪽에 공백 삽입

Split : 문자열을 특정 문자를 기준으로 한 부분 문자열 배열로 나눔

Format : 서식 조립

 

4. StringBuilder

문자열을 반복적으로 조작할 때 사용

 

5. 컬렉션(Collection)

변수들의 조직적인 집합.

ArrayList / HashTable / 스택 / 큐

 

6. 유틸리티 클래스

DateTime / Math / Environment

 

'PROGRAMMING > C#.NET' 카테고리의 다른 글

[0304과제] 자료형(type)의 종류  (0) 2011.03.06
[0221과제] 수퍼팩(C#)  (0) 2011.02.23
chap.9 델리게이트  (0) 2011.02.21
chap.8 인터페이스  (0) 2011.02.11
chap.7 클래스 상속 3. 추상 클래스  (0) 2011.02.11
Posted by 마마필로 :

chap.9 델리게이트

2011. 2. 21. 00:39 from PROGRAMMING/C#.NET

1. 델리게이트

1.1 메서드 참조

1.2 공변성

1.3 델리게이트 활용

 

2. 이벤트

2.1 멀티캐스트

2.2 이벤트

2.3 익명 메서드


 

1. 델리게이트(Delegate)

1) 메서드를 가리키는 참조형

2) 메서드의 번지를 저장하거나 다른 메서드의 인수로 메서드 자체를 전달하고 싶을 때 사용(C++의 '포인터'에 대응)

3) 포인터와 선언형식 차이: 포인터(인수의 타입만 지정), 델리게이트(완전한 형식 요구)

4) 형식: 지정자 delegate 리턴타입 이름(인수목록);

→완전한 형식을 요구하므로 형식 인수 이름도 일단은 지정되어야 함.

5) System.Delegate로부터 파생되는 하나의 클래스 타입이어서 꼭 클래스에 소속되지 않고 네임스페이스에 바로 소속 가능.

클래스가 선언될 수 있는 모든 곳에 델리게이트도 선언 가능 하지만, 클래스 바깥쪽에 선언하는 것이 관례.

6) 타입이므로 그 자체만으로 메서드를 가리킬수 없으며 인스턴서 생성 후 메서드를 가리키도록 초기화 해야함

7)          int method(string s)

delegate int dele(string s)

① 리턴 타입과 인수는 그대로 옮겨 적고

② 메서드 이름을 델리게이트 이름으로 바꾸고

③ 앞에 delegate 키워드를 붙인다.

'PROGRAMMING > C#.NET' 카테고리의 다른 글

[0221과제] 수퍼팩(C#)  (0) 2011.02.23
chap.10 닷넷 클래스  (0) 2011.02.22
chap.8 인터페이스  (0) 2011.02.11
chap.7 클래스 상속 3. 추상 클래스  (0) 2011.02.11
chap.7 클래스 상속 2. 재정의  (0) 2011.02.11
Posted by 마마필로 :