본문 바로가기

.NET/C#

Class(1)

728x90
반응형

이제 드디어 객체지향프로그래밍의 꽃이라고 할 수 있죠. 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값이라는 엄청난 차이는 줄일 수 없는 장벽이라고 할 수 있죠 ^^

우선 클래스의 시작은 이것으로 마치도록하겠습니다. 하지만 클래스가 이것으로 끝난다는 것은 아니지요 앞으로 많은 내용이 기다리고 있고 엄청난 장벽이 되어 힘들게 될 수도 있지만 그것을 이겨 내면 훨 훨 날라갈 수 있다는 것을 알려 드리고 마치도록 하겠습니다~

감사합니다~

728x90
반응형

'.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