HaPpY hApPy

7. immutable atomic value 타입이 더 좋다. 본문

.NET/Effective C#

7. immutable atomic value 타입이 더 좋다.

juniguya 2013. 8. 17. 16:05

은행에서 어떤 사람의 정보를 변경한다고 가정하자.

 

이 사람의 이름, 나이, 주소, 저금한 금액, 등등이 있을수 있는데,

 

은행에서 이 사람의 정보를 업데이트 하는과정에

 

_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 레프런스 참조 에러)