나의 코딩 규칙

보물창고·2021년 7월 26일
0

c++

컴파일 관련

  1. 미리 컴파일된 헤더를 사용하자
  2. 다른 클래스를 참조한다고 하면 헤더 파일에는 전방선언하고,
    cpp에서는 헤더 추가하자. 이때 헤더에서는 외부클래스의 객체는 동적할당만 가능하다.

const 레퍼런스 타입반환

  • const 레퍼런스 타입으로 객체를 반환해서 레퍼런스 타입으로 받게 되면,
    수명연장 문제, 기존 객체 삭제 시에 새롭게 만든 객체는 사용 불가능하다.

  • int형이나 기본 데이터의 경우 value 값으로 반환하자.
    굳이 할 필요는 없다.

라이브러리 관련

: 공용으로 사용되는 친구들은 모두 라이브러리로 옮기자.

변수

1.전역변수

  1. 전역으로 사용하던 unsing namespace std; 사용하지 말자!
  2. 전역변수를 여태까지 파일 상단에 초기화를 진행했지만, 옳지 못한 방법이다.
    레퍼런스를 반환하는 함수에다가 초기화를 하고,
    static 변수를 필요로 할때 이 함수를 호출하는 방식으로 진행하자.
    https://velog.io/@kwt0124/1%EC%9E%A5.-c%EC%97%90-%EC%99%94%EC%9C%BC%EB%A9%B4-c%EC%9D%98-%EB%B2%95%EC%9D%84-%EB%94%B0%EB%A6%85%EC%8B%9C%EB%8B%A4

2.클래스의 멤버 변수

  1. 클래스의 멤버 변수는 m_ 키워드를 붙이자.
  2. 함수내에 들어오는 변수들을 구분하자.
  • 변경되지 않는 변수들은 const data & // const 레퍼런스 타입으로 지정하고, 명칭은 in_ 키워드를 붙여서 입력으로만 들어오는 파라미터 라는 것을 나타내자.
  • 함수 내에 들어와서 변경되는 변수의 경우에는 레퍼런스 타입으로 받고,
    out_ 이라는 키워드를 붙여서 변경되는 파라미터임을 나타내자.
    => 레퍼런스를 통해 복사를 방지하자!

함수

  1. 멤버들의 변수 변경을 막기 위해서는 const를 함수명 뒤에 사용하자.

포인터 사용

  1. new ~ delete는 생성자와 소멸자에서
    but, 스마트 포인터 사용을 권장하자.
    -> 오브젝트의 크기가 크지 않다면 멤버 오브젝트로 선언해서 사용하자.

초기화

  1. {} : uniform initialization을 사용해서 초기화를 엄격하게 하자.
    이유로는 인자로 호출되는 생성자와 데이터형이 다르면 컴파일 오류를 발생시킨다.

클래스

  1. 생성자는 explicit을 통해 변환 생성을 방지하자.
  2. 이니셜라이저를 사용해 초기화를 진행하자.
  3. 클래스의 메모리를 절약하기 위해서 가장 큰 멤버 변수의 사이즈에 맞춰서 멤버 변수들을 정돈하도록 하자.
  4. 병렬프로그래밍은 아니지만, 대비해서 alignas() 키워드를 사용하거나,
    클래스 한개의 크기를 32바이트나 64바이트의 크기로 맞추도록 하자.
  1. 클래스 내에서 포인터를 사용한 리소스 관리는 최대한 피하자.
  2. 소멸자 뒤에는 noexcept 키워드를 붙이자.
  3. 복사, 이동, 복사대입, 이동대입 생성자 호출을 막기 위해
    public에 선언하고, delete를 붙이자.
  4. get, set 할때 추가적으로 get 함수 뒤에는 const를 붙여서 스코프 이내의 값이 변경되는 것을 방지하고, set 함수는 const 레퍼런스 타입으로 반환함으로써 복사를 방지하자.

상속, 의존, 등등

  1. 추상클래스에서는 virtual 함수 선언만하자
  2. 추상클래스에서 소멸자는 반드시 virtual키워드 붙이자.
  3. 추상 클래스에서는 멤버 변수 사용 금지!, 일반 함수도 금지!
  1. 다른 클래스에 접근한다면 #include보다는 전방선언과 friend를 이용하자.
    https://velog.io/@kwt0124/10.4-%EC%84%9C%EB%A1%9C%EB%A5%BC-%EC%B0%B8%EC%A1%B0%ED%95%98%EB%8A%94-%EC%A0%9C%ED%9C%B4-%EA%B4%80%EA%B3%84

클래스 설계

  1. cpp와 헤더에서 헤더에는 전방선언, cpp 에서는 #include를 사용하자.
  2. 하나의 부품을 나타내는 클래스가 있다면 따로 클래스를 만들어서 사용하자.
    예를 들면 좌표를 나타내는 클래스가 있따. 절대 추상 클래스 내에 넣지 말자!
  3. 부모내의 멤버 변수를 파생 클래스에서 set할 경우에는 protected를 활용하자. 부모내의 함수 사용하는 것이 많으면 오버헤드 증가하고, set함수를 계속해서 늘려야 하기 때문에 비효율 적이다.

stl

  1. vector
  • emplace_back으로 추가하자.
  • reserve()를 통해 메모리를 미리 확보하자.
  • erase 사용을 줄이고, 만약 몬스터 제거 시에는 불변수로 렌더되지 못하게 처리하자.

초기화는

  1. 이니셜라이저를 사용
  2. 상속 클래스에 대해 초기화
  3. () 보다는 {}는 사용하자
profile
🔥🔥🔥

0개의 댓글