Struct와 Class
Coddy C++ 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 104개 중 37번째.
C++에서 struct와 class는 거의 동일합니다. Both는 멤버 변수, 멤버 함수, 생성자를 가질 수 있으며 inheritance를 지원합니다. 유일한 차이점은 기본 access 수준입니다.
class에서는 멤버가 기본적으로 private입니다. struct에서는 멤버가 기본적으로 public입니다.
struct Point {
int x; // 기본적으로 public
int y; // 기본적으로 public
};
class Circle {
double radius; // 기본적으로 private
public:
double getRadius() { return radius; }
};이는 inheritance에도 적용됩니다. struct는 기본적으로 public 상속을 하는 반면, class는 private 상속을 합니다:
struct DerivedStruct : Base {}; // public 상속
class DerivedClass : Base {}; // private 상속이러한 기본값을 넘어서는 기술적 차이는 없습니다. 하지만 관례가 중요합니다.
대부분의 C++ 프로그래머는 공개 멤버를 가진 간단한 데이터 컨테이너(좌표나 구성과 같은)에 struct를 사용하고, 캡슐화와 동작이 중요할 때는 class를 사용합니다. 이 관례를 따르면 다른 개발자들이 코드의 의도를 더 명확하게 이해할 수 있습니다.
챌린지
쉬움C++ 관례에 따라 struct와 class 중 언제 무엇을 사용해야 하는지 보여 주는 간단한 구성 시스템을 만들어 보겠습니다. 공개적으로 접근할 수 있도록 설계된 단순한 데이터를 위해 struct를 만들고, 캡슐화와 제어된 접근이 필요한 데이터를 위해 class를 만듭니다.
코드를 구성하기 위해 두 개의 파일을 만듭니다:
Config.h: 서로 다른 종류의 구성 데이터를 나타내는 struct와 class를 모두 정의합니다.먼저
Dimensions라는struct를 만듭니다. 이는 너비와 높이(int모두)를 저장하는 간단한 데이터 컨테이너입니다. struct는 기본적으로 public 멤버를 가지므로 getter 없이 직접 접근할 수 있어야 합니다. 너비와 높이의 곱을 반환하는area()메서드도 포함합니다.그런 다음 적절한 캡슐화를 사용하여 애플리케이션 설정을 관리하는
AppConfig라는class를 만듭니다. 애플리케이션 이름(string)과 창 크기를 위한Dimensions객체를 저장해야 합니다. class 멤버는 기본적으로 private이므로 public 인터페이스에 접근할 수 있도록 명시적으로 지정해야 합니다. 다음을 제공합니다:- 애플리케이션 이름, 너비, 높이를 받는 생성자
- 이름을 반환하는 getter
getAppName() Dimensions를 반환하는 gettergetWindowSize()- 다음을 출력하는
displayConfig()메서드:"App: <name>, Window: <width>x<height>, Area: <area>"
main.cpp: struct와 class 사용 방식의 차이를 보여 줍니다. 입력에서 애플리케이션 이름, 너비, 높이를 읽습니다(각각 별도의 세 줄). 그런 다음:- 너비와 높이 값으로
Dimensionsstruct를 직접 생성하고, 멤버에 직접 접근하여 다음을 출력합니다:"Direct struct access: <width> x <height>" - 세 값을 모두 사용하여
AppConfig객체를 생성합니다. - 전체 구성을 표시하기 위해
displayConfig()를 호출합니다. - getter를 사용하여 창 크기를 가져오고 다음을 출력합니다:
"Via getter - Area: <area>"
- 너비와 높이 값으로
이 과제는 다음 관례를 강조합니다. 좌표나 크기처럼 단순하고 투명한 데이터를 가지고 있을 때는 struct를 사용하고, 접근을 제어하며 데이터에 동작을 추가하려 할 때는 class를 사용합니다.
std::stoi()를 사용하여 너비와 높이 입력을 문자열에서 정수로 변환합니다. 헤더 파일의 헤더 가드도 잊지 마세요.
직접 해보기
#include <iostream>
#include <string>
#include "Config.h"
using namespace std;
int main() {
// 입력 읽기
string appName;
string widthStr;
string heightStr;
getline(cin, appName);
getline(cin, widthStr);
getline(cin, heightStr);
int width = stoi(widthStr);
int height = stoi(heightStr);
// TODO: width와 height를 가진 Dimensions 구조체 생성
// Access its members directly to print: "Direct struct access: <width> x <height>"
// TODO: appName, width, height로 AppConfig 객체 생성
// TODO: AppConfig 객체에서 displayConfig() 호출
// TODO: Use getWindowSize() getter to get dimensions and print: "Via getter - Area: <area>"
return 0;
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 C++ 컴파일러