[포스코 x 코딩온] 스마트팩토리 개발자 과정 17주차 | 구조체와 클래스 (1)

배돌·2023년 5월 2일
0

철수가 아무개 학교 재학생의 인적사항을 기록하는 프로그램을 작성을 하려한다. 학생임을 표현하기 위해 student, 이름을 넣기위해 name, 나이를 적기위해 age... 다양한 변수들을 정의하고, 변수들에 값을 넣고 학생1의 정보를 작성했다. 이어서 student2, name2, age2 변수를 만들고 학생2의 정보를 입력하고, student3, name3, age3...
이렇게 해서 철수는 100명의 학생부를 만들어 냈다. 와 대단해 짝짝짝

철수의 이런 노력이 아쉽게도 구조체의 기능을 알았더라면 더 효율적으로 코드를 작성할 수 있었을 것이다.

구조체

구조체 (Record, Structure) 는 서로 다른 데이터타입/자료형의 변수들을 그룹화할 수 있는 사용자 정의 데이터타입/자료형을 말한다. 표현하고자 하는 변수의 특징,요소들이 여러가지 일 때 그것을 묶어 하나의 새로운 의미를 만들 때 사용한다.

학생이라는 객체는 이름, 나이, 학번, 전공 등등 다양한 특성들을 지니고 있다. 구조체를 사용하면 해당 객체를 표현하기 위해 필요한 여러 요소들을 하나의 템플릿으로 묶어 처리를 할 수 있다.

#include <iostream>

using std::string;
using std::cout;
using std::endl;

struct Student {
	string name;
	string age;
	int grade;
};

int main() {
	struct Student s1;
	Student s2;

	s1.name = "홍길동";
	s1.age = "18";
	s1.grade = 3;

	s2 = { "성춘향", "16", 1 };

	cout << "학생1 : " << s1.name << " " << s1.age << "세 " << s1.grade << " 학년" << endl;
	cout << "학생2 : " << s2.name << " " << s2.age << "세 " << s2.grade << " 학년" << endl;

	return 0;
}

Student 구조체에 이름, 나이, 학년을 담아 선언을 했다. main 함수에서 사용할 구조체를 새로운 학생의 정보를 입력하기 위해 일일이 새로운 변수를 선언하지 않고도 Student 구조체를 이용하여 효율적으로 코드를 작성할 수 있게 된다.

다른 함수에서도 쉽게 접근하고 수정하기 위해 구조체는 전역으로 정의한다.
헤더파일이나 네임스페이스에 동일한 구조체가 있다면 충돌을 방지하기 위해 "struct Student s1;" 처럼 명시적으로 선언을 해주면 된다.

클래스

클래스 (Class) 는 데이터와 함수를 하나로 묶는 객체 지향 프로그래밍(OOP)의 기본개념이다. 구조체와 비슷한 역할을 하지만 개념을 확장하여 몇가지 차이점을 가진다.

    1. 상속

기존에 클래스에서 속성과 기능을 가져와 코드 재사용 및 효율을 높일 수 있다.

    1. 멤버함수

구조체는 기본적으로 함수를 지원하지 않는다. 이를 개선하여 클래스에서는 생성자, 소멸자, 멤버함수(메소드,method)를 지원한다.

    1. 접근제어자

클래스 내부의 요소들을 보호하고 캡슐화를 강화한다. 사용자에게 공용 인터페이스를 통해서만 클래스에 접근하게 하여 보안과 편의성을 높일 수 있다.

#include <iostream>

using std::string;
using std::cout;
using std::endl;

class Student_Class {
	string name;
	string age;
	int grade;
public:
	Student_Class(string name, string age, int grade);

	string get_name() { return name; }
	string get_age() { return age; }
	int get_grade() { return grade; }
};

int main() {
	Student_Class s3("이몽룡", "21", 2);

    cout << "학생   : " << s3.get_name() << " "
					   << s3.get_age() << " 세 "
					   << s3.get_grade() << " 학년" << endl;

	return 0;
}
profile
스마트팩토리 지향 누-비

0개의 댓글