ITEM 1. Use Properties Instead of Accessible Data Members.
(데이터 멤버 대신에 프로퍼티를 사용하라)
■ 요약 및 장점
1. Data Binding이 Data Members는 불가능 하지만 프로퍼티는 가능하다.
데이터 멤버를 지원 하지 않는 이유는, 데이터 바인딩시에 리플렉션을 이용해서 프로퍼티로 된것만 찾기 때문이다.
2.메소드 처럼 구현이 되어 있기때문에 조작(get,set의 상세 내용을 조작이 가능하다)이 가능하지만, 외부에서는 데이터
멤버처럼 보여서 그렇게 사용이 가능하다. 메소드 처럼 구현이 되어 있기 때문에 사용자가 자료를 설정할 때(Setter) 데이터의
유효성을 검사를 해서 유효한 데이터만 받을 수 있게 처리가 가능하다.
3.프로퍼티의 값에 제한이 필요할 때 Setter에서만 수정을 해주면 되지만, Data Member는 데이터를 입력해주는 모든 곳에서 유효성을
검사하는 루틴이 필요하므로 여러군데를 수정해줘야 한다. (데이터 멤버도 함수를 이용해서 한 군데서 수정이 가능하기는 하지만 하나의
클래스에서 값에 대한 유효성을 처리해주는 것이 클래스의 개념상 맞다)
4.프로퍼티는 메서드가 제공하는 모든 기능을 할 수가 있다. 즉 Virtual로 Set이나 Get을 한정할 수가 있다.
5.멀티 쓰레드 환경에서 프로퍼티에 접근에 대한 유효성을 보장하게 할 수가 있다 (Setter나 Getter에서 Lock을 이용해서 한번의 하나의
요청만 가능하게 처리가 가능하다)
6.데이터를 public이나 protected의 인터페이스로 외부에 노출할때는 언제나 프로퍼티를 사용해라.
7.클래스에서 배열이나 딕셔너리(해쉬테이블)의 기능구현에 인덱서를 사용하라.
8.All Data members should be private, without exception.
■ Terms
1.vitual : 상속 받는 클래스에서 부모의 메소드를 재정의 하고 싶을 때 부모의 메서드에 Virtual을 사용하고 자식 클래스의 메소드에서
override를 이용해서 재정의한다.
2.JIT Compiler : 자바 프로그램 언어 환경에서 자바 바이트 코드를 프로세서에게 직접 전달될수 있는 명령어로 바꾸어주는 프로그램
■ 해석이 모호하거나 중요한 구문
1.The compiler creates a private member field (typically called a backing store) for you and implements the obvious logic for both
the get and set accessors.
=>컴파일러는 당신을 위해서 노출되자 않는 멤버(일반적으로 보조기억장치로 불린다)를 생성하고 get과 set 접근자들의 명백한 로직을 구현한다.
2.That’s the sort of true : 일면 맞는 말이다.
3.It makes upgrading single assemblies that have been deployed much more difficult
=>그것은 배치가 완료된 싱글 어셈블리를 업그레이드 하는 것을 더 어렵게 만든다.
■ 단어
Coin : 만들다, 동전
First-class Citizen (also object,entity,or value) : An object is first-class when it
I. can be stored in variables and data structures.
II. can be passed as a parameter to a subroutine.
III. can be returned as the result of a subroutine.
IV. can be constructed at run-time
V. has intrinsic identity(independent of any given name).
specify : 명시하다cf) specific : 구체적인, 명확한, 분명한,특정한(주로 명사앞에씀)
implicit : 암시된,내포된 반)explicit : 분명한,명쾌한
as though : as if ( 마치 ~ 인것처럼)
revenue : (정부-기관의 ) 수익
assume : 추정하다. (책임을) 맡다
practice : 실행,실천 : 관례 ( 연습 -> 습관 -> 관습)
exclusively : 배타적으로, 독점적으로,오직
over time : 일정 시간이 흐름에 따라 cf)overtime :초과근무, 야근
enhance : 높이다 , 향상시키다.
wrap : 보호하다, 싸다
generic : 포괄적인, 총칭[통칭]의.
Note : ~에 주목[주의]하다.
full-fledged : 깃털이 다난,완전히 성장한,자격을 제대로 갖춘cf)fledge: 깃털이 나다
mofifier : 수식어, 한정어cf)accessibility modifiers : 접근 한정자 (private,public,protected)
omiited :생락한
extend :더 길게 만든다. 연장하다, 확대하다.
in keeping with : ~와 일치[조화]하여, 어울려
Notice that : 주목하라, 알아차리다(Did you notice that? 알아차렸니?)
capability : 능력, 역량
all well and good :괜찬기는 한
tempt : 유혹하다[부추기다], 유도하다 cf) be tempted to : ~ 하라고 유혹받다
and then : 그러고는, 그런 다음
describe : 말하다 , 묘사하다
straightforward : 간단한, 쉬운, 복잡하지 않은 : 솔직한
deploy : 배치하다,효울적으로 사용하다.
relative : 비교상의, 상대적인
negligible: 무시해도 될 정도의
measurable: 잴 수 있는, 주목할 만한
live up to (expectations): (기대에) 부응하다
lengthy : 너무 긴, 장황한, 지루한
■ 피드백
:Item1의 결론은 단 한줄로 정리가 가능할 것 같다.
All Data members should be private, without exception.
즉, 모든 데이터 멤버는 private로 선언이 되고 외부에 노출이 필요한 것은 property로 노출 시키면된다.
절대로 public으로 데이터 멤버를 선언하지 말자!!!
'프로그래밍 > Effective C#' 카테고리의 다른 글
ITEM 5 : 항상 ToString()을 제공해라. (1) | 2013.07.11 |
---|---|
ITEM 4 : #if 대신에 Conditional Attributes를 사용해라 (0) | 2013.07.11 |
ITEM 3 : Cast 보다 is 나 as 연산자를 선호해라 (2) | 2013.05.28 |
ITEM 2 : const 보다 readonly를 선호해라. (0) | 2013.05.27 |
시작하면서.. (0) | 2013.05.21 |