[Computer Science] Class와 Struct의 차이

민지홍·2024년 9월 16일
0

Computer Science

목록 보기
1/3
post-thumbnail

서론

프로그래밍을 하다보면 서로 관련 있는 여러 타입의 데이터들을 한 번에 관리해야할 때가 많다. C언어를 공부할 땐 구조체(Struct)가 있다는 것을 알았고, C++를 공부할 땐 클래스(Class)가 있다는 것을 알았다. 그런데 클래스와 구조체 모두 여러 타입의 데이터들을 관리할 때 사용한다면 C언어에서 사용하던 구조체를 사용하면 되지 왜 굳이 C++에서 클래스라는 것을 만들었는지 의문이 들어서 클래스와 구조체의 차이점에 대해 알아보았다.

본론

기본 접근 지정자 (Default Access Specifier)

  • 클래스 : 클래스의 멤버들은 기본적으로 private이다. 즉, 클래스 내부에서만 접근이 가능하며, 외부에서는 접근할 수 없다. 이는 클래스를 사용하여 데이터를 캡슐화하고, 데이터의 무단 변경을 방지하는 데 유용하다.
  • 구조체 : 구조체의 멤버들은 기본적으로 public이다. 이는 구조체가 데이터를 저장하는 용도로 사용되며, 멤버 변수에 쉽게 접근할 수 있도록 설계되었음을 의미한다.

상속 (Inheritance)

  • 클래스 : 클래스에서 다른 클래스를 상속할 떄, 상속 형태를 명시하지 않으면 기본적으로 private 상속이 적용된다. private 상속은 상속받은 멤버들이 파생 클래스 내에서만 접근 가능하다는 것을 의미한다.
  • 구조체 : 구조체에서 다른 구조체를 상속할 때, 상속 형태를 명시하지 않으면 기본적으로 public 상속이 적용된다. public 상속은 기반 클래스의 public 및 protected 멤버가 파생 클래스에서도 동일한 접근 수준을 유지한다는 것을 의미한다.

사용 목적 (Intended Use)

  • 클래스 : 클래스는 객체 지향 프로그래밍의 주요 구성 요소로, 데이터와 그 데이터를 조작하는 함수(메서드)를 함께 캡슐화하여 사용한다. 이는 복잡한 시스템을 모듈화하여 설계할 때 유리하며, 대규모 소프트웨어 개발에 적합하다.
  • 구조체 : 구조체는 주로 관련 데이터를 묶어서 사용하는 데 초점을 맞춘다. C언어의 구조체와 유사하게, 간단한 데이터 컨테이너로 사용되며, 메서드보다는 데이터 필드가 주를 이룬다.

생성자, 소멸자, 멤버 함수 (Constructors, Destructors, and Member Functions)

  • 클래스와 구조체 모두 C++에서는 클래스와 모두 생성자, 소멸자, 그리고 멤버 함수를 가질 수 있다. 이는 클래스와 구조체가 기능적으로 거의 동일하다는 것을 보여준다. 다만, 기본 접근 지정자와 상속의 차이로 인해 사용 목적에 따라 선택이 달라진다.

Type 차이

  • 클래스 : 참조 타입(reference) -> 힙 메모리에 할당
    • 클래스는 힙의 주소를 전달하기 때문에 값이 아닌 같은 주소가 참조되어 멤버값을 변경하면 외부에서도 변경된다.
    • 클래스는 인스턴스를 생성할 때 마다 힙에 메모리 할당하기 때문에 값을 폐기하기 위해서는 가비지 컬렉션이 필요해서 속도 측면에서는 구조체보다 떨어질 수 있다. 하지만 값들을 가리키는 주소만 저장하기 때문에 메모리 측면에서는 구조체보다 유리하다.
  • 구조체 : 값 타입(value) -> 스택 메모리에 할당
    • 구조체는 함수 안에서 멤버값을 변경해도 외부에서는 값이 변경되지 않는다. 복사된 데이터는 원본 데이터가 아니기 때문이다.
    • 구조체는 가지고 있는 변수들의 값들을 모두 스택에 저장되기 때문에 너무 많은 데이터를 저장하면 스택 오버플로우가 발생할 수 있다.

결론

클래스와 구조체는 유사한 점이 많다. 여러 타입의 데이터를 관리하는데 유용하고 생성자, 소멸자, 그리고 멤버 함수를 모두 가질 수 잇는 것으로 보아 기능적으로 거의 동일하다고 볼 수 있다. 하지만 기본 접근 지정자와 상속의 차이가 존재하고, 클래스는 참조 타입으로 힙 메모리에 할당되고, 구조체는 값 타입으로 스택 메모리에 할당된다.

출처

https://funfunhanblog.tistory.com/96

0개의 댓글