Purpose-built post 이 포스트는 "Effective C# - Item 2, const 보다는 readonly가 더 좋다"를 읽고 개인적인 생각을 정리하기 위해 만들었다. - 익필 Content 제목에서 알 수 있듯이, 전반적으로 readonly 가 더 좋다는 이야기로 책에선 설명한다. 그렇다면, const 와 readonly 가 무엇이며, 왜 더 좋은지 알 필요가 있을 것이다. 1. const, readonly 가 무엇인가? 사용 형태로 정의 하면, 변수를 변하지 못하는 변수로 만들어 주는 C# 키워드 이다. C# 에서 const 는 컴파일타임 상수이며, readonly 는 런타임 상수이다. const 는 내장자료형(정수형,실수형, enum, string)에 대해서만 쓸 수 있으며, 변수 ..
const 검색 결과
{ 알다시피 메모리에는 상수성 메모리가 존재한다. 또한 개념상 상수성이여야 하는 경우도 있다. 이러한 이유로 const 로 설정된 것을 굳이 비상수성으로 만들어 사용할 이유가 없다.(물론 어쩔수 없을 때가 있긴 하다) 그러므로 상수성을 건들여서 버그가 생기거나, 예측할 수 없는 일이 일어나 하루 종일 디버깅을 하기 싫다면, 상수성만은 건들지 않는게 좋다. 대표적인 예를 한번 들어 보자. #include const char* str = "hello, world"; int main( void ) { std::cout
const 를 쓸 껀덕지가 있으며 const를 무조건 붙여두는게 좋다는 이야기 이다. 일단 나쁜 것 부터 이야기 하고 싶다. 왜냐하면 나는 "Effective C++ & Exceptional C++"의 영향으로 const를 붙이도록 무척 노력했고, 코드는 점점 const 를 써야지만 컴파일이 되야 되는 지경에 까지 이르게 되었기 때문이다. 특히 멤버 함수에 const를 붙여주면, 그 함수 내부에서 호출되는 멤버함수들 역시 const를 보장해 줘야 컴파일이 된다. 이 문법적 기능 때문에, 바이러스 처럼 const 는 퍼지게 된다. 이렇게 될 때 프로그래머가 느끼는 피곤함은 나에게 있어서 나쁘다고 이야기 하고 싶다. 뭐, 그렇다고 해서 const를 더 적게 붙이거나 그러진 않는다. ; ) 어디까지나 사람으로..
항목 21과 같은 맹락으로 이어진다. 이것 또한 연관 컨테이너(Associative Containers)의 연관을 무너뜨리게 한다. map 과 multimap 도 키를 바꿀수는 있을 꺼 같지만, 여기선 const 이기 때문에 변경을 못하도록 되어 있다.(캐스팅 하면 가능하지만...) 그래서 이 두개의 컨테이너는 삭제 후 삽입 방법으로 변경해야 한다. 하지만 set 이나 multiset 은 값 자체가 키(Key)이기 때문에, 바꾸는 일은 피해야 한다는 것이다. 이것도 키를 바꾸기 위해선 "삭제 후 삽입"을 해야만 한다. 곰곰히 생각하면 난 바꾸지 않을테니까, const 로 Key를 설정할꺼야. 라고 해서 std::set 하게 해도 크게 두가지 이유 때문에 무의미하게 된다. 첫째, 사용자 정의 객체를 담을 ..
이유 1. 의미적으로 상수로 표현하기보단 실질적으로 상수로 표현하는 const가 더 안정적이기 때문이다. (함수 내부에서 값을 건드리지 않는다는 의미만 가지고 코딩할게 아니라 진짜로 표현하는게 더 좋기 때문이다) 주의점 1. 함수의 반환값 함수의 매개변수, 함수의 정의 구역을 모두 const로 할수 있는지 생각해 보아야 한다. 2. 상수객체와 비상수객체는 함수의 오버로딩 대상에 포함된다. - 즉 상수객체만 받거나 비상수객체만 받거나 둘의 차이를 인정한다는 것이다. 3. 상수 멤버 함수의 반환값이 참조자라면, 상수형 참조자를 반환할수 있게 만들어야 한다. - 왜냐하면 기본제공 타입을 반환하는 함수의 반환값 수정은 공통적으로 안되는 규칙을 따르기 위함이다. 참조 const에 "상수형" 이라는 말을 붙여버려서..
항목 30. 접근하기 어려운 멤버에 대한 비상수 포인터나 레퍼런스를 리턴하는 멤버 함수 사용을 피해라 이유 1. private의 데이터를 포인터나 레퍼런스로 리턴은 정보은닉 자체를 파괴하는 행위이다. - 설계를 할때 성능에 중점을 둔다면 이런 경우가 생길수 있다고 필자는 설명한다. 해결방법 1. 우선 하지 말라; 2. 만약 할수밖에 없다면, 상수로써 전달한다. const 주의점 1. 만약 상수성을 제거해야지만 사용해되어야 한다면, 그 데이터를 사용 할때 데이터가 변경되지 않는다는 보장이 있어야 한다, 2008/06/28 03:25 추가 주의점 1번의 경우, 내부 데이터를 상수성이 있는 핸들로 받아놨는데, 만약, 그것이 함수에 들어 갈때, 상수성을 없에야만 한다면(간혹 이런 함수들이 있었다.), 그 함수 ..
최근댓글