본문 바로가기

비멤버 함수의 장점

(3)
항목 44 : 비멤버 함수를 활용하라. ( Prefer writing nonmember nonfriend functions. ) { 비멤버 함수란 무엇인가? 멤버 함수가 아닌 함수를 말한다. 즉, 클래스 외부에 있는 함수를 말한다. 비멤버 함수가 뭐가 좋길래 활용해야 하는가? 1. 비멤버 함수는 클래스의 무게를 줄여 준다. ① 이는, 좀더 유지보수가 편해 지게 해 주는 초석이 된다. ② 가독성이 올라 간다. 왜냐구? 봐야 할게 적으니까~ 2. General Programming을 할 수 있다. ① 이는, 한번 만들어 둔것을 손쉽게 재사용 할 수 있게 해주는 초석이 된다. ② 코드의 재사용으로 역시 알아야 할 것이 줄어 들게 된다. 사례를 들어 달라. Excetional C++ Sytle 에서 string 클래스의 예를 보면 될 듯 싶다. http://www.ikpil.com/841 보통 어떻게 비멤버 함수를 만들지 결정 하는가? ..
항목 39 : 일체적 클래스의 해악, 3부 : std::string 살 빼기 ( 난이도 : 5 ) 1 ) string::resize가 비멤버 함수가 될 수 있을까? 설명하라. 될 수 있다. 공개 인터페이스로 확장시켜 놓고 swap 시키면 되는데 소스코드를 보자. template void resize( std::basic_string& s, typename Allocator::size_type n, charT c ) { if( n > s.max_size() ) throw std::length_error( "won't fit"); if( n
항목 38 : 일체적 클래스의 해악, 2부 : std::string 리팩토링 ( 난이도 : 5 ) 저번 항목에 이어서, 이번 항목은 리팩토링이다. 때 마침 리팩토링 관련 서적을 읽고 있던 터라, 그 필요성을 알게 되었었터라 "무엇을 어떻게 리팩토링 할까?" 에 대해서 생각해 보게 된다. 1 ) std::string의 멤버 함수들 중 멤버가 아니면 안되는 것들은 무엇이 있고, 왜 그런가? 멤버가 아니면 안되는 함수들은, 생성자, 소멸자, 할당 연산자, operator[] 연산자들이 있다. 이것은 멤버가 아니면, 어찌 할 수 없는 것들이다. 왜 생성자와 소멸자, operator=과, operator[] 연산자들은 왜 멤버로 놔야 할까? 여기서 중요한 개념을 짚어 봐야 한다. 스콧 마이어스는 "멤버로도 구현할 수 있고, 비친구 비멤버로도 구현 할 수 있는 함수가 있다면, 비친구 비멤버를 선호 해야 한다" ..