프로그래밍 언어/C & C++ 정리

구조체와 클래스의 차이

뽀또치즈맛 2024. 11. 2. 12:44

 

구조체와 클래스의 차이 중 가장 먼저 설명할 수 있는 것은

기본 접근 권한이 다르다는 것이다.

 

struct 는 기본적으로 public이고,

class 는 기본적으로 private이다.

 

컴퓨터는 struct와 class을 구분할까?

-> 어셈블리단에서는 이 둘의 차이가 있을까?

 

안난다.

C에 있던 기능이 다른 언어에 있다면, 고급 엔지니어가 만든 기능이다.

 

그럼 컴퓨터는 struct를 알까?

모른다. 그룹개념도 없다 따로따로 노는 건데 사실은,

메모리 어디에 접근한다 일 뿐이지,

클래스와 구조체는 거의 차이없이 돈다.

 

근데 컴파일러는 구분할까?

구분한다.

컴파일러 에러가 잡아내기 때문에

컴파일러는 private와 pubilc의 차이점을 안다.

 

구조체에 관한 코딩표준(기본)

 

C++에서는 구조체를 클래스처럼 쓸 수 있다.

  • 하지만 제발 절대 그러지 말 것
    - 클래스는 클래스로 쓰고 구조체는 구조체처럼!
  • 구조체는 C스타일로 쓰자

 

struct는 순수하게 데이터뿐이여야 한다(Plain Old Data, POD)

  • Plain Old Data -> 원시 데이터 int, float, char...로! 
    (메모리 카피가 가능하도록 원시 데이터 외에 사용하지 않아야 한다.)
  • 사용자가 선언한 생성자나 소멸자 X
  • static 아닌 private/protected 멤버 변수 X
    (=멤버 변수는 전부다 public으로하자)
  • 가상 함수 X ( = 가상 함수 같은 건 없어야 한다.)
  • 메모리 카피가 가능하다
    • memcpy()를 사용하여 struct를 char[]로, 혹은 반대로 복사할 수 있음

 

위에서 Plain Old Data라고 했는데 간혹 

포인터를 집어 넣는 경우는 있지만,

(포인터를 집어 넣는 경우에는
데이터 + 생성자 소멸자를 집어넣어서

메모리 할당과 해제를 관리해줘야한다.)

멤버 함수 넣고 이런 건 없다.

그런 건 해서도 안된다.