클래스와 구조체의 차이

들어가기

이제는 뭐가 뭔지 대충을 알게 된 것 같다. 그런데, 공부를 하면 할 수록 차이점을 못찾겠는 것들이 존재할 수 도 있다. 비슷하지만 다른 두 가지라고 한다면 이를테면, 클래스와 구조체 그리고 추상클래스와 인터페이스가 있다.

이 둘의 차이점, 사용 목적과 사용 이유 등을 명확히 하고 간다면 나중에 더 적절한 방법을 선택하는데 도움이 될 것이다.


클래스와 구조체란

더보기

클래스와 구조체의 한줄 요약

 

클래스 : 데이터(필드)와 기능(메서드)을 함께 묶고, 상속이나 다형성 같은 기능 확장이 가능참조형 데이터 구조

구조체 : 작고 가벼우며, 주로 값 자체를 담는데 집중한 값형 데이터 구조


클래스(class)

클래스의 특징을 먼저 알아보자. 클래스가 가지고 있는 데이터와 기능을 토대로 우리는 객체를 생성할 수 있다. 이런 점에서 볼때, 클래스는 객체의 청사진, 설계도 같은 역할을 한다고 짐작할 수 있다.

 

또한, 클래스의 큰 특징들은 다음과 같다.

특징 설명
참조 타입 객체는 힙 메모리에 할당되며, 객체에 대한 참조가 변수에 저장됨
상속 가능 상속을 통해 다른 클래스의 멤버(데이터와 기능)를 확장 가능
생성자 생성자를 통해 객체가 생성될 때 초기화 가능
소멸자 소멸자를 통해 더 이상 필요하지 않을 때 정리할 작업 정의 가능

 

참조 타입 설명에 대한 내용은 C언어의 메모리 영역과 관련이 깊으며, 프로그램을 실행할 때 데이터가 어디에 어떻게 저장되고 있는지에 대한 설명이다. 이는 추후에 자료구조에 관련해서 다룰 수도 있지만, 필요하다면 다음 링크를 남겨두겠다.

https://www.geeksforgeeks.org/c/memory-layout-of-c-program/

 

Memory Layout of C Programs - GeeksforGeeks

Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and programming, school education, upskilling, commerce, software tools, competitive exams, and more.

www.geeksforgeeks.org

 


구조체(struct)

클래스가 참조 타입이라면 구조체는 값 타입이다. 주로 작은 데이터 구조를 정의할 때, 클래스 보다는 구조체를 선호한다.

구조체의 특징은 다음과 같다.

특징 설명
값 타입 변수에 데이터가 저장되며, 메모리에 연속적으로 할당됨
상속 불가 구조체는 다른 구조체가 클래스에서 상속할 수 없음
생성자 매개변수가 없는 생성자는 자동으로 생성, 매개변수 정의 가능하지만 생성자 내에서 초기화 해야함
불변자 구조체는 불변 데이터 타입으로 사용되는 경우가 많음

 

값 타입과 참조 타입에 대한 설명은 다른 글에도 있지만, 간략하게 설명한다면...

참조 타입은 원본 값은 다른 곳에 저장되어 있고, 우리가 변수를 호출해서 get과 set을 할 때 그 주소를 타고 들어가 get과 set을 하는 것이다.

값 타입은 변수 자체에 값이 저장되어 있는 것을 말한다.

 


클래스와 구조체의 사용

클래스와 구조체의 공통점은 두 형태 모두 데이터를 정의하고 조작하는 방식이라는 점이다. 둘 다 데이터와 메서드가 포함할 수 있지만, 사용하는 방식과 목적에는 아주 중요한 차이점이 존재한다. 이는 두 방식을 언제 사용하는지를 보면 더 명확해질 수 있다.

 

클래스의 사용시기

1. 상속이 필요한 경우
2. 참조로 데이터 공유가 필요한 경우
3. 큰 데이터 구조가 필요한 경우
4. 가변 상태의 객체가 필요할 때
5. 수명 주기 관리가 필요한 경우

구조체의 사용시기

1. 작고 간단한 데이터 구조 (예시 : 좌표, 색상, 시간 간격 등)
2. 불변 상태의 데이터가 필요할 때
3. 메모리 효율성이 중요한 경우
4. 상속이 필요없는 경우
5. 자주 복사되는 데이터인가? (함수 호출 시 전달할 데이터 용도 등)