본문 바로가기

C#.NET

소설 같은 C# Chapter 3

Main Theme : Class

 

Class ?!

(클래스 & 데이터 타입 & 변수 & 상수)의 관계

클래스

새로운 데이터 타입을 만드는 데이터 타입 생성기

데이터타입

데이터 타입으로 변수를 생성할 수 있다.

변수

변수의 선언은 메모리의 생성을 의미

상수

상수는 변수에 할당된다.

 

#사용자 정의 데이터 타입(User Defined Data Type)

  • Built-In Type
    • 정해진 형의 데이터만 넣을 수 있다.
    • (int. long. Float ,double, char..)
  • 사용자 정의 데이터 타입
    • 대표적인 형태로 구조체와 클래스가 있다.
    • 구조체의 경우 '값 타입' 이고, 클래스의 경우 '참조 타입'이다.

 

# 클래스로 데이터 타입 만들기

Class Person{

Class : 클래스를 만드는 키워드 Person : 클래스로 만들어진 새로운 데이터 타입

Public int age;

Person 클래스 내부의 Member Field

Public long height;

 

Public float weight;

 

}//class

 

 

크게 살펴보면 클래스의 구성요소는 '변수 & 함수' 이다. 이 때 변수로 '데이터'가 사용되느냐 아니면 '구조체'가 사용되느냐에 따라 좀더 나뉠 수 있다.

변수는 정적이고, 함수는 기능적인 측면을 가진다.

 

#클래스 내의 함수 삽입

 

예제

using System;

public class MethodTest{

    public int a;

    public int b;

    public int Sum(int x, int y){

        return x + y;

    }

}//class

public class MethodMain{

    public static void Main(){

        int s;

//MethodTest 타입의객체test를선언& 'new'연산자로메모리를할당.

        MethodTest test = new MethodTest();

        test.a = 1000;

        test.b = 2000;

        s = test.Sum(3, 5);

//MethodTest 클래스의SUM 함수에x=3, y=5로대입되고, Return 값으로3+5=8이도출되어's'에대입된다.

 

        Console.WriteLine("변수a는" + test.a);

        Console.WriteLine("변수b는" + test.b);

        Console.WriteLine("Sum메서드결과는" + test.Sum(3, 5));

        Console.WriteLine("또다른결과는" + s);

    }//main

}//class

/***

변수a는1000

변수b는2000

Sum메서드결과는8

또다른결과는8

***/

 

#접근(Access)과 비접근(Non Access)

객체 생성 후 public은 전역변수선언이므로 접근 가능. 그러나 private는 불가.

Private를 사용하는 이유는 1. Class 내부에서만 사용하기 위해서 2. 외부에서 들어오는 데이터를 직접 할당하기 보다는 간접할당하기 위해서(=함수를 통한 할당)

 

private에접근하기위한방법을제시하는예제

using System;

public class TestPrivate{

    private int top_secret;

    public void SetWeight(int my_weight){

        top_secret = my_weight;

    }

    public int GetWeight(){

        return top_secret;

    }

}//class

 

public class TestPrivateMain{

    public static void Main(){

        int s;

        TestPrivate we = new TestPrivate();

        we.SetWeight(70);

        s = we.GetWeight();

        Console.WriteLine("private멤버의값은: " + we.GetWeight());

        Console.WriteLine("private멤버의값은: " +s);

    }//main

}//class

//private멤버의값은: 70

//private멤버의값은: 70

 

#속성

  • Member Filed에 값을 할당하고 얻어내는 방법
  • Set과 Get형식의 함수를 일반화한 형태
  • 스마트 필드(Smart Filed)라고도 함.

 

속성(Property) 형식

private 데이터 타입 변수명;

public 데이터 타입 속성명 {

//속성멤버

    set {

//속성 설정구현

    }

    get {

//속성 반환구현

    }

} //속성

**Set(:Write Access) & Get(:Read Access)

 

using System;

class PropTest

{

private string name; // 소문자이름

public string Name

{ // 대문자이름

get

{

return name;

}

set

{

name = value + " 님반갑습니다.";

}

}

}

public class PropMain

{

public static void Main()

{

PropTest pt = new PropTest();

pt.Name = "홍길동";

string na = pt.Name;

Console.WriteLine("이름: {0}", na);

}//main

}//class

 

//OUTPUT "이름: 홍길동

 

#값타입과 참조타입의 메모리 생성의 차이

 

#C#에서의 구조체와 클래스의 차이

  • 구조체는 값타입이며 클래스는 참조타입이다

  • 구조체 사용 이유
    • 직접적으로 메모리에 접근하기 때문에 참조의 낭비를 막을 수 있다.
  • 구조체의 특징
    • 구조체는 상속할 수 없으며 또한 상속해 줄 수도 없다
    • 생성자를 중복해서 만들수 있지만 디폴트 생성자만큼은 재정의해서 사용할 수 없다.

    (값타입의 변수를 선언함과 동시에 메모리의 생성되기 때문)

 

#값에 의한 전달 VS ref에 의한 참조 & out에 의한 참조

 

Vs

& OUT에 의한 참조

  • out 키워드
    • 참조에 의한 전달을 할 때 사용하는 키워드
    • 참조로 값을 넘길 때 참조할 대상을 초기화할 필요는 없다.
  • ref 와 out 키워드
    • ref : 참조할 변수는 반드시 초기화되어 있어야 한다.
    • out : 참조할 변수가 반드시 초기화될 필요는 없다.
  • out 키워들 사용하는 경우
    • 함수로부터 값을 얻어낼 때 주로 사용한다.
      • 그렇기 때문에 초기화를 할 필요가 없는 것이다.

 

OUT에 의한 참조

using System;

class TestOut

{

static void CallByRef(out int x)

{

x = 10000;

}

public static void Main()

{

int x1;

CallByRef(out x1);

Console.WriteLine("Call-By-Out: {0}", x1);

}

}

/***

Call-By-Out: 10000

***/

 

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

트리뷰(TreeView)  (0) 2009.05.07
List View  (0) 2009.05.07
DateTimePicker_Control  (0) 2009.05.06
Progress Bar  (0) 2009.05.06
MDI Form 생성하기  (0) 2009.05.06
Windows Form - 5월6일  (1) 2009.05.06
0428 C# (초급)실습예제들  (0) 2009.04.28
Chapter02 C# Language  (0) 2009.04.28
0427_C# 간단한 실습  (0) 2009.04.27
소설 같은 C# chapter 1  (0) 2009.04.25