티스토리 뷰
본 자료는 숭실대학교 정보통신전자공학부 소속 소모임 BlindC에서 2학년을 대상으로 하는 C++ 스터디 진행을 위하여 작성합니다.
개인의 소중한 창작물이기 때문에 자료의 열람은 자유이고, 소스코드를 긁어갈 수 있도록 우클릭제한이나 기타 제한은 걸어놓지 않았으나, 외부 공개나, 2차 수정등은 자제해주시길 부탁드리며 편의상 반말로 진행하도록 하겠습니다.
구조체(struct)의 개념
C/C++ 에서는 구조화된 데이터를 처리할때 struct라는 개념을 사용하는데 이를 구조체 라고 한다. 구조화 되어 있다는 말은 의미가 연결되어 한 덩어리로 처리하는 방식을 말한다. 기초 프로그래밍에서 고급 프로그래밍으로 넘어가는 과정에서 이 struct에 대한 개념을 확실하게 잡지 않으면 차후에 배우게 되는 class에서 많이 해메게 될 것이기 때문에 사전에 한번 정리하는 시간을 갖도록 하자.
한 예를 들어서, 사람에 대한 정보를 처리하고자 하면, 사람에 대한 공통적인 정보들을 추출한 다음 이것을 묶어서 사용한다. 가령 사람이라면 누구나 이름이 있고, 나이가 있으며, 성별이 있을것이다. 이를 구조화 하면 다음과 같다.
1 2 3 4 5 6 | struct 사람 { 이름 나이 성별 }; | cs |
이를 다시 C언어로 바꾸어서 입력하면 다음과 같다.
1 2 3 4 5 6 | struct PERSON { char* m_name; int m_age; bool m_gender; }; | cs |
본격적인 설명에 앞서 네이밍 기법에 대해 간단하게 짚고 넘어 가겠다.
1. 구조체의 이름, 즉 구조체명은 클래스명과 구분하기 위하여 전부 대문자로 기입한다. (클래스의 경우 첫자만 대문자)
2. 구조체나 클래스 안에있는 변수들은 멤버변수라고 칭하며 이 변수들은 로컬 변수들과 구분하기 위하여 앞에 "m_" 이라고 붙여준다.
이것들을 지키지 않는다고 컴파일 에러가 나거나, 로직이 수행되지 않는것은 아니나, 원활한 협업과 가독성을 위해서 되도록이면 지켜주는 것이 좋다. 습관처럼 사용해야 한다.
먼저 PERSON 이라는 이름의 struct를 만들었다. 여기서 중요한것은 중괄호를 닫고 세미콜론을 해야 한다는점. 시험문제에서 손코딩이 나오면 이와같은 사소한 실수로 감점되기 쉽다.
이제 구조체를 만들었으니, 내용물을 채워야 한다. 내용물은 이름,나이,성별인데 이름은 문자열을 저장할 수 있는 데이터 타입인 char*을 사용, 나이는 정수를 저장할 수 있는 int형을 사용, 성별은 "남자" 아니면 "여자"이기 때문에 true 혹은 false로 저장되는 bool 타입을 사용했다.
이렇게 PERSON 구조체에 대해서 정의했으니, 이제 사용법을 보겠다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | int main() { PERSON p1; strcpy(p1.name, "홍길동"); p1.age = 18; p1.gender = true; printf("이름 : %s, 나이 : %d",p1.name, p1.age); if(p1.gender == true) printf("성별 : 남성\n"); else printf("성별 : 여성\n"); return 0; } | cs |
먼저 3 line에서 정의해놓은 PERSON 타입의 구조체 p1을 선언했다.
4~6line은 구조체 내부의 멤버변수를 초기화 하는 모습이다. 구조체 내부의 멤버변수로 접근하려면 '.'(직접 참조 연산자)를 이용한다. 구조체이름 뒤에 마침표를 찍고 멤버변수 이름을 입력하면 된다.
마지막으로 8라인에서 p1.name과 p1.age를 출력하고 if문을 이용해서 남성인지 여성인지 검출하는 소스를 작성해 보았다.
이렇게 간단하게 구조체의 정의와 선언, 사용에대해서 알아보았다. 여러명의 사람에 대해서 작성해야 하는 경우 name1,name2 age1,age2, gender1,gender2... 이렇게 선언하여 사용하는것보다 미리 정의해놓은 구조체를 활용하여 p1, p2등과 같이 사용하는것이 훨씬 효과적이다 라는 사실에 대해서는 벌써 느꼈을 것이다. 더 좋은점은 이러한 구조체를 배열로 선언해서 사용할 수 도있다.
1 2 3 4 5 6 7 8 9 | int main() { PERSON p[5]; for(int i = 0; i < 5; i++) p[i].age = i+1; return 0; } | cs |
설명이 부족하거나 잘 이해가 안되는 부분에 있어서 질문 해주시면 답변 드리겠습니다,
도움이 되었다면 광고를 클릭해주시면 작성자에게도 큰 도움이 됩니다 ^.^
'C,C++' 카테고리의 다른 글
C/C++ : 클래스(class) 생성자와 소멸자(Constructor & Destructor) (0) | 2016.04.12 |
---|---|
C/C++ : 클래스(class)의 개념 (1) | 2016.04.11 |
자료구조 : C++ 가변배열(Dynamic Array), 배열 동적할당 하기 (9) | 2016.03.29 |
자료구조 : 자료구조란? (Data Structure) (7) | 2016.03.29 |
C++ : 연산자 오버로딩(Operator overloading) (0) | 2016.03.29 |
- Total
- Today
- Yesterday
- C/C++
- 리눅스
- 악보
- 자료구조
- socket
- MFC
- 라즈베리파이
- 데이터베이스
- Sort
- UML
- 파이썬예제
- 클래스
- C++
- 프로세스
- 터미널
- 액터
- 파이썬
- 정렬
- 소켓
- 티라노 시그널
- 유즈케이스
- 안드로이드
- 클라이언트
- 소켓 프로그래밍
- C
- 디렉터리
- 파일
- 쓰레드
- 스레드
- 티그널
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |