함수 (컴퓨터 과학): 두 판 사이의 차이

내용 삭제됨 내용 추가됨
김준기 (토론 | 기여)
잔글 →‎함수의 요소: 다듬기
김준기 (토론 | 기여)
내용 추가 및 정리
1번째 줄:
[[컴퓨터과학]]에서 '''함수'''(function)란 특정 계산을 수행하는 독립된 프로그램을 말한다. 함수라는 것은 특정 인자를 받아 결과값을 반환하는 개체를 말하기 때문에 서브루틴(subroutine)이라 해야 옳지만 대개 함수라고 한다. 메소드(method), 프로시저, 서브프로그램이라고도 한다. 큰 프로그램을 기능상으로 분류하여 기능을 고치거나 디버그하기 쉬우며 재귀 호출(스택)을 이용한 기능을 사용할 수도 있다.
 
== 주의사항함수의 종류 ==
 
많은 프로그래밍 언어에서는 값을 반환하는 것과 반환하지 않는 것으로 구분하며, 전자를 함수 혹은 함수형 서브프로그램, 후자를 서브루틴 혹은 프로시저라고 부른다. 반면에 [[C (프로그래밍 언어)|C]]/[[C++]], [[LISP]]와 같으면 반환형을 잡는 방법에 따라 구별되며 형식에서 구분하지는 않는다.
 
=== 1류 함수({{lang|en|First-class functions}}) ===
{{본문|1류 함수}}
어떤 프로그래밍 언어에서 [[실행 시간]]에 함수를 새로 생성·자료 구조에 함수를 저장하거나 함수 자체를 함수의 반환값으로 사용하는 것이 가능할 경우, 그 언어는 '''1류 함수'''를 지원한다고 말한다. 이러한 언어에서는 함수가 일반 자료형과 구분되는 어떤 특수한 개념이 아닌 일반 자료와 동일하게 다루어질 수 있다.
 
=== 고차 함수({{lang|end|Higher-order functions}}) ===
{{본문|고차 함수 (전산학)}}
위의 '''1류 함수'''와 비슷한 개념이나, 보다 수학적인 관점에서 함수에 대한 연산이 가능한 함수를 뜻하는 용어이다.
 
=== 순수 함수 ===
어떤 함수가 [[부수효과 (전산학)|부수효과]]를 가지지 않을 때 그 함수를 '''순수 함수'''라고 부른다. 이러한 특징을 갖는 언어들을 [[참조 투명성|'''참조 투명성''']]을 지원한다고 하며, 그러한 함수들은 그 자체로 [[스레드 안전]]하다.
 
== 함수 사용의 장점 ==
줄 32 ⟶ 43:
이를테면 다음과 같다.
<source lang="vb">
Private Sub Note ()
Print ("안녕하세요")
End Sub
Private Sub frmMain_Load ()
Call Note ()
End Sub
</source>
frmMain이 로드되면 호출된 Note()가 '안녕하세요'를 출력한다. 반면에,
<source lang="vb">
Private Function Note ()
Note = "안녕하세요"
End Function
Private Sub frmMain_Load ()
Dim Text as String
Text = Note ()
Print (Text)
End Sub
</source>
이 프로그램에서는 frmMain이 로드되면 호출한 Note가 반환한 '안녕하세요'를 출력하게 된다.
줄 78 ⟶ 89:
 
이 외에 [[C++]], [[자바 (프로그래밍 언어)|자바]] 등의 경우, 반환형과 함수 이름은 같아도 인자 목록의 개수나 자료형이 다르면 호출할 때 사용한 인자 목록에 따라 적절한 함수가 호출되도록 컴파일되는 [[오버로딩 함수]]를 지원한다.
 
== 같이 보기 ==
* [[부수효과 (전산학)|부수효과]]
* [[함수형 프로그래밍]]
 
[[분류:컴퓨터]]
[[분류:컴퓨터 프로그래밍]]
 
[[bs:Podrutina]]