Post

데브코스 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.