객체지향언어(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 |