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 |