프로그래밍[Univ]/기타

[자바] 관습적 규약

Cloud Travel 2011. 9. 12. 11:09

1. 공통

  자바언어로 프로그램을 작성시 지켜야 될 몇몇 관습적 규약이 존재한다. 규약은 코드를 짧게 하면서 상대방에게 알기 쉽게 소스를 이해시키는데 목적을 두고 있다. 공통부분은 모든 규약에서의 기초로 2~3장에 소개된 규약에 추가적으로 항상 지켜야 되는 것이다. 공통분야에는 들여쓰기와 선언하는 방법에 대해서 소개된다.


1.1 들여쓰기

  지금까지 배워온 C를 통해서도 들여쓰기의 중요성을 알 수 있었다. 자바에서 관습적 들여쓰기는 “Tab1을 사용하고 있다.

 위 그림은 들여쓰기를 했을 때의 코드 모습이다. 만약 이렇게 되지 않고, 들여쓰기가 없이 다 맨 앞줄부터 시작하거나, 의미 없는 곳에서 띄어쓰기를 한다면 자신(코드작성자)이외에는 소스코드를 이해하기 힘들 것이다. , 들여쓰기를 통해서 코드가 복잡해졌을 때 각각의 제어문의 시작과 끝이 어딘지 명확하게 알 수 있게 해서다른 사람이 코드를 잘 이해 할 수 있게 도와준다.


1.2 선언

  공통적인 부분의 두 번째는 선언에 대한 것이다. 여기서 선언이란 변수를 생성하거나, 초기화하는 규칙을 이야기한다. 일단, “변수 선언시 한 줄당 한 개만을 선언한다. 여기에는 예외가 있지만 뒷부분(3.6)에서 보도록 한다.

  변수를 선언 했으니 초기화에 대해서 알아봐야 하지만, 그에 앞서 변수의 종류에 대해서 살펴보자. 변수에는 크게 두 가지 종류가 존재한다.지역변수전역변수가 그 것이다. 일단 지역변수는 한 의미 단위(‘{’ , ‘}’사이)에서만 사용되는 것으로 그 단위 이외에서는 효력을 발휘 하지 못한다. 이에 비해 전역변수는 클래스 전체 내에서도 사용이 가능한 변수이다.

이제 각각 변수의 선언 위치와 초기화시기에 대해서 알아보자. 지역변수는 한 의미 단위에서 사용되고자 하는 위치에서 바로 초기화를 해주면 된다.

 

  이에 비해 전역 변수는 클래스 선언시 선언을 하고, 초기화는 생성자에서 해준다. 생성자란 클래스라는 틀에서 객체가 생성될 때 실행되는 코드로 객체의 초기화 부분이라고 생각하면 된다. 생성자가 객체의 초기화를 담당하기 때문에 생성자 위치에서 전역변수를 초기화 해주면 된다.



2. 공백

  이번엔 공백의 관습적 표현에 대해서 알아보도록 하자. 공백의 종류에는 스페이스, 엔터, 텝 등 여러 가지 종류가 있다. 그중에서 텝은 들여쓰기에서 사용되고, 그 외 공백 관습으로 존재하는 것이 2줄 엔터, 1줄 엔터, 한 칸 스페이스가 있다.

  2줄 엔터를 띄는 경우로는 클래스와 인터페이스 사이”, “클래스 안에서 내부클래스 선언시가 있다. 그리고 1줄 엔터를 띄는 경우로는 메소드 사이”, “한 줄짜리 주석이 오는 경우”, 메소드 내에 같은 논리적 부분이 끝난 경우가 있다. 마지막으로 한 칸 스페이스 띄는 것으로는 “‘;’ 기호 뒤”, “변수 형 변환시”, “keyword가 괄호 다음에 올 때”, “각종 단일 연산자 뒤(‘.’ 제외)”시 사용된다. 다음 그림은 공백에 대한 관습적 표현을 지킨 간단한 프로그램이다. 

 


 

3. 명명(命名)

  이번엔 명명 법에 대해서 알아보도록 하자.

 

3.1 합성어

 클래스, 변수, 인터페이스 등 프로그래밍시 나오는 모든 합성어에 대해서는 “2번째 단어부터 단어 첫 문자를 대문자로 사용해준다. 여기서 예외로 쓰이는 것이 패키지이다. 패키지 명명에 대해서는 3.2에서 알아보도록 한다.

  예를 들어, 줄의 색을 변경하는 메소드를 만든다고 했을 때, “setlinecolor()”이라고 설정을 한다면 작성한 사람은 알아 볼 수 있어도 다른 사람이 봤을 때 단어의 시작이 어디서부터인지를 모르게 되어 메소드의 의미를 해석하기 힘들어진다. 이 경우 관습적 표현에 맞추어 “setLineColor()”라고 사용한다면 작성자 이외의 다른사람에게도 의미가 한번에 전달 될 것이다.


3.2 패키지

  패키지의 이름은 모두 소문자를 사용한다. 3.1에서 합성어일 경우 2번째 단어부터 대문자를 사용한다는 관습적 표현을 깨고, 모두 소문자로 사용해 주어야 한다.


3.3 클래스

  클래스를 명명시에는 클래스가 하는 일과 의미가 상통하는 명사를 사용해준다. 또한,첫 글자는 대문자를 사용해준다. 3.1에서의 규칙이 같이 적용되어 합성어 일시에는 첫 시작 문자를 대문자, 합성어의 단어가 시작 될 때 마다 대문자를 사용을 해준다. 예를 들어 한 개의 단어로 이루어진 클래스는 “class Canvas”와 같이 첫 글자만 대문자를 사용해주고, 두 개 단어 이상으로 이루어진 클래스는 “class CanvasTest”와 같이 첫 글자와 다음 단어부터 단어가 올 때마다 대문자를 사용해준다.

  코드명이라는 것이 있다. 코드명이란 어떠한 클래스를 작성시 기존의 클래스와 구분을 두기위해 사용하는 단어각 클래스 앞에 대문자로 붙는다. 코드명을 사용해서 클래스를 작성하게 된다면, 클래스의 코드명과 각 단어의 첫 글자를 대문자로 써준다. 예를 들어 위의 “class Canvas”를 코드명 T를 이용하여 구분하는 클래스를 만들었다면, 그 클래스의 이름은 “class TCanvas”가 되는 것이다. 코드명이 사용된 예로는 자바의 스윙 라이브러리에서 기존의 AWT라이브러리와의 구분을 위해서 J라는 코드명을 사용하여서 모든 클래스를 작성하였다.

 

3.4 인터페이스

  인터페이스를 선언할시 대문자 ‘I’입력 후 선언한다. 여기서 ‘I’라는 대문자는 일종의 코드명처럼 사용되기 때문에 뒤에 시작되는 첫 글자도 대문자로 써준다. 합성어가 온다면 3.1의 규칙을 따라서 합성어 단어마다 첫 글자를 대문자로 써준다. 예를 들어, space라는 인터페이스를 생성한다면 “interface ISpace”가 될 것이다.

 

3.5 메소드

  메소드를 선언할 때에는 "메소드의 기능을 담고 있는 동사단어를 사용"해준다. "단어의 시작은 소문자로 해주며, 만약 합성어일 경우에는 3.1의 규칙에 따라 두 번째 단어부터는 대문자"를 써준다.

 

3.6 변수

  변수를 선언할시에는 변수의 의미를 알 수 있는 명사를 사용해준다. 합성어일 경우는 3.1의 규칙에 따라 두 번째 단어부터는 대문자를 사용해준다.

  변수를 선언하다 보면 일회용으로 사용되는 변수가 있다. loop문을 돌리기 위해 존재하는 ‘i’가 그러한 문자이다. ‘i’를 사용하는 이유는 ‘i’의 본래의 단어인 index라는 단어를 줄여서 사용하였기 때문이다. 일회용 문자 사용되는 단어로 ‘i’다음으로 가장 많이 사용되는 것은 ‘j’이다. 이를 많이 사용하는 이유는 다른 단어들 보다 너비()이 좁기 때문이다. 또한 일회성 변수를 선언시에는 한 줄에 여러 개를 선언해도 상관이 없다.”(1.2에 예외)


 변수를 선언할시 주의해야 될 관습적 표현이 하나 더 있다. 이는 변수 "뒤에 변수의 타입을 선언"해줘서 그 단어의 의미와 타입을 동시에 제공해 주는 것이다. 예를 들어 sava라는 변수를 선언하여 사용하는데, 이 단어가 버튼으로 쓰인 것인지, 라벨로 쓰인 것인지 나중에도 확실히 알 수 있게 “saveButton”이나 “savaLabel”이라고 써서 표현을 해줘야 한다.

  다음 그림은 위에서 사용된 명명법의 각종 예를 나타낸다.

 


4. 끝마침

 

  프로그래밍언어는 의사소통을 하기 위해서 필요하다. 이 의사소통을 원활히 하기 위해서 각종 관습적 표현이 적용된다. 이러한 관습적 표현은 다른 사람의 소스코드를 이해하거나, 자신의 소스코드를 이해시키는데 필요하기 때문에 잘 지켜야 한다고 생각된다.