C++ 문자열 & 코딩 스타일
문자열은 프로그램을 작성할 때 거의 항상 사용된다. C++은 안전하고 사용하기 쉬운 string 클래스를 제공한다. 문자열에 대해서 크기를 자유자재로 바꾸는 것은 물론 부분적으로 추출하거나 바꿀 수 있는 여러 가지 고급 기능을 지원한다.
cstring 헤더 파일을 사용하면 C의 여러 문자열을 처리하는 다음의 함수들을 사용할 수 있게 된다. strcpy()는 두 개의 문자열 포인터를 받아서 첫 번째 문자열에 두 번째 문자열을 복사하는데 첫 번째 문자열이 적합한 메모리 공간을 가졌는지 신경 쓰지 않는다. strlen()은 원본 문자열의 크기를 알기 위한 함수인데 리턴하는 값은 무자열의 크기지 실제 필요한 메모리의 크기는 아니다. strcat()은 문자열을 이어 붙이는데 사용한다. strcmp()는 두 개의 문자열을 비교할 때 사용하는 함수이다.
string 클래스는 cstring 헤더 파일에서 제공하는 문자열 처리 기능을 대부분 지원하면서, 메모리 할당 부분까지 관리해준다. string 클래스는 string 헤더파일에 정의되어 있다. string은 하나의 객체이지만 실제로 변수 타입과 같게 생각해도 문제가 전혀 되지 않는다. 연산자 오버로딩으로 문자열 조작이 가능하다. string을 통해 문자를 다른 형태의 타입으로 전환시킬 수도 있다.
문자열을 다룰 때에는 이스케이프 시퀀스를 통해 다양한 기능과 에러를 막을 수 있다.
string 타입이 매우 좋은 기능을 가지고 있으나 실제로 많이 사용을 하지 않는 이유는 사용하는 개발 프레임워크가 자신만의 문자열 탑입을 이용하고 개발자들이 자신만의 문자열 타입을 정의해서 사용하는 경우가 많기 때문이다.
코딩 스타일에서 좋은 스타일을 구성하는 요소로는 문서, 분할, 네이밍, 언어의 사용 형태, 포매팅이라고 볼 수 있다. 문서라고 하면 보통 주석을 의미한다. 주석은 코드가 어떤 일을 수행하는지를 표현하는 도구이다. 함수가 하는 역할과 받는 인자, 리턴값, 익셉션 등을 기록하여 남기는 것이 보통이다. 또한 코드 자체 보다는 파일 저자, 생성된 날짜, 비전 정보도 주석으로 포함된다. 반드시 코드가 업데이트 된다면 주석도 업데이트가 되어야 한다.
코드 분할은 함수 하나가 한 가지의 역할만을 해야 한다는 것을 의미한다. 큰 덩어리의 코드를 다양한 함수인 작은 덩어리로 쪼개는 것이다. 리팩토링은 코드를 재구성하는 것을 말한다. 멤버 변수를 캡슐화 하여 추상화를 강화시키고 메서드나 클래스를 추출하여 코드를 좀 더 논리적으로 분할 할 수도 있다.
네이밍은 몇 가지 원칙을 가진다. 이름이 숫자로 시작할 수 없고 밑줄이 두 개 들어가는 이름이나 밑줄로 시작하는 이름도 불가능하다. 좋은 이름을 선택하는 방법은 그것의 목적을 정확히 설명해줄 수 있는 이름을 가지는 것이다. 네이밍을 할 때 보편적으로 통용해서 사용하는 방법들이 몇 개 있다. 클래스에 속한 데이터 멤버는 앞에 m을 붙이고 static 변수는 s를 상수값에는 k를 붙인다. 참/거짓의 이진 변수 값에는 b나 is를 붙이고 카운터로 사용되는 변수에는 n을 붙이는 것이 통상적이다.
언어의 사용 형태의 대표적인 예로서 포인터 대신 참조형을 사용하는 경우이다. 이 때 발생하는 장점으로는 참조형이 포인터보다 안전하다. 메모리 주소를 직접 다루지 않기 때문에 nullptr이 될 수 없다. 또한 코드의 스타일이 더 좋아진다.
포매팅은 코드의 외적인 형태를 가지고 나타나는 코딩 스타일이다. 중괄호의 정렬 위치가 가장 큰 예시가 될 수 있다. 함수를 정의하거나 반복문, 조건문 등을 사용할 때 중괄호를 통해 스코프를 표시하게 되는데 이 때 중괄호의 위치가 중요한 문제가 된다. 또한 탭이나 공백에 대한 문제도 발생할 수 있다.
'C++' 카테고리의 다른 글
C++ 프로그램 디자인 (0) | 2017.07.13 |
---|---|
C++ 언어의 기초 (0) | 2017.07.11 |
C++ 강의 7장 - 참조자(Reference) - (1) | 2017.04.24 |
C++ 강의 6장 - inline 함수 & 이름 공간(namespace) - (0) | 2017.04.23 |
C++ 강의 5장 - 함수 오버로딩 및 디폴트 값 - (0) | 2017.04.16 |