-목차-
1. Structured Programming and Modular Programming
2. Some Essential Programming Guidelines
3. Style : snake_case vs CamelCase
4. 숫자 야구 게임 프로그래밍해보기
1. Structured Programming and Modular Programming
○ Structured Programming ( 주로 한 모듈 내 함수에서 나타나는 구조)
- 모든 프로그램은 본질적으로 순차, 선택, 반복이라는 3가지의 제어 구조 조합으로 구성된다.
- 코드에서 이러한 제어 구조가 명확히 드러날 때 코드 작성과 이해가 쉬워진다. 즉, 명확하고 퀄리티가 높고 컴퓨터프로그램의 시간적 이점이 향상된다.
- C 언어는 Structured Programming을 위해 설계되었으며 이를 위해 for, while, switch 등의 흐름 제어 구문을 제공한다.
+) 기계어로 된 초기 프로그래밍 언어에서는 단순 비교와 Jump(=GoTo)를 이용한 구문 이동만 제공했었다. 따라서 3가지 제어 구조가 잘 드러나지 않은 복잡한 코드(Unstructured Code)가 양산되었다.
○ Modular Programming ( 큰 프로젝트의 규모를 결정해주는 프로그래밍 )
- 독립적이고 교체 가능한 모듈들로 나눈 프로그램을 의미한다.
- 가독성이 뛰어나고 이해가 잘 된다.
- 재사용 또한 가능하다.
- 탑-다운 접근법을 사용한다.
2. Some Essential Programming Guidelines
○ Code Quality
- S/W의 규모가 확대되고 S/W 안정성, 신뢰성에 대한 요구가 높아짐
- 좋은 품질의 코드는 읽고 이해하고 테스트하고 유지보수하기 쉬워야함
○ Some Essential Programming Guidelines ★★★
※ Use good indentation ( 들여쓰기 )
- 읽고 이해하고 오류를 발견하기 쉬워야함.
- Tab을 활용하면 공백 문자보다 맞춤을 보다 쉽게 읽을 수 있기에 애용함 ( Tab의 사이즈 조절 가능 )
ex) 중첩 if문과 연속 if문
※ Write short functions ( 작고 핵심적인 함수 )
- 가능하면 한 페이지(40 line)를 넘기지 마라
- intention( 무엇을 만들지 )와 implementation( 어떻게 만들지 )를 분리해라.
※ Use descriptive names for variables and functions ( 읽을 만한 이름을 붙여라 )
- 약자를 굳이 쓰지 마라
- 모호하고 친숙하지 않은 용어를 사용하지 마라
3. Style : snake_case vs CamelCase
- identifier 작성에 널리 쓰이는 표현 방식
- snake_case는 단어와 단어 사이에 _를 넣어줌
- camelcase는 새로운 단어가 시작될 때마다 대문자로 씀
+) C programming에서는 snake_case를 더 선호함
+) 둘 중 하나의 스타일만 쓰자. 혼용하지 말자.
4. 숫자 야구 게임 프로그래밍해보기
○ 숫자 야구 게임이란?
- 수비 측이 0~9 사이 수 중 3개를 중복 없이 임의로 선택하고 순서대로 나열한다. ex) 472
- 공격 측은 0~9 사이 수 중 3개를 순서를 가지고 중복 없이 선택하여 수비 측 수와 일치하는지를 묻는다.
- 수비 측은 결과를 숫자와 위치가 모두 맞으면 스트라이크, 숫자는 맞지만 위치가 틀리면 볼, 3개 숫자와 위치가 전부 틀리면 아웃으로 답한다.
- 제한 횟수에 도달하거나 숫자를 순서와 함께 모두 맞출 때 종료한다.
○ 무엇을 할지 ( Top-Dowm 방식으로 나눠보자 )
- generate_target_number( ) // 수비자 입장에서 숫자 생성
- guess_number( ) // 공격자 입장에서 숫자 생성
- get_match_result( ) // 수비자 입장에서 몇 볼 몇 스트라이큰지 맞춰보기
- receive_match_result( ) // 결과 출력
○ pseudo code ( 의사 코드 )
- 개략적인 알고리즘 코드를 흉내내어 써놓은 것
- 흉내 코드
- 프로그램을 모델링할 때 쓰임. 즉 설계할 때 쓰인다
○ 개별 함수의 설계
※ what
- brief : 함수에 대한 개괄적 설명
- return : 반환값 설명
- param : 필요한 인자들 설명
※ how
- 소스코드 부분
○ 헤더 파일의 작성
- 구현한 서비스 함수들의 Function Prototype/Declaration을 별도의 Header File에 작성하는 것이 좋다.
- 헤더 파일에는 서비스 함수에서 사용하는 Standard Library를 헤더 파일에 포함시켜야 한다.
ex) baseball.h
#include <stdio.h>
#inlcude <stdlib.h>
int generate_target_number(void);
int guess_number(void);
int get_match_result(int target, int guessed);
void receive_match_result(int result, int guessed);
int is_different_digits(int num);
int generate_a_digit(void);
○ Project 구성
- 한 프로젝트 내에 main.c, defender.c, attacker.c와 같이 여러 개의 소스 코드 파일을 분리시킬 수 있다.
- 소스 코드의 양이 상당히 늘거나 다수의 개발자가 함께 개발할 경우 하나의 소스 파일을 통해 모든 함수를 구현하는 것은 어렵고 불편하다. 따라서 관련된 함수들을 그룹화하고 이들을 소스 파일로 나눠 개발하는 것이 자연스럽다.
- main.c 함수에서 딱히 다른 소스파일을 불러오는 작업을 할 필요는 없다. 그러나 h파일은 #include "baseball.h"와 같이 불러와야한다.
'CS > C, C++' 카테고리의 다른 글
[C/C++] 08 - 2 배열, 문자열과 포인터 (0) | 2021.11.17 |
---|---|
[C/C++] 08 - 1 포인터 개념 (0) | 2021.11.12 |
[C/C++] 07 - 2 표준 라이브러리 함수의 사용 (0) | 2021.10.29 |
[C/C++] 07 - 1 함수와 변수, 함수인자 (0) | 2021.10.27 |
[C/C++] 03 - 2 반복문과 배열 기초 (0) | 2021.10.17 |