본문 바로가기
Dart/Study

Dart 변수와 함수 명명: 개발자라면 꼭 알아야 할 키워드와 클린 코딩 가이드

by Maccrey Coding 2024. 8. 7.
반응형

 

여러분의 개발 생활을 더욱 효율적이고 즐겁게 만들어 줄 유명 개발자 블로거입니다.

오늘은 변수와 함수를 명명할 때 자주 사용되는 키워드와 클린 코딩을 위한 명명법에 대해 자세히 알아보도록 하겠습니다.

왜 변수와 함수 명명이 중요할까요?

변수와 함수는 프로그램의 핵심 구성 요소입니다.

잘 지어진 이름은 코드의 가독성을 높이고, 다른 개발자들과의 협업을 원활하게 만들며, 나아가 프로그램의 유지보수를 용이하게 합니다.

반대로, 의미를 파악하기 어려운 이름은 코드를 복잡하게 만들고, 디버깅 시간을 늘리며, 심지어 버그를 유발하기도 합니다.

변수와 함수 명명에 자주 사용되는 키워드

이미지에서 제시된 키워드들은 일반적으로 다음과 같은 의미를 가지고 사용됩니다.

  • get: 특정 값을 가져오는 동작을 나타냅니다. (예: getUserById, getProductName)
  • set: 특정 값을 설정하는 동작을 나타냅니다. (예: setUserAge, setProductPrice)
  • check: 특정 조건을 확인하는 동작을 나타냅니다. (예: checkPassword, checkIsAdmin)
  • create: 새로운 객체나 요소를 생성하는 동작을 나타냅니다. (예: createUser, createOrder)
  • update: 기존 데이터를 수정하는 동작을 나타냅니다. (예: updateUser, updateProduct)
  • delete: 특정 데이터를 삭제하는 동작을 나타냅니다. (예: deleteUser, deleteOrder)
  • validate: 데이터의 유효성을 검증하는 동작을 나타냅니다. (예: validateEmail, validatePassword)
  • render: 화면에 출력하는 동작을 나타냅니다. (예: renderPage, renderComponent)
  • handle: 특정 이벤트를 처리하는 동작을 나타냅니다. (예: handleButtonClick, handleError)
  • calculate: 값을 계산하는 동작을 나타냅니다. (예: calculateTotal, calculateAverage)
  • initialize: 초기화, 설정 - 시스템이나 객체를 처음 시작하거나 특정 상태로 설정할 때 사용합니다. (예: initializeGame(), initializeDatabase())
  • process: 처리, 가공 - 데이터를 특정 방식으로 변환하거나 작업을 수행할 때 사용합니다. (예: processPayment(), processImage())
  • format: 형식화 - 데이터를 특정 형식이나 표준에 맞춰 변환할 때 사용합니다. (예: formatDate(), formatNumber())
  • load: 로드, 불러오기 - 데이터나 리소스를 메모리에 올리거나 시스템에 불러올 때 사용합니다. (예: loadFile(), loadImage())
  • save: 저장 - 데이터나 상태를 영구적으로 저장할 때 사용합니다. (예: saveFile(), saveSettings())
  • execute: 실행 - 특정 명령이나 작업을 수행할 때 사용합니다. (예: executeCommand(), executeQuery())
  • enable: 활성화 - 기능이나 모듈을 작동 가능한 상태로 만들 때 사용합니다. (예: enableFeature(), enableLogging())
  • disable: 비활성화 - 기능이나 모듈을 작동 불가능한 상태로 만들 때 사용합니다. (예: disableFeature(), disableLogging())
  • fetch: 가져오기 - 데이터를 원격 서버나 다른 시스템에서 가져올 때 사용합니다. (예: fetchUserData(), fetchProductData())
  • listen: 감지, 청취 - 이벤트나 상태 변화를 감지하고 반응할 때 사용합니다. (예: listenToClick(), listenToSocket())
  • create: 생성 - 새로운 객체나 데이터를 만들 때 사용합니다. (예: createAccount(), createElement())
  • update: 업데이트 - 기존 데이터를 수정하거나 변경할 때 사용합니다. (예: updateProfile(), updateDatabase())
  • delete: 삭제 - 데이터를 제거할 때 사용합니다. (예: deleteFile(), deleteItem())
  • validate: 검증 - 데이터의 유효성을 검사할 때 사용합니다. (예: validateEmail(), validatePassword())
  • convert: 변환 - 데이터를 다른 형식으로 변환할 때 사용합니다. (예: convertToJson(), convertToPdf())
  • compare: 비교 - 두 개 이상의 값을 비교할 때 사용합니다. (예: compareVersions(), compareValues())
  • search: 검색 - 데이터에서 특정 값을 찾을 때 사용합니다. (예: searchDatabase(), searchArray())
  • filter: 필터링 - 데이터를 특정 조건에 맞춰 걸러낼 때 사용합니다. (예: filterList(), filterObjects())
  • sort: 정렬 - 데이터를 특정 기준으로 정렬할 때 사용합니다. (예: sortArray(), sortObjects())

변수와 함수 이름 작성 원칙

1. 명확하고 설명적인 이름

함수 이름은 그 함수의 목적이나 기능을 명확히 설명해야 합니다.

예를 들어, getUserInfo는 사용자 정보를 가져오는 함수임을 명확히 나타냅니다.

함수 이름을 읽는 사람은 함수가 무엇을 하는지 쉽게 이해할 수 있어야 합니다.

  • 좋은 예: fetchUserData, sortArray, sendEmailNotification
  • 나쁜 예: doTask, process, function1

2. 일관성 있는 네이밍 규칙 사용

팀 프로젝트에서는 일관성 있는 네이밍 규칙을 사용하는 것이 중요합니다.

예를 들어, Camel Case(getUserName), Snake Case(get_user_name), Pascal Case(GetUserName) 등 네이밍 규칙을 통일하여 사용하는 것이 좋습니다.

  • Camel Case: calculateTotalAmount
  • Snake Case: calculate_total_amount
  • Pascal Case: CalculateTotalAmount

일관된 규칙을 사용하면 코드베이스를 통일감 있게 유지할 수 있습니다.

3. 동사와 명사 조합 사용

함수 이름에는 동사와 명사의 조합을 사용하는 것이 좋습니다.

동사는 함수의 동작을, 명사는 함수의 대상이나 결과를 나타냅니다.

예를 들어, retrieveOrderDetails에서 retrieve는 동작을, OrderDetails는 결과를 나타냅니다.

  • 동사 + 명사: saveUserProfile, updateDatabaseRecord
  • 동사 + 명사 + 동사: sendUserNotificationEmail, processOrderPayment

4. 명사형 함수(변수) 와 동사형 함수의 구분

함수 이름이 명사형일 때는 주로 값을 반환하는 함수에 적합합니다.

예를 들어, getUserName은 사용자 이름을 반환합니다.

반면, 동사형 함수는 일반적으로 작업을 수행하거나 상태를 변경하는 함수에 적합합니다.

예를 들어, deleteUserAccount는 사용자 계정을 삭제하는 작업을 수행합니다.

  • 명사형: getUserEmail, fetchUserProfile
  • 동사형: sendNotification, updateProfile

5. 약어와 축약어 사용 최소화

함수(변수) 이름에서 약어나 축약어를 사용하는 것은 피하는 것이 좋습니다.

약어는 코드 읽는 사람에게 혼동을 줄 수 있으며, 함수의 목적이 명확히 전달되지 않을 수 있습니다.

가능하면 전체 단어를 사용하는 것이 좋습니다.

  • 피해야 할 약어: calcTotAmnt (대신 calculateTotalAmount)
  • 권장하는 표현: getFormattedDate, loadUserProfile

6. 문맥을 고려한 이름 작성

함수 이름은 해당 함수가 사용될 문맥을 고려하여 작성해야 합니다.

함수가 어떤 모듈이나 클래스 내에서 사용되는지에 따라 이름을 조금 더 구체화할 수 있습니다.

예를 들어, validateInput은 입력값을 검증하는 함수지만, UserInputValidator.validate는 특정 클래스로 묶인 검증 기능임을 명확히 합니다.

  • 문맥에 따른 예: calculateInvoiceTotal (인보이스 관련 기능), parseJsonResponse (JSON 응답 파싱)

변수와 함수 이름 작성의 중요성

변수와 함수 이름 작성은 단순히 코드의 표면적인 부분이 아닙니다.

잘 작성된 함수(변수) 이름은 코드의 가독성을 높이고, 유지보수성을 향상시키며, 협업 시 효율성을 극대화합니다.

함수(변수)의 이름은 그 함수(변수)가 수행하는 작업을 명확히 반영해야 하며, 일관성과 명확성을 유지하는 것이 중요합니다.

이러한 원칙을 따르면 코드 품질을 높이고, 개발자 간의 원활한 협업을 지원할 수 있습니다.

 

기본적인 예시

  • 데이터 가져오기
    • getUserById(int id): 특정 ID를 가진 사용자 정보 가져오기
    • fetchProducts(): 제품 목록 가져오기
  • 데이터 변경
    • updateUser(User user): 사용자 정보 업데이트
    • deleteOrder(int orderId): 주문 삭제
  • 데이터 생성
    • createAccount(String username, String password): 계정 생성
    • buildWidget(BuildContext context): 위젯 생성
  • 데이터 검증
    • validateEmail(String email): 이메일 유효성 검사
    • checkPasswordStrength(String password): 비밀번호 강도 검사
  • 데이터 변환
    • convertJsonToModel(String json): JSON 문자열을 모델 객체로 변환
    • formatDateTime(DateTime dateTime): 날짜 시간 포맷 변경

Dart 특징을 활용한 예시

  • 비동기 처리
    • Future<User> fetchUserFromApi(): API에서 사용자 정보 비동기적으로 가져오기
    • Stream<int> countSeconds(): 1초마다 카운트 값 스트림 생성
  • 옵셔널 파라미터
    • void saveSettings({bool darkMode = false, int fontSize = 16}): 설정 저장 (기본값 설정)
  • 명명된 인수
    • void sendEmail(String to, {String subject, String body}): 이메일 전송 (명명된 인수 활용)
  • 제네릭
    • <T> List<T> sortList(List<T> list): 다양한 타입의 리스트 정렬 (제네릭 활용)

클래스 메서드 예시

class User {
  String name;
  int age;

  User(this.name, this.age);

  void sayHello() {
    print('Hello, my name is $name.');
  }

  bool isAdult() {
    return age >= 18;
  }
}
 
 

Dart 스타일 가이드 준수

  • 카멜 케이스: 메서드 이름은 소문자로 시작하고 각 단어의 첫 글자는 대문자로 작성합니다.
  • 명확한 의미: 메서드의 역할을 명확하게 나타내는 이름을 사용합니다.
  • 동사 + 명사: 일반적으로 메서드 이름은 동사 + 명사 형태로 구성됩니다.
  • 일관성: 프로젝트 내에서 일관된 명명 규칙을 적용합니다.

Dart 스타일 가이드: https://dart.dev/guides/language/effective-dart

추가 팁

  • 짧고 간결하게: 너무 긴 메서드 이름은 가독성을 떨어뜨립니다.
  • 맥락 고려: 메서드가 사용되는 맥락을 고려하여 이름을 지어야 합니다.
  • 중복된 이름 방지: 같은 의미를 가진 다른 이름을 사용하지 않도록 주의합니다.

더 자세한 내용은 Dart 공식 문서를 참고하세요.

이 외에도 궁금한 점이 있으시면 언제든지 질문해주세요.

 

주의: 위에 제시된 예시는 일반적인 가이드라인이며, 프로젝트의 특성과 팀의 규약에 따라 다르게 적용될 수 있습니다.

핵심: 명확하고 간결하며 일관된 메서드 이름을 사용하여 코드의 가독성을 높이고 유지보수를 용이하게 만들어야 합니다.

 

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

 

반응형