본문 바로가기
카테고리 없음

[C/C++] 포인터와 참조 / 구조체와 클래스

by TSpoons 2024. 11. 4.

https://docs.popekim.com/ko/coding-standards/cpp

 

C++ 코딩 표준 | 포프의 문서창고

TOP 개발자에게 배우는 컴공수업 | 수업료는 최저시급, 난 최고연봉 | 프로그래밍 공부순서 야근 없이 오직 실력으로 대우받는 프로그래머가 되고 싶다고요? POCU 아카데미에서 시작하세요!

docs.popekim.com

pointer vs reference

어셈블리어는 포인터, 참조 모두 같다.

1. 메모리 접근:

  • 포인터: 특정 메모리 주소를 가리킬 수 있어 유연하지만, 잘못된 포인터 설정은 의도치 않은 메모리를 건드려 프로그램에 치명적인 오류를 일으킬 수도 있다.
  • 참조: 특정 변수에 고정되며 다른 주소로 변경할 수 없기 때문에 포인터보다 안전하게 사용할 수 있다.

2. 참조를 사용하는 이유

  1. 복사 방지: 함수 인자를 복사하지 않고 참조로 전달하면 큰 객체의 경우 성능에 유리합니다.
  2. Null 포인터 방지: 참조는 Null 값을 가질 수 없기 때문에 Null 포인터 오류를 방지한다.

+) 추천 code standard

- 입출력 규칙 정리: 입력 매개변수는 참조, 출력 매개변수는 포인터를 사용

 

 

이를 통해 입력과 출력을 명확히 구분하고, 포인터는 Null 체크를 통해 안전하게 사용

C++에서 input output이 구분이 안되면? --> input은 참조형으로 하고, output은 포인터를 사용해서 나타내자.

(EX: input은 a,b/ output은 &c로 매개변수를 나타내면 된다. -> null pointer를 체크해야 한다. -> assert 하거나 exception을 고려)

void exampleFunction(const int& input1, const int& input2, int* output) {
    assert(output != nullptr); // Null 포인터 확인
    *output = input1 + input2;
}

 


struct vs class

 

1. 접근 제어 및 사용 용도:

 

  • Struct: 기본 접근 지정자가 public이며, 주로 C 언어에서 사용되는 단순 데이터 컨테이너
  • 구조체는 할당 시 기본 대입 연산자가 제공되어 깊은 복사 없이 간단하게 복사됩니다.
  • Class: 기본 접근 지정자가 private이며, 데이터와 함수를 함께 캡슐화하는 데 적합
  • 사용 가이드라인:
    • Struct: 데이터를 단순히 저장하고 접근할 때 주로 사용
    • Class: 데이터 외에도 메서드를 포함하여, 데이터와 동작을 함께 정의할 때 사용

 

 

 

데이터를 기준으로 보자!

struct는 순수 데이터, public일 때 정의하자

class는 내부 함수, 내부 멤버변수 있을 때 정의하자