쑤쑤_CS 기록장
[TIPS 20기]8. C언어 여덟번째 강좌 정리 본문
[ 강의 정리 ]
[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함수의 주소를 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
'IT 지식 기록 > TIPS - C 언어 수업 정리' 카테고리의 다른 글
[TIPS 20기]11. Windows 첫번째 강좌 정리 (0) | 2019.02.14 |
---|---|
[TIPS 20기]2. C언어 두번째 강좌 정리 (0) | 2019.02.13 |
[TIPS 20기]3. C언어 세번째 강좌 정리 (0) | 2019.02.07 |
[TIPS 20기]7. C언어 일곱번째 강좌 정리 (0) | 2019.01.24 |
[TIPS 20기]1. C언어 첫번째 강좌 정리 (0) | 2019.01.16 |