정의
≡ 목차 (Table of Contents)
이 글은 정의롭다 라고 할 때의 정의(justice)가 아니라, IT 개발과 관련해서 어떤 의미를 정할 때 사용하는 정의(definition) 개념을 다룬다.
대충 사용하는 의미
구세대 언어의 예
예를 들어 C 언어의 경우 정의는 아래와 같은 식이다.
int do_what(int param_a, char *param_b);
위와 같이 정의에는 실제로 어떤 식으로 동작하는지에 대한 기술이 없다. 이 부분은 구현이 담당하는 부분이기 때문이다.
int do_what(int param_a, char *param_b) { ... }
여기서 실제 코드를 넣을 수 있는 중괄호가 등장한다.
즉 '구현'은 특정 기능을 구현하는 것이고, '정의'는 이 특정 코드의 인터페이스 혹은 사용 방법 등을 다른 코드나 사람에게 알려주기 위한 용도다.
따라서 정의는 문서화의 주축이다. 인터페이스를 정의하는 것은 그 인터페이스 사용법을 알려 주는 것이다. 정의가 존재하지 않으면 마치 존재하지 않는 기능이 되어버린다.
다만 이 설명은 구세대 언어에서 통하는 것이고 현대적인 언어에서는 약간 다르다.
현대적인 언어의 예
예를 들어 Swift로 구조체를 정의하는 방법을 보자.
struct SomeStruct { var someValue = 0 func doWhat() { ... } }
위 코드는 정의와 구현을 하나의 파일에서 한 번에 모두 기술하고 있다.
그런데 최근에는 이런 식의 코드는 '정의되었다' 라고 표현하기도 한다. 실체화, 즉 인스턴스나 오브젝트 개념이 등장하면서 정의와 인스턴스 사이를 구분하게 된다. 그리고 정의를 만드는 것을 '구현' 한다고 표현하기도 한다.
예를 들어 위 코드를 코딩하는 것을 '구현하다' 라고 표현하고, 이렇게 구현된 코드는 '정의되었다' 라고 표현한다. 뭔가 미묘하지만 뭐… 그렇다.
결론
정의와 구현은 일단은 다르다.
단지 현대적인 의미에서 '정의'가 더 큰(?) 힘을 얻게 되었다는 점은 좀 다르긴 하다.