들어가기
이제는 뭐가 뭔지 대충을 알게 된 것 같다. 그런데, 공부를 하면 할 수록 차이점을 못찾겠는 것들이 존재할 수 도 있다. 비슷하지만 다른 두 가지라고 한다면 이를테면, 클래스와 구조체 그리고 추상클래스와 인터페이스가 있다.
이 둘의 차이점, 사용 목적과 사용 이유 등을 명확히 하고 간다면 나중에 더 적절한 방법을 선택하는데 도움이 될 것이다.
클래스와 구조체란
클래스와 구조체의 한줄 요약
클래스 : 데이터(필드)와 기능(메서드)을 함께 묶고, 상속이나 다형성 같은 기능 확장이 가능한 참조형 데이터 구조
구조체 : 작고 가벼우며, 주로 값 자체를 담는데 집중한 값형 데이터 구조
클래스(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. 자주 복사되는 데이터인가? (함수 호출 시 전달할 데이터 용도 등)
'C# > C# 문법' 카테고리의 다른 글
| 객체 지향 프로그래밍 - 캡슐화란 (0) | 2025.09.15 |
|---|---|
| 객체 지향 프로그램 - 다형성(多形性)이란 (0) | 2025.09.14 |
| 추상 클래스와 인터페이스의 차이 (0) | 2025.09.11 |
| C# 중급 문법 (8) : 익명 메서드와 람다식 (0) | 2025.09.02 |
| C# 중급 문법 (7) : 델리게이트와 이벤트 (1) | 2025.08.31 |
