쑤쑤_CS 기록장

[TIPS 20기]8. C언어 여덟번째 강좌 정리 본문

IT 지식 기록/TIPS - C 언어 수업 정리

[TIPS 20기]8. C언어 여덟번째 강좌 정리

(╹◡╹)_ 2019. 1. 28. 20:50
728x90



[ 강의 정리 ]




[18장. 구조체와 연결 리스트] 구조체를 많이 쓰면 프로그램 유지, 보수가 쉽다

<18.2 데이터를 그룹으로 묶는 구조체>


* 데이터 구조화 방법 1)배열 2)구조체

배열의 한계 : 배열은 크기가 같은 데이터만 그룹으로 묶을 수 있다

구조체 : 크기나 형식이 다른 데이터를 그룹으로 묶어 사용할 수 있도록 하는 문법.

기본 자료형이나 사용자가 정의한 자료형을 그룹으로 묶어 새로운 자료형을 만들 수 있다.


* 구조체로 선언한 변수의 요소 사용하기

구조체로 선언한 변수는 .(요소 지정) 연산자와 자신이 사용할 요소의 이름을 함께 적어서 사용한다

구조체변수이름 . 사용할요소


* 구조체로 선언한 변수를 포인터로 사용하기


* 연산자 우선순위 문제를 해결하는 -> 연산자

<18.3 배열과 구조체>


<18.4 구조체로 만든 자료형의 크기>


* 구조체 멤버 정렬 기준

구조체의 요소를 일정한 크기로 정렬하여 실행 속도를 높이기 위해 C컴파일러가 구조체 멤버 정렬 기능을 제공한다.

1, 2, 4, 8 바이트 단위로 정렬 가능하다

컴파일러에 설정된 구조체 정렬 기준에 따라 구조체 크기가 달라진다.

2바이트 정렬

구조체의 각 요소는 2의 배수에 해당하는 주소에서 시작할 수 있다

4바이트 정렬

가장 많이 사용. 구조체 멤버 변수 중 가장 큰게 4바이트인 경우 4바이트 정렬 사용됨.

8바이트 정렬

구조체에 8바이트 데이터(double형)가 있다면 8바이트 정렬을 따르지만 8바이트 단위로 메모리가

 사용되므로 낭비가 심하다.

<18.5 구조체를 활용한 연결 리스트>

사용자가 원하는 만큼 숫자 N개를 입력하는 경우, 그 숫자들을 저장하기 위해 동적 할당된 메모리의 주소를                 저장하는 포인터 N개가 필요할 것

각 포인터는 숫자 하나씩만 가리킬 수 있으므로, 포인터들끼리의 연결은 없음

-> 사용자가 숫자를 입력할 때마다 동적 메모리를 할당해 숫자를 저장한다는 표현이 어려워짐

--> 구조체를 이용

연결리스트 : 다음 형식으로 자료를 관리하는 방법

포인터1 -> 숫자1 | 포인터2 -> 숫자2|포인터3 -> (숫자3이 입력되면 그 숫자가 저장된 메모리를

 가리키기 위해 숫자2와 함께 미리 생성해 둠)

<19장. 파일 입출력>


 수업 시간 생략


https://www.youtube.com/watch?v=M9OpiN5WUfs&index=28&list=PLiZvlxkcLhakQwbPjkyfuHFy1IVG-VXrP

-> 동영상 강의 참고


 


<20장. 함수 포인터>


<20.1 함수 포인터>

* 함수 포인터 Function Pointer

+특정 함수를 구성하는 시작 명령의 위치를 가리키는 포인터

+함수 포인터를 사용하여 함수를 호출하여 실행 가능

+함수의 주소 값으로 함수 실행하기

int(*p) //()를 사용하지 않으면 '반환형이 int 포인터인 이름이 p인 함수이다.'라고 의미가 아주 바뀌니                         () 꼭 사용해야된다

함수를 가르키는 포인터. 함수의 이름을 빼고 괄호 로 선언

//함수 포인터 선언 및 함수의 주소 대입

int(*p)(int, int); //Sum 함수를 가리킬 수 있는 함수 포인터 선언

p = &Sum; //Sum함수의 주소를 p에 저장

//함수 포인터로 함수 호출

int result = (*p)(2, 3); //int result = Sum(2,3);과 동일

int result = p(2, 3);; //동일하게 동작

<20.2 함수 그룹>

+ 원형이 같은 함수들을 묶기

함수의 포인터로 같은 수의 매개 변수와 자료형 그리고 같은 형태의 반환 값을 가지는 함수들을

 그룹으로 묶을 수 있다.

+ 함수 포인터를 사용하여 비슷한 함수를 반복문으로 호출하기

구조적으로 if문을 많이 사용하고 싶을 때(ex. 기능을 부여하는 메뉴) 함수의 포인터를 사용하면 좋다.

<20.3 콜백 함수>

동영상 및 블로그 참고

https://blog.naver.com/tipsware/221286052738 <함수 포인터>

->Function Pointer : 미래에 대처할 수 있는 구조 확장, 최적화 이론(if문 대신할 수 있음)



이렇게 C언어 강의가 총 8강좌로 끝났습니다~~!!

다음부터는 필요한 부분만 쏙쏙 진행되는,  C++강의 정리로 이어집니다 :)

내용 정리 시 -는 제가 직접 작성한 부분, +는 강사님 강의 자료를 인용한 부분 입니다.






https://blog.naver.com/tipsware/221028559903

김성엽 이사님의 친절한 블로그 정리글 입니다! 이 글을 중심 교재로 블로그 정리도 이루어 집니다 ㅎㅎ



<C++> C문법을 조금더 편하게 만든 by 더욱 똑똑해진 컴파일러

개발자를 바라보는 시각이 다르다.

 - C : 개발자를 똑똑하게 봄. 언어에 가이드라인이 없다.

 - C++ : 개발자를 잘 못하는 어린 양으로 봄. 언어에 가이드 라인이 있다.



* C의 특징

- 퍼포먼스에 극대화. 운영체제를 만들기 위한 언어

- 편의점 구조. 주인이 통제 가능하다고 생각하는 영역. 고객이 알아서 행동하는 방법.

- 물품 : 변수, 자료, 데이터. 사람 : 함수

+ 장점 : 손님은 원하는 물건을 빠르게 찾아서 구매할 수 있다

+ 댠점 : 변화에 대처가 약하다

- 데이터에 변화가 오면 함수도 같이 바뀌어야 한다. 대 혼란이 온다.

* C++

- 효과적인 대응. 조건 변화와 유지 보수에 극대화. 응용프로그램을 만들기 위한 언어.

- 햄버거 집 / 은행 구조. 내부는 보호를 위해 손님이 못들어 오게 한다. 칸막이를 통해 절반만 줄선 구조

- 단점 : 줄을 서야 한다. 손님들의 역할이 최소화 된다. 속도가 떨어진다.

- 장점 : 내부의 구조가 바뀌어도 손님들은 영향을 받지 않는다. 데이터를 내부에 몰아 넣고 외부와

연결성을 분리시킨다. 내부가 바뀌어도 변화의 범위가 적어 큰 지장이 없다.

- 변화에 효과적인 대처 : 데이터와 함수의 역할을 분리시킴 -> 유지보수가 좋아진다

- 역할에 따른 이름 구분 - function 칸막이 외부 / interface function 칸막이 내부 / 메소드 칸막이 내부에서                             일하는 직원 알바생들 (OOT이론)

+ 장점 : 물건의 위치가 바뀌어도 손님은 혼돈을 겪지 않는다

*객체 지향이란?

C++에서는 정보의 독립성과 일관성을 유지할 수 있도록, 데이터를 정의하는 구조체나 해당 구조체를

    사용하는 함수를 하나로 표현할 수 있도록 하였다. ...

* (비유) 커피를 타는 일

- c : 사람이 커피/설탕/프림 골라서 직접 타먹음 . 바리스타의 교육 필요. 바리스타의 능력(개발자)에 따라

맛이 달라짐

- c++ : 자판기. 자판기를 만드는 기술. 대량생산과 일관적인 품질 제공 가능. 자판기 = 객체. 자판기를 잘

만들어야. 쓰는사람과 만드는 사람 역할이 분리된다.

 이러한 철학을 바탕으로 이해하면 된다 :) 철학이 다른 언어다. 


* 구조



[C++]

//클래스

class People

{

prvate:

char name[10];

int age;

double height;

public:

void AddPeople() //매개변수 사라짐

{

scanf("%s", name); //맴버변수 그냥 쓸 수 있다. 포인터가 사라짐

scanf("%d", &age); // this -> age = 5 정석. 앞에 this ->가 모두 생략되었다고 생각하면 된다.

int age라는 지역 변수가 선언되었을 경우 this 는 꼭 적어야된다.

scanf("%lf", &height);

}

}

//object

void main(){

class People data;

data.AddPeople(); //data안의 addpeople호출하겠다. 컴파일러가 "data를 쓰는 AddPeople"로 해석한다.

(표현법을 바꿈)

}

/**

    p가 this

늘 쓸 수 있는 this가 내부적으로 숨겨있음

어차피 주소가 넘어가니까 누군가는 포인터를 받아야되고 그 이름이 this

함수가 쓰는 구조체를 하나의 class로 집어넣어서 개발자가 편하게 프로그램을 바라볼 수 있도록 한다 :                 c++의 첫번째 철학

**/


* class 가 object를 instance 한다

class 설계도

object객체 자판기

instance 자판기를 만드는 과정




#Tips강좌 #Tips프로그래밍강좌 #김성엽 #지식나눔강좌 #tipssoft





728x90
Comments