주요글: 도커 시작하기
반응형
자바 언어의 식별자에 대해서 살펴본다.

식별자 (Identifiers)

식별자는 변수, 상수, 클래스, 인터페이스, 패키지 등과 같은 개체(entity)의 이름을 붙일 때 사용된다. 즉, 변수명, 상수명, 클래스명, 패키지명 등을 선언할 때 붙이는 이름이 식별자이다. 예를 들면, 다음 클래스에서 MyClass, value, main, args 등이 식별자가 된다.

  public class MyClass {
     private int value;
     public void main(String[] args) {
        ... 
     }
  }

String은 식별자라고 하기보다는 단지 이름일 뿐이다. String을 선언한 String 클래스에서는 식별자로 쓰였지만 여기서는 단지 String 이라는 타입명으로 사용하므로 이름이다. 같은 이유로 다른 클래스에서 MyClass, main 등을 생성, 호출 또는 참조하는 것은 이름을 사용하는 것이다.

식별자 어휘 규칙

식별자는 자바문자와 자바숫자로 구성되며, 첫자는 반드시 자바문자이어야 한다. 자바문자는 한국어, 중국어, 일본어 등을 포함한 대부분의 문자들을 지원하는 유니코드 문자이다. 따라서 영문자, 한글, 일본문자, 한문, 유럽이나 다른 나라 문자 등을 모두 사용할 수 있다.

자바문자는 영문자의 대문자와 소문자를 구별하여 사용한다. 그리고, 전통적인 이유-C나 C++은 예전부터 밑줄문자를 사용해왔다-로 밑줄문자(_)와 통화기호($)도 사용할 수 있다. (그러나, 통화기호는 소스코드가 자동 생성되는 경우와 기존 시스템과의 호환문제가 필요한 경우에만 사용하여야 한다. 권장사항)

식별자에 사용할 수 있는 자바문자 또는 자바문자-자바숫자인지 확인하는 방법으로 다음과 같은 Character 클래스의 메소드들이 있다.

  public static boolean isJavaIdentifierStart(char ch)
  public static boolean isJavaIdentifierPart(char ch)

Character.isJavaIndentifierStart() 메소드는 주어진 문자가 자바문자인지를 검사하여 식별자의 첫자로 사용가능한 경우 true 값을 반환한다. Character.isJavaIndentifierPart() 메소드는 주어진 문자가 자바문자 또는 자바숫자인지를 검사하여 식별자의 구성문자로 사용가능한 경우 true 값을 반환한다.

식별자의 길이 규칙

식별자의 길이 제한은 없다. 그러나, 일정한 규칙이나 취향에 맞춰서 식별자를 정하는 것이 좋으며, 너무 길면 오타가 생기기 쉽고 눈으로 구별하기 어려워지므로 좋지 않다.

식별자에 사용할 수 없는 어휘

식별자 어휘 규칙에 맞지만 사용할 수 없는 어휘가 있다. 바로 키워드와 boolean 리터럴 및 null 리터럴이다. 키워드는 자바 언어에서 특별한 의미를 가지는 단어들이므로 식별자로 사용할 수 없다. 다음은 키워드의 리스트이다.

abstract default if private this
boolean do implements protected throw
break double import public throws
byte else instanceof return transient
case extends int short try
catch final interface static void
char finally long strictfp volatile
class float native super while
const for new switch
continue goto package synchronized
boolean 리터럴에는 'true'와 'false'가 있다. 'true'와 'false'는 키워드로 착각하기 쉽지만 키워드가 아니라 리터럴이다. null 리터럴인 'null'도 boolean 리터럴과 마찬가지로 키워드는 아니지만 리터럴이므로 식별자로 사용할 수 없다. 따라서 식별자로 사용할 수 없는 단어는 위의 표에 있는 키워드들, true, false, null 이다.

혼동하기 쉬운 자바문자

자바문자는 유니코드 문자이므로 다른 문자이지만 모양이 같은 문자들이 있다. 다양한 나라의 문자들을 포함하는 유니코드 문자의 특징이기도 하다. 그러나 문자의 모양이 같다고 해서 같은 문자는 아니며 유니코드 문자의 값이 다르면 다른 문자이다.

예를 들어, 영어 대문자 A (유니코드 \u0041)와 그리스 대문자 알파 A (유니코드 \u0391)은 서로 다른 문자이다. 이런 혼동을 피하고 싶으면 식별자를 만들 때 여러나라 문자를 섞어서 사용하지 않는 것이 좋다. 유니코드에 대해서 더 잘 알고 싶으면 다음 문서를 참조하기 바란다.

Unicode Consortium, The. The Unicode Standard: Worldwide Character Encoding, Version 1.0, Volume 1, ISBN 0-201-56788-1, and Volume 2, ISBN 0-201-60845-6. Updates and additions necessary to bring the Unicode Standard up to version 1.1 may be found at -http://www.unicode.org.

Unicode Consortium, The. The Unicode Standard, Version 2.0, ISBN 0-201-48345-9. Updates and additions necessary to bring the Unicode Standard up to version 2.1 may be found at http://www.unicode.org.
일반적인 올바른 식별자 어휘

식별자로 유니코드를 지원하는 것은 자국어로 식별자를 사용할 수 있도록 하기 위한 것이다. 그러나 영문자만으로 구성된 식별자를 사용하는 것이 일반적인 습관이다. 식별자로 한글을 사용하여도 아무런 문제가 없으며, 심지어는 한글이 지원되지 않는 컴퓨터에서도 식별자는 문제가 되지 않는다. 그러나, 한글이 지원되지 않는 시스템에서 소스 코드를 읽을 수는 없으므로 주의하여야 한다.

영문자로 식별자를 정할 때는 몇가지 관습이 있다. 아래의 예들은 모두 자바 2 표준 패키지에서 보이는 예이다.

  • 패키지 이름 : 모두 소문자 (예, java.util, java.awt)
  • 클래스 이름 : 첫자는 대문자, 나머지는 소문자. 두 단어 이상의 합성일 때는 단어의 첫자는 대문자. 약자일 경우 이니셜은 대문자 (예, StringBuffer, InputStream, URLDecoder)
  • 메소드 이름 : 모두 소문자, 두 단어 이상의 합성일 때는 두번째 단어부터 첫자는 대문자. (예, equals, toString)
  • 변수 이름 : 모두 소문자, 두 단어 이상의 합성일 때는 모두 소문자 또는 두번째 단어부터 첫자는 대문자. (예, out, marklimit, isTimeSet)
  • 상수 이름 : 모두 대문자, 두 단어 이상의 합성일 때는 밑줄기호(_)로 구분. (예, PI, DAY_OF_MONTH)
결론

자바 언어의 기초적인 내용을 정확히 알 수 있도록 자바 언어의 기초를 다루는 시리즈의 1편으로 식별자의 어휘 규칙에 대하여 알아보았다.

관련링크:

본 글의 저작권은 이동훈에 있으며 저작권자의 허락없이 온라인/오프라인으로 본 글을 유보/복사하는 것을 금합니다.

+ Recent posts