이제 드디어 객체지향프로그래밍의 꽃이라고 할 수 있죠. class에 대해서 알아보려고 합니다.
우선 기본적인 class의 특징 및 간단한 구현을 통해 알아보도록 하겠습니다.
class는 특성과 기능을 표현한 것입니다. 특성은 data, 기능은 method를 말한 것입니다. 이 둘을 합쳐서 class의 멤버라고 부릅니다.
class 멤버 변수는 은닉화 때문에 기본적으로 다른 곳에서 접근이 불가능 합니다.
proivate는 defualt 속성으로 접근 할 수 없게 만드는 것이고 public 은 접근이 가능 하게 해주는 속성입니다.
일반적으로 class를 만들때 data는 private로 접근 할 수 없게 하고 method는 public화 하여 접근을 할 수 있게 합니다. 은닉화가 필요한 method라면 private로 설정 하겠지만요. private로 막아둔 데이터를 간접적으로 접근 할 수 있게한 메소드가 있어서 데이에 간접적 접근을 용이하게 만드는 것입니다.
그것을 property라고 하는데 형식은 3가지가 있는데. 아래와 같이 나타 납니다.
1.
1 private string name;
2 public string GetName() { return name; }
3 public void SetName(string n) { name = n; }
2.
1 private string name;
2 public string Name
3 {
4 get { return name; }
5 set { name = value; }
6 }
3.
1 public string Email { get; set; }
단 3번째 형식은 프레임 워크 3.0 이상에서만 사용이 가능합니다.
첫 클래스 구현을 해보려고 합니다~. 아 떨리는 순간...클래스에 대한 큰 기대가 있던 저는 처음 클래스 만들때 눈물 흘렸더나 뭐라나 ㅡㅡ;;
우선 이제 클래스를 만들려고하니 클래스 파일을 좀 따라 만들어 볼까 합니다. 준비 작업이 필요하죠
우선 프로젝트를 생성 하셨으면 솔루션 탐색기에서 프로젝트 명을 클릭후 마우스 오른쪽키를 살짝 눌러주세요
그럼 아래와 같은 화면이 나올꺼에요~ 그럼 클래스를 눌러 클래스를 생성 하시면 되겠지요!! ^ㅡ^
이미지가 살짝(?) 흐리긴 하지만 네 클래스를 생성 하시면 됩니다. 저는 Contact라는 클래스를 만들었습니다.
우선 클래스를 구현해 볼게요.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace OOP1
7 {
8 class Contact
9 {
10 //1.
11 //private int number;
12 //public int GetNumber() { return number; }
13 //public void SetNumber(int n) { number = n; }
14 //private string name;
15 //public string GetName() { return name; }
16 //public void SetName(string n) { name = n; }
17 //private string phone;
18 //public string GetPhone() { return phone; }
19 //public void SetPhone(string n) { phone = n; }
20 //private string email;
21 //public string GetEmail() { return email; }
22 //public void SetEmail(string n) { email = n; }
23 //public string GetContactInfo()
24 //{
25 // return string.Format("{0}. [{1}] [{2}] [{3}]", number, name, phone, email);
26 //}
27
28 //2.
29 //private int number;
30 //public int Number
31 //{
32 // get { return number; }
33 // set { number = value; }
34 //}
35 //private string name;
36 //public string Name
37 //{
38 // get { return name; }
39 // set { name = value; }
40 //}
41 //private string phone;
42 //public string Phone
43 //{
44 // get { return phone; }
45 // set { phone = value; }
46 //}
47 //private string email;
48 //public string Email
49 //{
50 // get { return email; }
51 // set { email = value; }
52 //}
53 //public string GetContactInfo()
54 //{
55 // return string.Format("{0}. [{1}] [{2}] [{3}]", number, name, phone, email);
56 //}
57
58 //3.
59 public int Number { get; set; }
60 public string Name { get; set; }
61 public string Phone { get; set; }
62 public string Email { get; set; }
63
64 public string GetContactInfo()
65 {
66 return string.Format("{0}. [{1}] [{2}] [{3}]", Number, Name, Phone, Email);
67 }
68 }
69 }
1,2,3 번으로 나눈 것은 어떻게도 가능 하다는 걸 보여 드리기 위해 저렇게 했고요~ 필요하신분은 1,2번으로도 한번 구현 해보셔도 도움이 될것이라 생각됩니다 ^ㅡ^
Program.cs에 돌아와서 다음과 같이 입력 하고 실행을 해보세요 각 번호대로 한번씩 다 실행을 해보시길 바랍니다.
어느 정도의 장단점이 있는지 알수 있을꺼에요~
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5
6 namespace OOP1
7 {
8 class Program
9 {
10 static void Main(string[] args)
11 {
12 Contact contact = new Contact();
13 //1.
14 //contact.SetNumber(1);
15 //contact.SetName("Jane Doe");
16 //contact.SetPhone("010-9987-4589");
17 //contact.SetEmail("johndoe@example.com");
18 //Console.WriteLine(contact.GetContactInfo());
19 //2.
20 //contact.Number = 1;
21 //contact.Name = "John Doe";
22 //contact.Phone = "010-4469-8871";
23 //contact.Email = "johndoe@example.com";
24 //Console.WriteLine(contact.GetContactInfo());
25 //3.
26 contact.Number = 1;
27 contact.Name = "장동건";
28 contact.Phone = "010-5568-7796";
29 contact.Email = "jdk@example.com";
30 Console.WriteLine(contact.GetContactInfo());
31 }
32 }
33 }
실행결과는 다 똑같이 나오는 것을 볼 수 있죠
클래스의 형태를 보면 언뜻 struct랑 많이 비슷한 것을 볼 수가 있습니다. 네~형식은 정말 비슷합니다. 형식 자체는 똑같다고 볼 수 있죠 하지만 value값과 reference값이라는 엄청난 차이는 줄일 수 없는 장벽이라고 할 수 있죠 ^^
우선 클래스의 시작은 이것으로 마치도록하겠습니다. 하지만 클래스가 이것으로 끝난다는 것은 아니지요 앞으로 많은 내용이 기다리고 있고 엄청난 장벽이 되어 힘들게 될 수도 있지만 그것을 이겨 내면 훨 훨 날라갈 수 있다는 것을 알려 드리고 마치도록 하겠습니다~
감사합니다~
'.NET > C#' 카테고리의 다른 글
System.Object 클래스 상속 (3) | 2009.12.18 |
---|---|
Property의 get, set 에 대한 간단한 정리 (0) | 2009.12.18 |
Class(4) (0) | 2009.12.17 |
Class(3) (0) | 2009.12.17 |
Class(2) (0) | 2009.12.16 |
C# enum, struct (0) | 2009.12.16 |
C# Array 에 대해서... (2) | 2009.12.16 |
C# 메소드 (0) | 2009.12.15 |
C# 반복문 (0) | 2009.12.15 |
C# 성적 관리 프로그램(단순 학점 부여) (0) | 2009.12.15 |