HaPpY hApPy
7. immutable atomic value 타입이 더 좋다. 본문
은행에서 어떤 사람의 정보를 변경한다고 가정하자.
이 사람의 이름, 나이, 주소, 저금한 금액, 등등이 있을수 있는데,
은행에서 이 사람의 정보를 업데이트 하는과정에
_name = name;
_moeny += money //오늘 저금한 금액 + 이전 금액
_age = age;
_address = address;
_phones = phones
이렇게 업데이트가 이루어지는 과정에
_name = name; 까지만 실행되었는데
만약 다른곳 혹은 다른 쓰레드에서 이 돈을 가져가서 정리를 하고
그다음 다시 _money += money 문장이 실행되고
다른곳에서 사용된 돈이 다시 _money -= usedMoney 해서 사용된 만큼 빼고 돌아오면
아마 저금한 돈이 날라갈꺼다 (쓰레드, 크리티컬 섹션 생각하면 이해가 쉬울듯)
이를 방지하기 위해
저렇게 하나 하나 대입하는거보다
새로운 객체를 생성해서 한번에 슝~
someone = new Human(name, money, age, address,phones) 이렇게 하면 한번에 변화된값이 슉~ 들어가기때문에
안전하게 정보가 보장될수있다....라고 이해를 했는데,,음,,자원낭비 아닌가?ㅋㅋㅋ
그리고 하나씩 변경되는걸 막기위해
readonly 로 생성한다.
private readonly string _name = name;
private readonly int _moeny += money //오늘 저금한 금액 + 이전 금액
private readonly int _age = age;
private readonly string _address = address;
그리고 reference에 의해 값이 변경될때 조심해야된다.
만약 위에를 폰번호를 할당하기 위해 아래처럼했다 가정하자.
PhoneNumbers[] phones= new PhoneNumbers ("수많은 이쁜아가씨들 전화번호....".....) 가
someone = new Human(name, money, age, address, phones); 했는데
지나가던 누가 phones를 주어서 에이,,,안이쁘네 하고 다 지워버리면
phones = null; //해버리면
reference를 받은 someone의 휴대폰 번호도 지워진다.
someone._phnes(null 레프런스 참조 에러)
'.NET > Effective C#' 카테고리의 다른 글
9. ReferenceEquals(), static Equals(), instance Equals(), operator== 의상호연관성의 이해 (0) | 2014.03.16 |
---|---|
8. Value 타입을 사용할 때 0이라는 값이 의미를 가질수 있도록 (0) | 2014.03.16 |
6. value 타입과 reference 타입을 구분하라. (0) | 2013.08.17 |
5. 항상 ToString()을 작성하라. (0) | 2013.08.17 |
4. #if 대신 Conditional Attribute를 사용하라. (0) | 2013.08.17 |