본문 바로가기
프로그래밍

코드 리뷰 주의사항, 선언(Declaration)과 정의(Definition)의 차이점

by K-인사이터 2024. 2. 27.
반응형

안녕하세요
K-IN 입니다. 
 
개발 업무를 하다보면 다른 사람에게 자신의 코드를 설명하거나 다른 사람의 코드에 대해 자신의 의견을 말하는 자리가 많아집니다. 
이를 코드 리뷰(Code Review)라고 부릅니다. 
 

 
그러나, 가끔씩 업계에서 주로 사용되는 용어를 어렴풋이 알고있지만
정확한 개념을 알지못해 단어를 잘못 사용하는 경우가 있습니다. 
 
이번 시간에는 코드 리뷰에서 자주 사용되는 선언(Declaration)과 정의(Definition)에 대해 알아보고
차이점을 통해 명확하게 이해를 해보도록 하겠습니다. 
 
우선 정의부터 살펴보겠습니다. 
 

선언(Declaration)이란? 

보통 우리는 선언이라는 단어를 이렇게 사용합니다. 
 
OOO 시장이 대통령 출마를 선언하다. 
심판이 프리킥을 선언하다. 
 
선언이라는 단어는 "외부에 정식으로 표명하다" 정도의 의미를 가지고 있습니다. 
 
이제 프로그래밍 세계로 돌아와 위 문장을 조금 다르게 바꾸어봅시다. 
 

프로그램에게 정식으로 함수, 변수, 클래스 등의 이름과 어떤 타입/구조체를 사용할 것을 표명하다.

 
즉, 변수로 치자면 여러분이 사용할 변수의 이름과 타입을 프로그램에게 알리는 것을 말합니다. 
 
선언의 개념을 나타내는 예시를 보겠습니다. 

var x: Int // 변수의 선언 
fun myFunction() // 함수의 선언

 
 
다음으로 정의를 보겠습니다. 
 

정의(Definition)이란? 

정의 또한 위와 같은 메커니즘으로 이해해보겠습니다. 
예시를 우선들어보겠습니다. 
 
김 교수는 젊음을 끝없는 도전으로 정의했다. 
미(美)의 개념을 정의하다
 
정의라는 단어는 "어떤 개념의 뜻을 규정하다" 정도의 의미를 가지고 있습니다.
(저는 지금 정의를 정의하고 있습니다. 🤓) 
 
이제 다시 프로그래밍 세계로 돌아와 위 문장을 조금 다르게 바꾸어봅시다. 
 
 

프로그램에게 함수, 변수, 클래스 등의 뜻(=구현)을 규정하다. 

 
즉, 함수로 치자면 여러분이 사용할 함수의 구현(=뜻)을 프로그램에게 알리는 것을 말합니다. 
 
정의의 개념을 나타내는 예시를 보겠습니다.

var x: Int = 10 // 변수의 정의 
fun myFunction() // 함수의 정의
{
	println("구현")
}

 
 

선언과 정의의 차이점 

선언은 프로그램에게 이름과 타입을 알리는 것임을 알았습니다.
그리고 정의는 선언에 더하여 구현의 내용이 포함됩니다. 
 
정의는 이해하기가 쉽습니다. 그러나, 선언은 어떨때 유용한지 감이 오지 않습니다. 
 

선언의 필요성 

코틀린의 예시로 살펴보겠습니다. 
우리는 보통 구현없이 선언만 하는 코드를 어디에서 사용하겠냐고 생각하겠지만 사실 쓸모가 많은 개념입니다. 
 

  • 복잡한 구현들을 단순화하기 위한 인터페이스를 선언 
  • 상속과 다형성을 위해 추상 클래스를 선언

간단한 예시를 살펴보겠습니다. 

interface Printable { // 인터페이스를 선언 
    fun print()
}

abstract class Shape { // 추상 클래스를 선언 
    abstract fun calculateArea(): Double
}

 
앞서 정의와 선언의 차이점은 구현이 있고 없음이라고 알려드렸습니다. 
Printable 이라는 인터페이스는 print 라는 메서드를 제공하는 모든 클래스들을 포괄할 수 있습니다. 
 
즉, 문서, 이미지 등의 클래스들의 print 라는 행위를 인터페이스 선언을 통해 단순화 할 수 있음을 말합니다. 
 
Shape 라는 추상 클래스의 선언은 상속하는 클래스들이 calculateArea 메소드를 구현하도록 강제하는 설계도의 역할을 합니다. 
따라서, Shape 를 상속하는 클래스가 있다면 calculateArea 메소드를 제공하고 있음을 빠르게 파악할 수 있습니다. 
 

맺음말

지금까지 선언과 정의에 대해서 알아보았습니다. 
프로그래밍 언어에서 선언과 정의의 의미를 구분하는데 도움이 되길 바랍니다.
 
이상입니다. 
K-IN 올림. 

반응형