다시 오신 걸 환영해요
이번 강의에서는 C#에서의 기능 정의에 관해 얘기할 거예요
함수 정의요
우린 기능의 중요성을 알죠
이점도 이해하고요
우리 프로그램에 오작동을 사용하고 싶을 거예요
네 c에서 PRO 함수를 만들 때 함수 헤더를
함수 정의의 첫 줄로 명시해야 해요
네 함수 정의에 대해서도 얘기해 보고 함수 구현에
대해서도 얘기해 보겠습니다
문제 해결 기능을 구현하는 건 일반적인
C 코드예요
함수를 정의하는 건 그 함수가 존재한다는 거죠
네 함수를 정의할 때 가장 먼저 할 일은 함수
헤더를 갖고 중괄호를 써서 그 함수를 위한 블록 코드를 시작하는
거죠
네 if문에서 중괄호를 사용할 때와 같아요
for 루프에서 중괄호를 사용할 때와 같죠 중괄호는 함수에서 필요하다는
것만 빼면요
제거할 수 없어요
그 함수를 위한 코드의 시작을 나타내죠
시작과 끝 중괄호 사이에 있는 게 그 함수를
위한 코드죠
어디서 작업을 구현할지를요
네 중괄호 사이에 함수 본체가 있고 함수의 첫
번째 줄은 함수 헤더예요
함수 헤더는 함수의 이름 함수의 매개 변수를
정의하죠
어바웃 파라미터와 인수에 대해 자세히 살펴보죠
하지만 지금은 매개 변수라는 게 있다는
걸 아셔야 해요
매개 변수는 숫자와 값의 유형을 명시할 거예요 데이터를
전달하는 방법이요 매개 변수는 데이터 전달과 관련 있죠
함수를 반환하는 값의 유형이요
데이터를 리턴하는 함수도 언급했었죠
네 그 함수 헤더에서 함수의 이름을 갖게
됩니다 취할 수 있는 데이터는 함수에 의해 받아들여지고 함수가 반환하는
데이터는 함수에 의해 받아들여지죠
네 지금은 통과되거나 반환될 수 있는 데이터에 집중하지 않을
거예요 간단한 함수 생성에 대해 말씀드리겠습니다
네 함수 본체는 일반 코드를 포함하고 그 코드는 여러분이 함수를
호출하거나 호출할 때 실행되죠
함수 본체는 인수로 통과되는 값에 접근할
수 있어요
토이트에 데이터를 전달하면 함수 안에서 데이터를
활용할 수 있어요
함수 헤더 같아요
함수 헤더에 첫 번째 단어가 있죠
네 함수 헤더는 키워드인데 함수에서 반환될 데이터
타입을 나타냅니다
다음 키워드는 함수의 이름이에요
그리고 왼쪽 괄호가 있고 쉼표로 구분된 매개 변수가
있어요 함수에 전달된 데이터가 되겠죠
함수 헤더의 끝에는 괄호를
넣고요
중괄호는 함수 구현의 시작을
나타내죠
어떤 식으로든 임무를 수행해야 하죠
기능이 작아야 한다고 말씀드렸잖아요
통일성이 있어야 해요
구경하고 싶어 하지 않아요
싱글포커스로 뭔가 특정한 걸 하길 원하죠
말씀드렸듯이 기능이 있다면 input을 받으면 input을 읽어요
출력을 출력하지 않아요
분류기든 뭐든 아무것도 못 해요
명명 처리 기능이 있으면 데이터를 정렬하죠
입력이 안 돼요
기능은 접착력이 좋고 작아야 해요
오작동을 디버깅하기 쉬우니 응집력을 높여야 해요
그리고 우측 괄호는 함수
구현을 끝내죠
C에서 기능은 그런 거예요
네 이제 함수 이름에 집중하고 매개 변수와 반환
유형은 나중에 얘기하죠
함수의 첫 번째 줄이요 다시 definition은 컴파일러에게 왼쪽부터
오른쪽 순서로 함수에 대한 세 가지를 알려줍니다 말씀드린 것처럼요
값의 유형, 함수의 이름 그리고 가져가는
데이터요
요약하자면 중요한 거예요
함수 이름에 관해선 의미 있는 함수 이름을 선택해야죠
선택 가능한 변수 이름만큼 중요해요
프로그래밍의 가독성에 큰 영향을 미치니 함수의
이름을 x나 y로 짓지 마세요
하는 일에 기반한 함수를 이름 붙이세요
2numers를 추가하면 이름을 추가하고요
뺄셈이 2개면 뺄셈이라고 해요
이 예제에선 간단명료한 함수가 있죠
공허함은 신경 쓰지 말고 이름만 신경 써요
프린트 메시지라는 기능명이 있어요
네 그리고 중괄호가 보이시죠 함수의
시작을 나타내는 거예요 이제 구현도 있어요
이런 구현은 문자열, 텍스트만
디스플레이하는 거예요
그리고 중괄호도 있어요
이건 아주 간단한 기능인데 별로 하는 게 없어요 출력을 보여주죠
네 프린트 메시지의 이 예제에서 프린트 메시지의
첫 줄은 컴파일러에 값을 반환하지 않는다고 알려줍니다
그게 공허의 키워드예요
거기에 집중할 필요는 없지만 그렇게 되고 있어요
다음은 이름이에요
그 이름 뒤에 매개변수를 붙이죠
어떤 데이터도 전달하지 않을 때 void라는 키워드를 다시 사용하죠
함수 집합체의 문장은 없을 수 있지만 괄호는
항상 존재해야 하죠
네 구현을 할 필요는 없지만 함수가 존재하려면 중괄호가
있어야 해요
함수 안에 주문이 없으면 return type는
무효예요
네 네 다시 말씀드리지만 이건 나중에 다루죠 구현한 게 없기 때문에
함수가 아무 일도 안 해요
네 네 빈 몸으로 함수를 정의하면 아무것도 이루지 못해도
여전히 유용할 수 있어요
대규모 프로그램의 시험 기간에는 보통 그렇게 하죠
이렇게 하면 특정 함수만 이용해서 프로그램을
실행할 수 있습니다 더 잘 테스트할 수 있고
오류도 가려낼 수 있죠
함수 본문에 테스트를 구현할 수도 있지만
주석만 달면 돼요
이divide and conquired 접근법을 쓸 수 있어요
네 점점 더 테스트할수록 함수 본체에 구현을
시작할 수 있어요
단계적인 작업이죠
계속 작은 덩어리로 작업하면서 코드를 추가하고 그 코드를 테스트한 다음 다음
단계로 넘어가죠 그러면 결국엔 모든 구현이
완료되고 모든 함수가 구현되죠
함수 본체를 수행하는 사용 사례가 있어요
코드가 없거나 주석이 없죠
이름 짓는 함수요
기능자의 이름은 어떤 이름이든 될 수 있죠
변수의 이름을 바꿀 때 예약어를
쓸 수 없는 것처럼요
그래서 tlanguage의 키워드로 enter two와 같은 것이 있습니다
데이터 타입을 나타내기 때문이죠
사이즈오프는 오퍼레이터예요
만약을 대비해서 사용할 수 있어야 하죠
같은 이름의 두 가지 기능은 없을 수도 있어요
이것도 함수 과부하라고 할 수 있어요
하지만 같은 이름의 두 가지 기능을 가질 순 없죠 C에선 과부하가
지원되지 않아요
마지막으로 표준 라이브러리 기능으로 같은 이름을
쓸 수 있어요
네 네 기술적으로 라이브러리를 포함하지 않을 때 헤더 파일을 포함하면
가능할지도 몰라요
맞아요. 하지만 라이브러리 함수를 사용하고 싶다면 컴파일러가 불평할
거예요. 같은 이름으로 두 개의 함수가 있다고 말이에요.
그러니 여러분의 기능을 표준 라이브러리 기능이라 부르지 마세요
법률명은 동일한 ASA 변수예요 글자와 숫자
순서로 시작하죠
첫 글자는 글자여야 하고 그 글자는 밑줄로 쓸 수 있죠
숫자나 이상한 글자로 기능을 시작할 순
없어요
선택한 이름은
아까도 말했지만 강조하려고 반복하는 거예요 의미 있는 이름은
아주 중요해요
여러분은 종종 함수 이름과 변수 이름을 하나 이상의
단어로 정의하죠
이제 코딩 스타일에 관해 얘기 좀 하죠
제가 코드를 작성할 때 눈치채셨겠지만 전 낙타 케이스를 사용해요
변수와 함수 이름을 쓸 수 있는 방법은
세 가지예요
네 기능명에 밑줄 친 글자를 넣어 단어들을 분리할
수 있어요 하나의 접근법이죠
네 각 단어의 첫 글자를 대문자로
써도 되고 첫 글자 뒤에 대문자로 써도 돼요
중간에 공간이 있으면 안 돼요
네 이건 이름 붙이기 위한 접근법이에요
어떤 규칙을 따르는 게 중요하거든요 읽기 쉽게 말이에요
다섯 개의 다른 단어로 된 긴 단어를 쓰고 있어요
네 유효한 입력을 확인하라고 하는 함수가 있다면 전부 소문자로
쓰면 안 되죠
글자가 어디 있는지 읽기가 정말 힘들 거예요
네 낙타 사례는 단어들의 위치를 알아내는 방법입니다
함수가 뭘 하는지 쉽게 알 수 있죠
밑줄은 단어를 구분하는 또 다른 방법이죠
첫 글자를 대문자로 쓰는 건 분리하는 또 다른 방법이죠
기능을 통해 단어를 분석해서 가독성을 높이는
게 중요해요
전 주로 낙타 케이스를 써요
네 이런 컨벤션을 사용할 땐 모든 것에 사용해야죠
변수 명명에도 사용하고 싶고 기능 이름에도
사용하고 싶죠
보통은 코딩 규칙을 따르세요 가독성이
높아지죠
기능 프로토타입이죠
함수 정의에 대해 얘기했죠
함수를 선언하는 건 어때요?
왜 todeclare 함수가 필요한지 정의할
때 선언하지 않나요?
함수를 선언하는 개념도 있어요
그 함수를 사용하려면 구현되거나 정의되기 전에
사용해야 해요
함수 프로토타입은 함수를 정의하는 거죠
컴파일러에게 함수의 세부사항을 알려주죠
이름과 return type, 각 매개 변수의 타입을 정의하죠
함수 헤더처럼 생겼네요
네 기능의 외부 특징을 전부 제공해요 주로 그렇죠
시그니처 함수 시그니처라는 용어도 들어보셨을 겁니다 시그니처
함수입니다
네 네 반환된 데이터와 그 함수에
관한 모든 걸 지정하죠
네 함수 헤더를 쓰는 것처럼 함수 프로토타입을 쓰고 싶죠
유일한 차이는 끝에 세미콜론을 붙였다는 거죠
이게 기능을 무력화해요
함수가 존재한다고 말해주죠
네 함수 프로토타입은 컴파일러가 함수를 호출할
때마다 적절한 지시를 생성하게 합니다
또한 매 호출마다 오작동을 올바르게 사용하고 있는지도 확인하죠
네 네 함수 헤더를 제공하는 이유는 경고나 함수 선언
구현 없이 함수를 호출하기 위해서죠 코드의 순서일 뿐입니다
잠시 후 예제를 보여드리죠
네 프로그램에서 표준 헤더 파일을 포함하면 헤더 파일은
함수 프로토타입을 추가해요
네 네 함수 프로토타입은 다양한 원본 파일에 재사용하고자 하면 헤더
파일에 저장됩니다
네 단일 소스 파일에서만 사용할 경우 소스 파일의
맨 위에 둘 수 있어요
하지만 printf 함수를 사용하고 있기 때문에 많은
다른 소스 파일에서 사용될 수 있죠 헤더 함수는 헤더에서 정의될
거고 함수 선언도 헤더에서 정의될 거예요
이 경우엔 수도원이죠 H요
그래서 소스 파일만 그 기능을 사용하면 보통 Insource
파일이 나타나요
그렇지 않으면 원본 파일로 재사용되는
경우 어헤더 파일에 넣게 되죠
네 파일에 있는 모든 함수가 정의된 모든 함수를 호출할 수 있게
해줍니다 구현을 어디에 두었느냐에 상관없이요
네 호출한 후에 어떤 함수를 구현하면 c는 그에 대해 모른다고
불평할 거예요 그래서 C는 불평하겠죠
컴파일할 때는 한 줄씩 컴파일해야 하거든요
선언을 맨 위에 두면 정의되기 전에 함수를
호출할 수 있어요 구현되기 전에요
매개 변수 이름은 함수 정의에서 thesame이 아니어도 돼요
다른 이름으로 불러도 돼요
제가 말한 이름들이 데이터의 식별자예요
함수 프로토타입에서 테파라미터 이름을 바꿀 수 있어요
같은 데이터 타입을 사용하되 이름은 바꿀 수 있어요
네 항상 프로그램의 모든 기능에 대한 함수
선언을 파일 맨 위에 두는 것이 좋습니다.
디자인에 있어 프로그램을 보다 일관되게 유지하고 어떤 단계에서든
오류가 발생하는 걸 방지합니다 구현하기 전에 해당 함수를 호출하고
싶다면요
이것은 섬의 기능 원형의 예시인데요
파일 맨 위에는 옵션도 있어요
그리고 일부 기능은 우리가 지정했죠 평균,
합계, 데이터요
함수 헤더처럼 생겼죠?
반환 형식이 있죠 반환 형식이 있고 함수로 정의된
매개 변수도 있어요 하지만 끝에 세미콜론이 있죠
이런 기능에 대한 구현이 없어요
컴파일러에 함수가 존재하고 이렇게 정의됐다고
알려주는 거죠
네 이제 여러분이 할 수 있는 건 메인 함수예요 평균을 호출할
수도 있고 합계를 호출할 수도 있고 데이터를 가져올 수도 있죠
여러분이 호출하는 곳 아래에 실제 구현된 canbe가 있어요
네 여기 함수 헤더가 없다면 메인 루틴에서
함수 헤더를 호출하려고 할 때 메인 루틴 아래에서 정의된다면 에러나
경고가 뜨겠죠
코드 블록에서 살펴보죠
늘 하던 대로 진행할게요
이제 함수를 생성하거나 함수를 호출하고 싶다고 해보죠
add라는 발음을 호출할 거예요 그럼 매개
변수가 필요 없죠
7번 라인에서 우리 메인으로 연락할게요
10번 라인에서 보강할 거예요
void add를 하면 아무것도 안 해도 돼요
그냥 비워 둘 거예요
컴파일 할 때 알게 되는 것은 컴파일러가 경고를 한다는
것이죠
add는 청원자 진술이래요
함수 선언을 이용해 그 경고문을 제거할 수 있어요
네 위쪽에 함수를 선언할 수 있습니다 컴파일러에게 어딘가에 사용할 것이라고 알려줄
수 있습니다 하지만 구현이 어디에 있는지는
알지 못하죠
여기서 캔세이 보이드를 추가하고 세미콜론을
추가하면 돼요
이제 워닝을 제거할 겁니다 일부 컴파일은 사실 오류를
발생시키죠
그걸 컴파일하면 경고도 없고 오류도 없어요
그게 functiondeclaration의 역할이죠
아무 데나 기능을 넣을 수 있어요
자 이제 위에 함수 선언은 없고 여러분이 호출하는 위에
구현이 있다면 오류도 보이지 않을 겁니다 컴파일러가
함수에 대해 알게 되니까요 함수를 호출하기
전에요
따라서 이걸 만든다면 오류가 없다는 걸 확인하려는 거죠
좋아요, 이제 제가 말씀드렸죠? 연습용으로 보통
모든 기능을 상단에 선언한다고요 그렇게 해야 할 것 같아요
계속 그렇게 하세요
네 하지만 그 습관을 고치면 기능을 호출하기 전에 먼저
선언하거나 기능 프로토타입을 제공해야 합니다
프로그램에 경고나 오류가 있으면 안 되니까요
이건 발음을 정의하는 방법이고 이건 기능 프로토타입을
사용하는 방법이에요
다음 강의에서는 매개 변수에
관해 얘기할게요
함수에 데이터를 전달하는 방법이요
고마워요