ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로퍼티 설명 get/set
    .NET/C# Basic 2008. 10. 1. 19:43
    반응형

     
     
    아래 관련소스 2개중 한개는 인터넷에긁어왔고 나머지하나는 권오윤양소스입니다
     
    소스만 보셔도 대충 이해되실꺼에염~!!!
     
    프로퍼티를 설명하기전에 클래스를 보면
    클래스는 엑세스 지정자라는 것을 통해 중요한 맴버를 외부로 부터 보호할수있죠
    만약 모든 맴버를 외부에서 마음대로 릭고 쓸수 있다면 규칙에 맞지 않는 값이 들어올수 있어
    객체의 무결성!!! 이 파괴 될것이라고하더군요~!
    무결성이 훼손된 객체는 제대로 동작하지도 않을 뿐더러 언제 말썽을 일으킬지 알수없으므로 무척위험하답니다
    그래서 프로퍼티get/set 을 쓰는것같군요
     
    private는 함부로 읽거나 쓰지 못하도록 금지한겁니다
    대신 공개된 get/set 메서드를 제공하지요~!!! 
    위에서스를 보면 대충 ~~ 요런거    public int XXX { get/set }public stringt XXX { get/set }
     
    메서드는 코드이므로 외부로 공개되더라도 전달된 인수를 점검하여 원하는 값만 선택적으로 대입할수있지요
     
    get 메서드는 필드 값을 리턴하기만 합니다~!! 말그대로 읽기용
    set 메서드는 조건을 점검한후 제대로 된 값만을 받아들입니다~!!!!! 그래서
    그러니까 set에서 자기 마음에 안들면 팅가내버리고 맞는값만을 받아들입니다
    set 메서드는 입력값이 틀릴 경우 대입을 거절하므로 이객체는 항상안전합니다 ㅋㅋㅋ
     
    위에서 보면
     
            public int proX
            {
                get
                {
                    return x;
                }
                set
                {
                    x = value;
                }
            }
     
    요 구문이 프로퍼티입니다
     
     
     
    여기서 프로퍼티의 장점을....ㅋㅋ
     
    1. 프로퍼티는 코드를 가지는 메서드!!! 이지만.... 겉에서 보기에는 필드처럼 생겼다
     
    2. 프로퍼티는 코드를 가지는 메서드이므로 능동적으로 동작할수 있다
    set 접근자는 조건에 맞는 값만 받아들이므로 객체의 무결성을 완전하게 지킬수있다
    get 접근자는 주로 숨겨진 값을 단순히 리턴하지만 때로는 조합된 값을 계산하여 리턴할수있다
    ex)
    private int price;
    private double sale;
    public double saleprice
    {
    get{return price * sale}
    }
     
    3.프포로퍼티 변경에 의한 부 효과(side effect) 도 처리할 수 있다
    필드는 대입시 단순히 값만 바뀔뿐이지만 프로퍼티는 값을 바꾸면서 다른 코드도 실행할수 있으므로 값이 바뀔때
    값이 해야하는 작업을 처리할 수있다
    예를 들어 날짜를 바꾸면 요일도 값이 바꾼다거나 객체를 숨기면 상태를 바꿈과 동시에 화면에서도 숨길수있다
    상식적으로 꼭 필요한 처리를 자동으로 수행함으로써 사용자의 코드를 단순화한다
    프로퍼티의 이런 특성은 특히 그래픽 환경에서 아주 유용한데 윈도우나 컨트롤의 속성이 바뀌면 부차적으로 같이
    처리해야할 것들이 아주 많지요 유용하겟죠?
     
    4. 필요하다면 읽기전용이나 쓰기전용의 프로퍼티를 만들수도 있다 get/set 접근자가 둘다 정의 되어 있으면 읽기와
    쓰기가 가능한 프로퍼티이며 둘중에 하나가 없으면 해당 동작은 금지되는 프로퍼티가된다. get은 읽기전용 프로퍼티다
    get접근자 없이 set접근자만 제공하여 쓰기 전용의 프로퍼티를 만드는것도 이론상 가능하다
     
     
    닷넷 2.0 부터는 get/set 접근자의 액세스 권한을 다르게 지정할수도 있다
    내부에서는 읽고 쓰기를 자유롭게 하되 외부에서는 읽기만 허락하고 싶다면 set 접근자의 액세스 권한만 제한할 수 있다
    ex) public int sec
    {
    get {return sec;}
    protected set {if (value<60 sex =value'}
    } 여기서 sec 프로퍼티의 set 을 protexted set으로변경하면 자신이나 파생클래스에서만 호출할 수있으며
    클래스 외부에서 이 프로퍼티를 변경할 수없다~!!!!!
     
    5. 프로퍼티는 액세스할 때 이름을 사용하고 타입이 분명히 정해져 이씅므로 비주얼 편집이 가능하다
     
    6. 프로퍼티는 get/set 메서드보다 훨씬 더빠르게 동작한다 get/set은 진짜 메서드이므로 호출에따른
    부담에 있지만 프로퍼티는 그렇지 않을수수도있다.... 등등..
    또 프로퍼티에는 여러가지 고급알고리즘적용할수있다 ..
    특히 초기화 지연이라는 최적화 기법을 많이 사용하는데 복잡한 계산을 통해 구해야하는 겂이나
    네트워크 데이터베이스에서 실시간으로 조사해야하는 값을 구할때 효율적이다 실제 그값이
    필요하기 전가지 null 상태로 내버려 두었다가 get접근자가 최초로 호출될때 구하면 된다 당장
    필요치 않은 불필요한 연산을 최대한 자제함으로써 속도와 반응성을 높이는 고급 기법이며 최적화 효과가 상당한다
     
    끝으로
     
    프로퍼티는 필드처럼 보이지만 실제로는 메서드 이며
     
    내부적으로도 메서드로 구현된다
     
    즉 프로퍼티는 필드이 탈을 슨 메서드이며 그래서 프로퍼티를 똑똑한 필드 (스마트 필드) 라고 부르기도한다
    프로퍼티가 실제로는 메서드이기 때문에 메서드가 할수 있는 거의 모든 동작을 다할 수있다
    가상으로 선언할 수도 있으며
    재정의도 가능하고 추상으로 선언할 수도 있다 다형성도 당연히 성립한다
     
    그고 또 같은 클래스 내에서 명칭이 충돌해서는 안되므로 프로퍼티의 내부 메서드와 같은 이름으로메서드를 만들어서는
    안된다 get/set 으로 시작되는 이름은 컴파일러에 의해 예약되어있으므로 가급적이면 사용하지 말아야한다
     
     
    프로퍼티가 아무리 필드처럼 생겼다고 하지만 실제로 기억장소가 할당되어있는 필드느 ㄴ아니다
    따라서 프로퍼티를 메서드의 출력용인수나 참조용인수로 전잘하는것은 불가능하다
     
     
     
     
     
     
    닷넷프로그래밍정복에서 참고했습니다 소스코드와 설명보시면 이해되실꺼에요
    제가 잘못적은부분있으면 지적해주십시요~!! ㅎㅎ
     
     
     
    반응형

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

    C# PPT 4  (0) 2008.10.02
    C# PPT 3  (0) 2008.10.02
    C# PPT 2  (2) 2008.10.02
    프로퍼티 관련소스  (0) 2008.10.01
    프로퍼티 예제  (0) 2008.10.01
    프로퍼티  (0) 2008.10.01
    인스턴스  (0) 2008.10.01
    클래스 멥버 관련소스  (0) 2008.10.01

    댓글

Designed by Tistory.