데브코스 TIL - Day 46
24년 1월 25일 강의를 들은 내용을 기록한 글입니다.
구조체
서로 다른 종류의 변수들을 묶어서 새로운 데이터 타입을 정의하는 것
- 문자형
- 정수형
- 실수형
- 포인터
- 배열
📘구조체 사용하는 이유
- 연광된 변수들을 하나로 묶어서 관리하기 위해
- 데이터 관리에 유용함
=>데이터 양이 많아지면 구조체가 유리함
■ 예) 학생 정보 관리 시스템
- 이름, 나이, 성별 등의 정보들을 모두 변수로 선언
- 각각의 변수를 별도로 관리하면 연관성을 알수 없고 관리가 어려움
- 학생 한명을 그룹으로 지정하여 이름, 나이, 성별 등의 정보들을 그룹으로 묶음
📘구조체 기본 형태
1
2
3
4
5
struct student {
char name[10]
int age;
int height;
}
- struct: 구조체 (데이터 타입)
- student: 구조체 이름
📘구조체 사용
[구조체 변수명].[구조체 멤버]
1
2
3
st1.name
st1.age
st1.height
■ 예제
1
2
3
4
5
6
7
struct student {
char name[10];
int age;
int height;
};
struct student st1 = {"혜민", 20, 170};
■ 평가문제
우리가 우체국에서 물건을 어디론가 보낼 때, 물건의 종류, 무게, 높이 등의 정보를 입력한다. 이러한 정보들을 갖고 있는 물건에 대한 구조체를 만들어보자.
구조체 멤버
- 이름 name
- 높이 height (cm)
- 무게 weight (kg)
1
2
3
4
5
6
7
struct Info{
char name[20];
int height;
int weight;
};
struct Info post1 = {"책", 30, 2};
공용체
- 사용자 정의 자료형
- 구조체와의 다른점: 메모리 공간 공유
1
2
3
4
5
6
7
8
9
10
11
12
13
// 구조체
struct student {
char name[10];
int age;
int height;
};
// 공용체
union unStudent {
char name[10];
int age;
int height;
}
열거형
- enum을 사용하여 정의
- 데이터를 열거한 집합
- 연속적인 데이터일 때 주로 사용
1
2
3
4
5
6
7
8
9
enum Week{
sun = 0;
mon;
tue;
wed;
thu;
fri;
sat;
};
메모리 구조
📘코드영역
- 실행할 명령어들이 순서대로 쌓임
- CPU가 명령어들을 하나씩 가져다가 수행
📘스택영역
- 모든 원소들의 삽입, 삭제를 한족 방향에서만 수행하도록 하는 선형 자료구조
- 지역변수 및 매개 변수 등은 모두 스택 메모리를 사용
📘힙영역
- 우리가 가장 많이 사용하는 메모리 영역
- 컴퓨터 메모리의 일부가 할당되었다가 회수하는 일들을 반복
- 컴파일 시가 아닌 런타임 때 사용자로부터 할당 메모리를 입력 받음
📘 동적으로 메모리를 할당하는 이유
정적으로 관리를 할 때는 상태가 변경될 때마다 메모리를 관리해줘야 함 (컴파일 시)
상태가 유동적이므로 런타임(실행)시에 메모리를 결정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
int main() {
int num;
int *student;
scanf("%d", &num);
student = (int*)malloc(sizeof(int) * num);
if (student == NULL) {
printf("메모리가 할당되지 않았습니다.");
return 0;
}
printf("할당된 메모리 크기는 %lu입니다. \n", sizeof(int) * (unsigned long)num);
free(student);
return 0;
}
프로그래밍 방식
📘 구조적 프로그래밍
- 순차적, 하향식, 폭포수 방식 (일방적인 형식)
- 기능적인 기본 단위: 함수
1
2
3
4
5
6
7
int Add(int a, int b);
int Minus(int a, int b);
int Main(void){
Add(1,2);
Minus(4,3)
}
- Add부터 Minus 순으로 아래(순차)적으로 수행
📘 객체 지향 프로그래밍
- 유연한 방식
- 기능적인 기본 단위: 객체
- 대표적 예: 이벤트 기반의 모든 윈도우 프로그램
■ 추상화
중요한 특징을 찾아낸 후 간단하게 표현하는 것
프로그래밍에서의 추상화:
- 코드의 공통된 특징을 묶는 것
■ 캡슐화
- 인터페이스를 사용하여 데이터를 조작
클래스 = 데이터 + 메소드
객체 내에 정보를 숨긴다. (정보 은닉)
This post is licensed under CC BY 4.0 by the author.