2014년 6월 29일 일요일

[대한민국서울닷넷,C#,ADO.NET,ASP.NET실무교육학원추천]C#, 닷넷, .NET에서의 프로퍼티(Property), 닷넷강좌,C#강좌, 프로퍼티,C#교육학원,ADO.NET교육학원.ASP.NET교육학원

[대한민국서울닷넷,C#,ADO.NET,ASP.NET실무교육학원추천]C#, 닷넷, .NET에서의 프로퍼티(Property), 닷넷강좌,C#강좌, 프로퍼티,C#교육학원,ADO.NET교육학원.ASP.NET교육학원

프로퍼티란 객체의 속성을 나타내는 필드의 특별한 형태이다. 기존의 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 :namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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으로 선언된 필드만이 올 수 있다.

 


오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com


평일주간(9:30~18:10) 개강
(6/30)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(6/30)[기업100%환급]안드로이드개발자과정
(7/07)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/07)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/07)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/14)[기업100%환급]SQL기초에서 Schema Object까지

평일야간(19:00~21:50) 개강
(7/01)안드로이드개발자과정
(7/01)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/02)Spring3.X, MyBatis, Hibernate실무과정
(7/02)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/02)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
(7/03)웹퍼블리싱 마스터
(7/15)SQL기초에서실무까지
(7/15)MyBatis3.X, Hibernate4.X ORM실무과정
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~17:50) 개강
(7/05)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/05)SQL초보에서 Schema Object까지
(7/12)자바웹(JSP,Spring,MyBatis,XPlatform)프로젝트과정
(7/12)MyBatis3.X, Hibernate4.X ORM실무과정
(7/12)개발자를위한PLSQL,SQL튜닝,힌트
(7/13)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정

주말저녁(18:30~22:20) 개강
(7/19)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지

댓글 없음:

댓글 쓰기