반응형

C언어 450

65. 테스트 코드 작성하기

실습 시나리오 도메인(Domain) 분석 함수명 결정 함수 원형 결정 테스트 로직 작성 구현 이제 콘솔 응용 프로젝트를 생성하여 함수 원형에 맞게 비어 있는 함수를 추가하고 테스트 코드를 작성해 보세요. 함수를 먼저 만들고 테스트 코드를 작성할 수도 있지만 테스트 코드를 먼저 작성하 팀 작업의 신뢰성을 높일 수 있어요. 먼저 콘솔 응용 프로젝트를 생성하세요. 프로젝트에 main 함수와 테스트 코드를 작성할 Program.c 파일을 추가하세요. 그리고 실습 대상인 함수를 작성할 Common.c 파일과 Common.h를 추가하세요. 소스 파일(.c)에는 함수 정의문을 작성하고 헤더 파일(.h)에는 함수 선언문을 작성할 거예요. 테스트 코드를 작성할 Program.c 파일에서 Common.c 파일에 작성한 함..

64. 함수 원형 결정

실습 시나리오 도메인(Domain) 분석 함수명 결정 함수 원형 결정 테스트 로직 작성 구현 이번에는 함수 원형을 결정해 보세요. 함수 원형은 함수 이름과 입력 매개 변수 리스트와 반환 형식을 말하죠. 앞에서 함수 이름은 결정했으니 입력 매개변수 리스트와 반환 형식을 결정하세요. 입력 매개변수 리스트를 결정할 때는 기능 수행에 영향을 미치는 인자를 판단해야죠. 이를 위해 구체적인 사용 예를 생각하시고 전달할 구체적인 값을 생각하세요. 특히 기능을 수행하기 위해서 호출하는 곳의 지역 변수의 값을 변경해야 한다면 포인터 형식으로 받아야겠죠. 그리고 입력 인자가 필요가 없거나 결과를 반환할 필요가 없는 함수도 있어요. 만얀 인자가 필요 없거나 결과를 반환할 필요가 없을 때는 void로 명시해요. 이제 여러분께..

63. 함수명 결정

실습 시나리오 도메인(Domain) 분석 함수명 결정 함수 원형 결정 테스트 로직 작성 구현 함수 이름은 사용하는 개발자가 어떤 기능을 수행하는 것인지 이해하기 쉽게 만드면 좋은 이름이라고 할 수 있겠죠. 일반적으로 함수 이름은 동사로 만들어 이해하기 쉽게 만들고 있어요. 여러분이 만든 함수를 다른 개발자가 이름만 보고 어떠한 일을 수행하는지 예측할 수 있다면 개발 비용을 줄일 수 있겠죠. 이제 여러분께서는 해야 할 기능에 알맞는 함수 이름을 결정한 후에 책을 보세요. 다음은 함수 이름을 정한 예입니다. 정답이 있는 것이 아니므로 설명은 생략할게요. a. 범위 내의 정수 합계를 구하는 함수 GetSumInBoundary b. 특정 수가 소수(Prime Number)인지 판단하는 함수 IsPrime c. ..

62. 도메인 분석

시나리오 도메인 분석 함수명 결정 함수 원형 결정 테스트 로직 작성 구현 다음은 이번 실습에서 만들 함수들의 도메인 분석한 결과예요. 각 함수들이 어떨 때 사용하는 것인지 설명할게요. 여러분이 생각한 기능과 차이가 있는지 확인해 보세요. a. 범위 내의 정수 합계를 구하는 함수 사용 예: 1부터 100까지 합을 구하고자 할 때 b. 특정 수가 소수(Prime Number)인지 판단하는 함수 사용 예: 3이 소수인지 확인하고자 할 때 c. 범위 내의 정수중에 소수(Prime Number)의 개수를 구하는 함수 사용 예: 5에서 20 사이의 소수가 몇 개인지 확인하고자 할 때 d. n 개의 정수의 합계를 구하는 함수 사용 예: {1, 3, 10, 8, 5, 2} 의 원소의 합을 구하고자 할 때 e. 두 수를..

61. 함수 만들기 실습 시나리오

이번에는 단순한 기능을 수행하는 함수들을 직접 만들고 호출해서 사용하는 실습을 진행할게요. 함수 만들기 실습은 작성할 함수가 해야 할 일을 분석하는 것부터 시작하며 이런 작업을 도메인(Domain) 분석이라고 불러요. 도메인 분석이 끝나면 적당한 이름을 결정하고 입력 매개변수 리스트와 반환 형식을 결정할 거예요. 그리고 테스트 코드를 작성한 후에 실제 함수를 구현하는 순서로 실습할게요. 여러분은 함수 만들기 과정을 통해 기본적인 알고리즘 논리 전개와 함수 원형을 결정하는 능력을 키워야겠죠. 어떤 종류의 프로그래밍 언어를 사용하더라도 이러한 능력은 필수적으로 필요해요. 여러분은 각 단계별로 진행하고 난 후에 책의 내용과 비교해 보세요. 만약 책의 내용을 본 후에 따라하기 형태로 학습하면 시간은 적게 들겠지..

60. 상수화 변수

C언어에서 변수 선언문 앞에 const 키워드를 명시한 변수를 상수화 변수라 불러요. 상수화 변수는 값을 변경하지 못하여 흔히 상수라고도 부르죠. 상수화 변수는 선언과 동시에 초기화가 필요해요. 값을 변경하지 못하는 상수화 변수의 초기값을 설정하지 않는다면 아무런 의미가 없겠죠. const 키워드를 포인트 변수 선언문에 명시하면 위치에 따라 상수화 의미가 조금씩 달라집니다. const 키워드가 *과 변수명 사이에 오면 포인터 변수에 초기화한 메모리 주소를 다른 주소로 변경할 수 없다는 의미예요. #include int main() { int arr[10]={1,2,3,4,5,6,7,8,9,10}; int *const pi = arr; pi = arr+1; //컴파일 오류 pi[0] = 9; //가능 re..

59. 정적 변수

프로그래밍하다보면 전체 영역에서 사용하지 않지만 값을 유지해야 할 때가 있죠. 이럴 때는 전역 변수로 선언하면 사용하지 말아야 하는 곳에서 사용하는 실수를 범하여 버그를 만드는 원인이 되기도 한답니다. 그렇다고 지역 변수로 선언하면 함수 호출했을 때 메모리를 할당하고 끝나면 해제해서 다시 호출했을 때 이전의 값이 사라져요. 이 때 정적 변수를 선언하여 사용하면 문제를 해결할 수 있어요. 정적 변수를 선언할 때는 static 키워드를 붙여서 선언해요. 정적 변수는 특정 블록 내부에 변수를 선언해도 프로그램 시작할 때 메모리를 할당하고 해제해서 값을 유지할 수 있어요. ◈ 정적 변수와 지역 변수를 비교하는 예 #include void Foo(); int main() { Foo(); Foo(); return ..

58. 지역변수

안녕하세요. 언제나 휴일, 언휴예요. 이번에는 지역변수에 관해서 알아보기로 해요. 지역 변수는 특정 블록에 선언한 변수예요. 지역 변수는 특정 함수를 구현하는데 임시적으로 값을 기억할 필요가 있을 때 사용하죠. 그리고 지역 변수를 위한 메모리는 변수를 선언한 함수를 호출하면 할당하고 함수가 끝날 때 해제한답니다. 여러분이 주의할 점은 지역 변수는 선언한 블록에서만 보인다는 것이예요. main 함수에 int 형식 변수 i를 선언하고 Foo 함수에서 변수 i를 사용하려고 하면 가시성이 없어서 컴파일 오류가 발생해요. 그리고 전역에 선언한 변수 이름과 같은 이름의 지역 변수를 선언하여 사용하면 지역 변수를 사용한답니다. 그리고 함수 내에서도 { }으로 블록을 지정할 수 있는데 블록에 변수를 선언하면 블록 내부..

57. 전역 변수

아시는 것처럼 C언어에서는 프로그램에서 관리할 데이터를 할당하고 관리하기 위해 변수에 관한 문법을 제공하고 있죠. C언어에서는 프로그램의 모든 함수에서 접근할 수 있는 전역 변수와 선언한 블록에서만 접근할 수 있는 지역 변수가 있어요. 그리고 이 외에도 정적 변수와 상수화 변수를 제공하는데 이들에 관해 하나 하나 살펴봅시다. 전역 변수 C언어에서는 변수 선언을 특정 블록 내부가 아닌 외부에 선언한 변수를 전역 변수라 불러요. 그리고 전역 변수는 프로그램 시작할 때 할당하고 프로그램 끝날 때 해제하며 프로그램 전제 영역에서 접근할 수 있죠. 예를 들어 50명의 국어 성적을 관리하는 프로그램이 있다고 가정할게요. 그리고 프로그램에 성적을 추가, 삭제, 조회, 전체 보기 메뉴를 제공합시다. 아마도 이 프로그램..

56. 매개변수 전달 원리

이번에는 함수 호출에서 종료까지 수행 원리를 간단히 알아볼게요. 함수를 호출하면 해당 함수의 지역 변수를 위한 메모리를 스택에 할당해요. 그리고 피호출 함수의 동작이 끝나면 호출한 함수의 다음 부분을 수행하는 것이 기본 동작이죠. main 함수가 시작하면 main함수의 지역 변수를 위한 메모리를 스택에 할당해요. 그리고 Add 함수를 호출하면 입력 인자를 복사한 후에 Add 함수의 지역 변수를 할당한 후에 복사한 값으로 초기화를 수행하죠. 그리고 함수의 return 문을 만나면 자신의 스택 영역 바로 밑(호출 함수 스택의 맨 위)에 반환 값을 설정해요. 그리고 자신의 스택 메모리를 해제한답니다. 호출 결과를 대입하는 구문에서는 자신의 스택 맨 위에 값(피호출 함수에서 return 문에 의해 설정한 값)으..

반응형