본문 바로가기

C#.NET

클래스 멤버로의 접근제한하기

객체지향언어(OOP)는 캡슐화, 상속, 다형성의 3대 특성을 가지고 있는 언어.

 

캡슐화(Encapsulation)

사용자에게 객체의 내부를 숨기고 외부에 노출된 인터페이스를 통해서 접근 가능하도록 하는 것으로 지난 번 클래스를 선언할 때 각 멤버나 메서드에 Private으로 설정하는 것이 그 대표적인 예라 할 수 있음

 

상속(Inheritance)

이미 존재하는 클래스가 다른 클래스에게 자신의 멤버를 물려주는 것

 

다형성(Polymorphism)

여러 개의 형태를 띠는 것.

조금 후에 하겠지만 여러 형태의 클래스 생성자를 보면 그 의미를 이해할 수 있을 것임.

 

Access와 관련된 한정자

한정자    

접근가능범위

Public

어디서나 접근가능

Private

해당 클래스에서만 접근가능

Protected

이 멤버는 외부에서는 보이지 않고 파생된 클래스에서만 보임

Friend

이 멤버를 정의하는 프로젝트 안에서만 보임

Protected friend

이 멤버를 정의한 프로젝트 안에서 자식 클래스에서만 보임

                

Private 설정된 것을 접근하는 방법

 

  • Public 함수를 이용해서 Private 멤버에 접근한다. 외부로부터 들어오는 데이터를 매개변수로 받아 클래스내부의 멤버값 설정
  • 밖으로 내보낼때는 함수의 리턴값을 이용

 

소스 분석

using System;

 

namespace PrivateAccess

{

class Employee

{

public string Name;

private int Age;

public string OfficeTel;

private string Cellphone;

 

public void showEmplyee()

{

Console.WriteLine("Name: {0}", Name);

Console.WriteLine("Age: {0}", Age);

Console.WriteLine("OfficeTel: {0}", OfficeTel);

Console.WriteLine("Cellphone: {0}", getcellphone());

}

//private로 설정된 Age에 접근하기 위해서 메서드 생성

public void AssignAge(int inage)

{

if((inage>19) & (inage<60))

{

Age=inage;

}

else

{

Age=inage;

Console.WriteLine("아직 나이가 일하기에는 어리거나많군요");

}

}

//Private로 설정된 Cellphone에 접근하기 위해 메서드 생성

public void AssignCellphone(string incellphone)

{

Cellphone = incellphone;

}

 

public string getcellphone()

{

return Cellphone;

}

class Program

{

 

static void Main(string[] args)

{

Employee CEO = new Employee();

 

//각 멤버에 값 할당

CEO.Name = "김태진";

CEO.OfficeTel = "02-9999-5555";

CEO.AssignAge(23);

CEO.AssignCellphone("010-888-0000");

 

//결과 보여주기

CEO.showEmplyee();

 

Console.ReadLine();

}

}

}

}

 

클래스 생성자(Constructor)

 

생성자는 클래스 객체가 생성될 때 자동으로 가장 먼저 호출되며 클래스 객체가 가지고 있는 멤버 변수에 대한 초기화 작업에 주로 사용된다. 특징은 리턴값이 없고 이름은 클래스 이름과 동일하다

 

디폴트 생성자

생성자가 없는 클래스는 시스템에서 매개변수를 가지지 않는 생성자를 자동으로 제공하며 구현부분이 비어 있음

사용자 정의 생성자

매개변수를 설정하고 그에 따라 구현부분에 처리할 일들을 구현

 

코드 분석

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ClassConstructor

{

class TVShow

{

//3개의 Member 변수 선언

public string Name;

public string Day;

public string Time;

 

//User Defined 생성자 만들기

public TVShow(string inName, string inDay, string inTime)

{

//콘솔창에 입력된 매개변수에 의해 할당된 값들을 뿌려주기

Console.WriteLine("Name : " + inName + '\n'

+ "Day : " + inDay + '\n'

+"Time : " + inTime);

 

Name = inName;

Day = inTime;

Time = inTime;

}

}

class Program

{

static void Main(string[] args)

{

TVShow myshow = new TVShow("오늘은 일요일", "일요일", "저녁7시");

Console.ReadLine();

}

}

}

다중 사용자 정의 생성자

 

소스 분석

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace MultiConstructor

{

class book

{

public string booktitle;

public string publisher;

public string editor;

public decimal price;

public int pages;

 

public book(string inbooktitle, string inpublisher)

{

booktitle = inbooktitle;

publisher = inpublisher;

editor = null;

price = 0;

pages = 0;

 

}

 

public book(string inbooktitle, string inpublisher, string ineditor, decimal inprice, int inpages)

{

booktitle = inbooktitle;

publisher = inpublisher;

editor = ineditor;

price = inprice;

pages = inpages;

 

}

 

//각 생성자들에 의해 생성된 클래스 멤버변수에 할당된 값을 보여주기

 

public void showbook()

{

Console.WriteLine ("booktitle : " + booktitle + "\n" +

"publisher : " + publisher + "\n" +

"editor : " + editor + "\n" +

"price : " + price +"\n"+ "page " + pages);

}

 

 

static void Main(string[] args)

{

//book 클래스형의 computer 객체 생성

book computer = new book("C#", "정보문화사");

//생성된 Computer 객체에 대해서 멤버변수 확인

computer.showbook();

 

//book 클래스형의 relationship 객체 생성 및 멤버변수 확인

book relationship = new book("결정적 순간의 대면", "김영사", "조셉그레니", 15000, 359);

relationship.showbook();

 

Console.ReadLine();

}

}

}

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

Transaction 이용하기  (0) 2009.05.13
MSSQL LOCK  (0) 2009.05.13
:::::[트랜잭션(Transaction)]:::::  (0) 2009.05.13
Stored Procedure를 이용한 DB Handling  (1) 2009.05.13
클래스 소멸자와 Garbage Collector  (0) 2009.05.08
NotifyIcon  (0) 2009.05.08
트리뷰(TreeView)  (0) 2009.05.07
List View  (0) 2009.05.07
DateTimePicker_Control  (0) 2009.05.06
Progress Bar  (0) 2009.05.06