금오공대 컴퓨터공학전공 강의자료

Similar documents
K&R2 Reference Manual 번역본

윤성우의 열혈 TCP/IP 소켓 프로그래밍

금오공대 컴퓨터공학전공 강의자료

슬라이드 1

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap12-고급기능.pptx

본 강의에 들어가기 전

Microsoft PowerPoint - 08-C-App-19-Quick-Preprocessor

슬라이드 1

Microsoft PowerPoint - ch 전처리기, 다중 소스파일 pm1015

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

chap10.PDF

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

BMP 파일 처리

Microsoft PowerPoint - 08_(C_Programming)_(Korean)_Preprocessing

Microsoft PowerPoint - Chapter8.pptx

Microsoft PowerPoint - [2009] 02.pptx

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap06-2pointer.ppt

설계란 무엇인가?

Microsoft PowerPoint - chap08-1 [호환 모드]

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - additional01.ppt [호환 모드]

PowerPoint 프레젠테이션

C++-¿Ïº®Çؼ³10Àå

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

03장.스택.key

Microsoft PowerPoint - Chapter 6.ppt

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

Chapter #01 Subject

Microsoft PowerPoint - chap10-함수의활용.pptx

제 15 장전처리및비트연산 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

untitled

untitled

02장.배열과 클래스

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

제4장 기본 의미구조 (Basic Semantics)

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint - chap03-변수와데이터형.pptx

untitled


컴파일러

C# Programming Guide - Types

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Chapter 1-rev

11장 포인터

금오공대 컴퓨터공학전공 강의자료

PowerPoint Template

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기

Microsoft PowerPoint - chap11-포인터의활용.pptx

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

PowerPoint Template

C언어 및 실습 C Language and Practice

Slide 1

C 프로그래밊 개요

Microsoft PowerPoint - ch07 - 포인터 pm0415

PowerPoint Template

윈도우시스템프로그래밍

슬라이드 1

untitled

untitled

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

1장. 유닉스 시스템 프로그래밍 개요

OCW_C언어 기초

슬라이드 1

11장 포인터

윈도우시스템프로그래밍

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Microsoft PowerPoint - additional06.ppt [호환 모드]

Microsoft PowerPoint - chap-09.pptx

<4D F736F F F696E74202D20C1A639C0E520C7D4BCF6BFCDBAAFBCF6>

쉽게 풀어쓴 C 프로그래밍

중간고사

Microsoft PowerPoint - 04_C_Language_Function

OCW_C언어 기초

Chapter_02-3_NativeApp

The C++ Programming Language 4 장타입과선언 4.11 연습문제 Hello,world! 프로그램을실행시킨다. 프로그램이컴파일되지않으면 B3.1 을참고하자. #include<iostream> //#include 문, 헤더파일, 전처리지시

C 프로그래밊 개요

슬라이드 1

Microsoft PowerPoint - chap01-C언어개요.pptx

1 장 C 언어복습 표준입출력배열포인터배열과포인터함수 const와포인터구조체컴파일러사용방법 C++ 프로그래밍입문

Microsoft PowerPoint - chap06-5 [호환 모드]

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

자바에서 Swig를이용하기위해서는필요한파일은사용하고자하는 C/C++ 소스파일과 interface파일이필요합니다. 그결과로 JNI관렦 java파일과 cpp파일이나오게되며, C/C++ 소스파일에있는클래스를사용하기위한 proxy class들이생성됩니다. 다음부터 Swig를사

1. 인라인함수 예 : x, y 값중최소값을반환하는매크로와함수작성 // 매크로로구현한경우 #define MIN(X, Y) ((X) < (Y)? (X) : (Y)) X, Y 각각을괄호 ( ) 안에넣는이유는? // 함수로구현한경우 cout << MIN(4, 5) << en

<4D F736F F F696E74202D20C1A63135C0E520C0FCC3B3B8AEB9D7BAF1C6AEBFACBBEA>

KNK_C_05_Pointers_Arrays_structures_summary_v02

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

17장 클래스와 메소드

Microsoft PowerPoint - additional08.ppt [호환 모드]

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint 세션.ppt

PowerPoint Presentation

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

Transcription:

C 프로그래밍프로젝트 Chap 27. 파일의분할과헤더파일의디자인 2013.09.11. 오병우 컴퓨터공학과

설계 (design) 중요 27-1 프로그램의모듈화 변경, 확장등의유지보수가용이하도록설계 C 언어에서는 module 구성중요 C++, Java 등의객체지향언어에서는 class, abstraction 중요 Design Patterns 에대해 2 학년여름방학이나겨울방학에공부해보시기바랍니다. 모듈 (module) 이란무엇인가? 프로그램을구성하는구성요소의일부 관련된데이터와함수들이묶여서모듈을형성한다. 파일단위로나뉘는것이보통 모듈화 (modular) 프로그래밍 기능별로파일을나눠가며프로그래밍하는것 유지보수성이좋아진다. Department of Computer Engineering 2

3 27-1 프로그램의모듈화 파일의분할및컴파일 파일을나눌지라도완전히독립되는것은아니다. 파일이나뉘어도상호참조가발생할수있는데, 이는전역변수및전역함수로제한된다. 외부파일의변수 / 함수참조시 extern 선언

모듈구성예제 Home theater DVDPlayer.h Amplifier.h LCD.h DVDPlayer.c Amplifier.c LCD.c Department of Computer Engineering 4

Home theater 모듈구성예제 DVD Player 를 Blu-ray Player 로업그레이드 BluRayPlayer.h Amplifier.h LCD.h BluRayPlayer.c Amplifier.c LCD.c Department of Computer Engineering 5

모듈구성예제 Home theater 42 LCD 모니터를 100 Projector 로업그레이드 다른부분과독립적으로변경할수있도록설계할것 BluRayPlayer.h Amplifier.h Projector.h BluRayPlayer.c Amplifier.c Projector.c Department of Computer Engineering 6

7 27-1 프로그램의모듈화 파일의분할및컴파일 컴파일 : 변경사항이있는파일만별도컴파일 링크 : 실행파일을만들기위해모든 object 파일을모아서링크 extern 선언된함수나변수를찾아서연결 외부접근금지 static 키워드에의한접근의제한

8 27-2 헤더파일의구현과유용성 헤더파일 (header file) 의포함 (include) 이지니는의미 선행처리기에의해하나의파일을다른하나의파일에포함시키는작업

27-2 헤더파일의구현과유용성 헤더파일포함방법 <file> : 표준디렉토리파일포함 Linux: /usr/include 옵션에서 include 디렉토리추가할수있음 Visual C: \Microsoft Visual Studio\VC98\Include file : 현재디렉토리또는지정된경로에존재하는파일포함 / (slash) 추천, \ (back slash), \\ 모두사용가능 #include <abc.h> #include plus.h #include c:/include/abc.h #include..\plus.h // 표준디렉토리 // 현재작업디렉토리에있는 plus.h 포함 // c:\include에서 abc.h 포함 // 현재의상위디렉토리에있는 plus.h 포함 Department of Computer Engineering 9

27-2 헤더파일의구현과유용성 헤더파일의정의 여러소스파일에서공통으로사용되는선언의집합 include extern 변수및함수 구조체및 typedef (22, 23 장 ) 왜헤더파일을사용하는가? 선언의간략화 파일변경최소화! 주의 함수를사용하려는.c 파일이많을때, 함수의인자가변경되면모든.c 파일을수정해야함 Header file 를사용하면.h 만수정하면됨 (.c 에서는.h 를 include) 중복선언이되지않도록한다! 조건부컴파일로해결 (#ifdef, #ifndef, #else, #endif) 26 장참조 Department of Computer Engineering 10

27-2 헤더파일의구현과유용성 Department of Computer Engineering 11

calc.h 27-2 헤더파일의구현과유용성 extern int cal_num; double add (double a, double b); double minus (double a, double b); double multiple (double a, double b); double divide (double a, double b); calc.c int cal_num = 0; cal_main.c #include <stdio.h> #include calc.h int main (void) double a = 10.2; double b = 2.1; double add (double a, double b) cal_num++; return a+b; double multiple (double a, double b) printf ( 덧셈 : %f\n, add(a, b)); printf ( 총연산수 : %d\n, cal_num); return 0; Department of Computer Engineering 12

헤더파일사용예제 DVD 에서 Amplifier 를거치지않고바로 LCD 로출력 DVDPlayer.h Amplifier.h LCD.h DVDPlayer.c #include LCD.h Amplifier.c LCD.c char *playergetframe() void outsetframe(char *f) void *playerprocessframe() outsetframe(current); Department of Computer Engineering 13

헤더파일사용예제 DVD-Amplifier-LCD 순으로화면출력 DVDPlayer.h Amplifier.h LCD.h DVDPlayer.c char *playergetframe() Amplifier.c #include DVDPlayer.h #include LCD.h void ampprocessframe() p = playergetframe(); outsetframe(p); LCD.c void outsetframe(char *f) Department of Computer Engineering 14

DVD Player 모듈별헤더파일사용예제 DVDPlayer.h Amplifier.h LCD.h DVDPlayer.c char *playergetframe() Amplifier.c #include DVDPlayer.h #include LCD.h void ampprocessframe() p = playergetframe(); outsetframe(p); LCD.c void outsetframe(char *f) Department of Computer Engineering 15

모듈별헤더파일사용예제 Blu-ray Player 로업그레이드 Amplifier 모듈에서 include 변경 BluRayPlayer.h Amplifier.h LCD.h BluRayPlayer.c char *playergetframe() Amplifier.c #include BluRayPlayer.h #include LCD.h void ampprocessframe() p = playergetframe(); outsetframe(p); 변경없음 LCD.c void outsetframe(char *f) Department of Computer Engineering 16

공통헤더파일사용예제 공통인터페이스 (Interface) DVD Player 모듈과 Blu-ray Player 모듈에서공통적으로쓰는인터페이스를 Player.h 에저장하고있다면 include 를변경하는것도필요없음 Player.h Amplifier.h LCD.h 프로젝트에어떤.c 파일을넣을지에의해결정 BluRayPlayer.c DVDPlayer.c Amplifier.c #include Player.h 변경없음 LCD.c char *playergetframe() char *playergetframe() #include LCD.h void ampprocessframe() p = playergetframe(); outsetframe(p); 변경없음 void outsetframe(char *f) Department of Computer Engineering 17

27-3 조건부컴파일 #if, #elif, #else, #endif 기반조건부컴파일 컴파일하기전에실제컴파일할소스부분을지정 #if CONDITION1 expression1 #elif CONDITION2 expression2 #else expression3 #endif Department of Computer Engineering 18

27-3 조건부컴파일 헤더파일포함관계에서발생하는문제 중첩된관계로인해하나의헤더파일을두번이상포함하면 중복해서함수가정의되거나, 변수가선언되는문제점 중복을피해헤더파일을만들기는생각보다어렵다. 조건부컴파일로문제해결! Department of Computer Engineering 19

27-3 조건부컴파일 #ifndef, #endif 기반조건부컴파일 extern int GetCount(); int GetCount(); 함수선언하고 Department of Computer Engineering 20

기본적인모듈분리 정답이있는것은아님 MVC 디자인패턴참조 크게 3 모듈로분리하고점차세분화하여설계할것 App (Application) main() 함수를통해전체적인프로그램의흐름담당 Doc (Document) 응용프로그램에서처리하는데이터를관리하고 business logic 처리 기능별모듈로분리 View 눈에보이는부분처리 입력및출력 ( 분리가능 ) 추가모듈 Err (Error) 에러처리모듈 File 처리모듈 처리해야하는 file 종류별로모듈구성 Department of Computer Engineering 21

모듈구성예제 #ifndef _DOC_H_ #define _DOC_H_ // struct, typedef, enum 등 --------- // public functions --------------- // 모듈초기화 extern void docinit(); // 모듈종료처리 extern void docclose(); // Getter functions extern int docgetdata(); // Setter functions extern void docsetdata(int); #endif // _DOC_H_ Doc.h #include Doc.h // static variables --------------- static int docdata; // public functions --------------- // 모듈초기화 void docinit() // 변수초기화등 // 모듈종료처리 void docclose() // Getter functions int docgetdata() return docdata; // Setter functions void docsetdata(int a) docdata = a; Doc.c Department of Computer Engineering 22

함수호출예제 다른모듈의 extern 함수를호출하면서프로그램실행 모듈의데이터는 static으로만들어서보호 Getter 및 Setter 함수를 extern으로제공 Doc.c Extern docsetdata() Call Input.c #include Doc.h InputData() Extern Main.c #include Input.h #include View.h Write docgetdata() Read docdata Static Encapsulation Call View.c Extern Display() #include Doc.h -Doc.c 에서데이터를읽으면서화면출력 Call main() Department of Computer Engineering 23

Naming Convention 정답이있는것은아님 변수및함수이름부여규칙을미리정해놓을것 공통 ( 예제 ) 변수는명사로시작, 함수는동사로시작 단어가변경될때대문자로시작 예제, docgetdata() Local variable 과 global variable 을구분할수있도록이름붙일것 예를들면, local variable 은소문자로시작, global variable 은대문자로시작 예를들면, Global variable 은 g 로시작 ( 예제, gcount) 모듈별이름부여 모듈을구분할수있도록함수앞에 doc, view 등의 prefix 를붙임 예제, docgetdata() Department of Computer Engineering 24