2014년 10월 7일 화요일

[닷넷C#교육/ADO.NET강좌/ASP.NET교육잘하는곳/C#,ASP.NET교육추천/닷넷실무교육/.NET,C#/ADO.NET교육/닷넷학원/ASP.NET실무교육]


프로퍼티(Property) 

프로퍼티란 객체의 속성을 나타내는 필드의 특별한 형태이다. 기존의 VB나 VC++ 프로그래머들은 버튼이나 레이블 같은 것에서 색깔이나 크기등을 설정 하거나 값을 얻어 내는데 한가지 속성을 이용한 다는 것을 알고 있을 것이다. C#에서는 이러한 것을 Language 차원에서 지원하고 있는데 이것이 바로 Property 이다. 프로퍼티는 실제 값을 가지고 있지 않는데 다만 프로퍼티를 이용하여 다른 멤버 변수의 값을 바꿀 수 있고 어떤 연산에 의해 값을 얻어 올 수도 있는 가상의 필드 정도로 생각 하면 될 것이다. 

경우에 따라서 멤버 변수를 public으로 공개 할 수도 있겠지만 전통적인 객체 지향 프로그래밍에서는 보통 멤버들을 private으로 숨기고 그것에 대한 접근 가능한 메소드를 제공 함으로서 데이터를 보호 한다. 

아래의 예제를 보도록 하자. 

using System; 

class Triangle 

private int width; 
private int height; 
private int area; 

public int getWidth() 

return width; 


public void setWidth(int x) 

width = x; 


public int getHeight() 

return height; 


public void setHeight(int y) 

height = y; 


public int getArea() 

area = width * height / 2; 
return area; 



public class Test 

static void Main() 

Triangle A = new Triangle(); 
A.setWidth(4); 
A.setHeight(3); 
Console.WriteLine("면적은 {0} ", A.getArea()); 



위의 예제는 잘 돌아간다. 아쉬운 것이 있다면 필드에 값을 입력하고 조회하는데 메소드명을 알고 있어야 한다는 것이다. 

만약 현재 삼각형의 밑변을 1만큼 증가 하고자 한다면 아래와 같이 해야 할 것이다. 
A.setWidth(A.getWidth() + 1); 

만약 이런 경우가 수시로 일어 난다면 아래와 같이 사용하고 싶은 욕구가 들것이다. 
A.width=4; 
A.width++; 
그러나 객체 지향 프로그래밍의 특성상 데이터는 숨기는 것이 원칙이므로 거의 불가능 한 얘기이다. 그래서 C#에서는 프로퍼티 라는 기능을 제공 하고 있다. 프로퍼티를 이용하면 위와 같이 값을 읽어 오고 설정 하는 부분을 클라이언트에서 모두 알고 있어야 하는 것과는 달리 마치 그것을 public 필드인 것처럼 이용 할 수 있다. 


프로퍼티를 선언 하는 방법은 보통 필드처럼 선언 하고 메소드 처럼 중괄호({})안에 내용을 넣는다. 그 안에는 set과 get으로 나뉘어져 있는데 get 접근자는 값이 읽혀 질 때 호출되며 set 접근자는 값을 설정하는 내용을 집어 넣는다. 

위에서 구현한 예제를 프로퍼티를 이용하여 변경 해 보자. 
using System; 

class Triangle 

private int width; 
private int height; 
private int area; 

public int Width 

get { return width; } 
set { width = value;} 


public int Height 

get { return height; } 
set { height = value;} 


public int Area 

get { return width * height /2; } 



public class Test 

static void Main() 

Triangle A = new Triangle(); 
A.Width = 4; 
A.Height = 3; 
Console.WriteLine("밑변은 {0} ", A.Width); 
Console.WriteLine("높이는 {0} ", A.Height); 
Console.WriteLine("면적은 {0} ", A.Area); 




프로퍼티와 필드의 비교 

프로퍼티와 필드는 값을 얻어 낼 수 있다는 부분에서 비슷하며 실제로 값을 얻어오는 방법도 같다. 하지만 프로퍼티는 실제 값을 가지고 있지 않으며 다른 필드의 값을 되돌려 줄뿐 메모리를 차지하고 있는 것은 아니다. 

프로퍼티와 필드의 유사점 

1.void 타입이 아닌 다른 타입으로 선언 한다. 
class test { 
int field; 
int Property { .. } 


2.접근 제한자와 같이 쓸 수 있다. 
class test { 
public int field; 
private int Property {…} 


3.static으로 선언 할 수 있다. 
class test { 
static public int field; 
static private int Property {…} 


4.부모클래스의 멤버중 같은 이름의 멤버를 숨길 수 있다. 
class Parent { 
static public int field; 
static private int Property { … } 


class Child: Parent { 
new public int field; 
new private int Property; 


5.값을 할당 하거나 읽어 올 때 문법이 같다. 
Test t = new Test(); 
t.field = 1000; 
t.Property = 2004; 

프로퍼티와 필드의 다른 점 
1. 프로퍼티는 필드와 달리 메모리 상에서 값을 가지고 있지 않다. 그러므로 주소와 관련된 메소드 매개변수로서 사용은 불가능 하다. 함수에서 인자로 넘길 때 ref, out 등의 사용은 불가능 하다는 의미이다. 

2. 프로퍼티는 괄호를 사용 하지 않는다. 
class Test { 
public int Method(int a, int b) {} 
public int Property (int a, int b) {} //오류 


3. 프로퍼티는 void 타입으로 쓸 수 없다. 
class test { 
public void Method(int I, int j) {…} 
public void Property { … } //오류 



static 프로퍼티 
정적 프로퍼티는 static 제한자가 붙는다. 인스턴스와 관계없으며 클래스와 관련이 있다는 것을 의미하고 객체가 선언된 순간부터 존재하고 모든 인스턴스들이 고유하게 되는 것이다. 따라서 정적 프로퍼티 안에는 static으로 선언된 필드만이 올 수 있다. 


 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-272100
 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취…오라클자바…12-111520
53 [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… 오라클자바…03-151295
52 [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍 오라클자바…01-311430
51 [평일,기업100%환급]SQL기초에서 Schema Object까지 오라클자바…01-311377
50 [기업100%환급]Spring ,MyBatis,Hibernate실무과정(스프링개발자… 오라클자바…01-311118
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 오라클자바…01-191439
48 [평일주간,평일야간,주말]안드로이드개발자과정 오라클자바…01-111266
47 [평일야간,주말주간,주말야간]JAVA,Network&JSP&Spring,MyBatis,… 오라클자바…01-031765
46 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… 오라클자바…12-272100
45 [기업100%환급,평일주간]자바기초에서 JDBC, Servlet/JSP까지 오라클자바…12-191524
44 [평일야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,Jav… 오라클자바…12-141503
43 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… 오라클자바…12-111520
42 [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 오라클자바…12-091208
41 [평일야간, 주말]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011433
40 [기업100%환급]안드로이드개발자과정(Android전액환급교육) 오라클자바…12-011579
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011089

댓글 없음:

댓글 쓰기