2장 소스 코드 구성
2.1 소개
자바의 소스 코드는 패키지(package), 임포트(import), 클래스(class)로 구성된다. 먼저 패키지는 공통된 기능을 가진 클래스들을 묶어서 쉽게 관리하기 위한 것으로 윈도우에서 사용되는 폴더와 비슷한 개념으로 볼 수 있다. 그리고 임포트는 이미 작성되어 있는 클래스를 현재 작성하는 클래스에서 불러들여 사용하기 위한 명령문이다. 마지막으로 클래스는 실제 로직을 작성하기 위한 자바 소스 코드의 몸체로서 소스 코드에서 가장 중요한 부분이다.
그림 2-1-0 소스 코드 구성
자바 소스 코드는 이 그림처럼 일정한 형식이 있기 때문에 형식을 지키지 않고 작성하면 컴파일시 에러가 발생한다. 그러므로 소스 코드를 작성할 때는 가장 먼저 패키지를 선언하고 그 다음에 임포트를 선언해야 한다. 그리고 이어서 클래스를 정의하면 자바 소스 코드가 완성된다. 이러한 작성 순서는 자바 코드 작성시 반드시 지켜야 하지만 패키지와 임포트는 필요하지 않은 경우에는 생략할 수 있다.
다음 소스 코드는 소스 코드 구성을 지켜 작성한 소스 코드를 보여준다.
코드) 소스 코드 구성
package com.dev.java;
import java.util.*;
public classMyTest {
publicMyTest() {
}
public static voidmain(String[] args) {
}
}
2.2 패키지(package)
프로그램을 작성하기 위해서는 많은 클래스가 필요하다. 작은 프로그램인 경우에는 몇 개의 클래스로 완성될 수 있지만 대부분의 프로그램들은 많은 클래스들을 필요로 한다. 이러한 많은 클래스들이 하나의 폴더에 저장되어 있을 경우 원하는 클래스를 찾기 위해서 많은 시간을 소비해야 하는 일이 발생할 수 있다. 그렇기 때문에 이러한 문제를 없애고 좀 더 효율적으로 클래스들을 관리하기 위해서는 종류별로 클래스를 구분하는 것이 좋다. 자바에서 이러한 기능을 제공하기 위한 것이 패키지라는 개념이다. 이 개념은 윈도우 환경에서 수많은 파일들을 관리하기 위해 사용하는 폴더와 같은 개념이라고 볼 수 있다.
그림 2-2-1 자바 표준 패키지
위 그림은 자바 표준 패키지의 구조를 보여준다. java 폴더 아래 io, lang, math 등의 폴더가 있고 각각의 폴더 아래 실제 클래스들이 위치하고 있다. 이러한 구조로 패키지를 작성하기 위해서는 해당 소스 파일에 패키지를 선언해야 한다. 패키지 선언은 위 그림처럼 폴더 순으로 선언하면 된다.
그림 2-2-2 자바 패키지
여러분은 패키지 구조를 직접 확인할 수도 있다. 자바가 설치된 폴더에 보면 자바 API 소스를 모아 놓은 src.zip 파일이 있다. 이 파일을 열면 위와 같이 되어 있는 것을 볼 수 있다.
그리고 이 파일의 java.io 패키지에 있는 Bits.java 파일을 열어보면 다음과 같이 패키지가 선언되어 있는 것을 확인할 수 있다. 또한 이 파일 아래로 보이는 많은 자바 파일들이 모두 java.io 패키지에 속해 있다는 것도 알 수 있다.
코드) java.io 패키지의 Bits.java 소스 코드
/* @(#)Bits.java 1.4 03/12/19
*
*
Copyright 2004 Sun Microsystems, Inc. All rights reserved.
*
SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package java.io;
class Bits {
}
//
이하
생략
작성한 패키지는 내부에서 사용하거나 외부에 배포할 수 있다. 이때 배포된 패키지명이 이미 다른 조직에서 배포한 패키지명과 동일하다면 이 두 개의 패키지를 동시에 사용할 수 있을까? 자바 프로그램에서는 같은 패키지명을 가진 두 개의 패키지를 구분할 수 없기 때문에 한 개의 패키지는 사용할 수 없다. 그래서 자바에서는 패키지명이 중복되는 일이 발생하지 않도록 도메인 이름을 역순으로 하여 패키지명을 작성하는 것을 권장하고 있다. 예를 들어 자신의 회사의 도메인 이름이 www.kbc.com 이고 작성된 클래스들이 io 를 위한 것이라면 패키지명을 com.kbc.io 로 한다. 물론 이러한 패키지명 작성 규칙을 지키지 않고 패키지를 작성할 수도 있지만 되도록 작성 규칙을 지키는 것이 차후 발생할 수 있는 문제를 미연에 방지하는 길이라는 것을 명심해야 한다.
코드) 패키지(package)
package com.kbc.io;
2.3 임포트(import)
프로그램을 작성하는 경우 자신이 모든 클래스를 만들어 사용하는 것은 매우 불필요한 일이며 현명하지 않은 선택이다. 예를 들어 자바 프로그램을 작성하면서 화면에 출력하기 위해 자주 사용하는 System.out.println() 메소드를 직접 만들어 사용한다고 했을 때 원하는 프로그램을 작성하기 위해서는 너무 많은 시간이 걸리게 된다는 것을 누구나 알 것이다. 그렇기 때문에 우리는 프로그램을 빠르게 작성하기 위해서는 JDK 에서 지원하는 표준 패키지를 사용해야 한다. 어떻게 사용할 수 있을까? 바로 이때 사용하는 것이 임포트이다. 임포트를 사용하면 이미 작성되어 있는 클래스를 이용하여 프로그램을 쉽고 빠르게 작성할 수 있다.
임포트를 사용하는 방법은 패키지를 선언하는 방법과 동일하며 패키지 전체의 클래스를 사용할 필요가 없을 경우에는 특정 클래스만을 지정할 수도 있다. 예를 들어 프로그램에서 파일 작업을 위해 자바 표준 패키지의 FileReader 클래스가 필요하다면 import java.io.FileReader; 라고 선언하고 FileReader 클래스 뿐만 아니라 io 관련 클래스를 모두 사용하고 싶다면 import java.io.*; 라고 선언하면 된다.
코드) 임포트(import)
import java.io.*;
2.4 클래스(class)
클래스는 객체를 표현하기 위한 설계도로서 자바 프로그램의 가장 핵심적인 부분이다. 우리는 이 클래스에 변수, 생성자, 메소드를 작성하여 프로그램을 원하는 방향으로 동작하도록 할 수 있다. 클래스에 대한 자세한 설명은 차후에 다시 살펴보도록 하고 여기서는 자바 프로그램의 핵심이 클래스라는 것만 알아두도록 하자.
코드) 클래스(class)
public classMyTest {
publicMyTest() {
}
public static voidmain(String[] args) {
}
}
2.5 주석(Comments)
주석은 프로그램의 흐름에는 영향을 주지 않으면서 소스 코드의 분석을 용이하게 해주는 문장으로서 자바에서 사용할 수 있는 주석에는 라인(Line) 주석, 블록(Block) 주석, 문서화(Document) 주석이 있다. 이들 주석은 프로그램의 흐름에는 영향을 주지 않는 문장들이기 때문에 필요하지 않다면 반드시 작성할 필요는 없다.
2.5.1 라인 주석(Line Comment)
라인 주석은 단일 문장을 주석 처리하기 위해 사용하며 보통 변수나 프로그램 로직의 간단한 설명을 위해 사용한다. 라인 주석을 선언하기 위해서는 주석 처리를 위한 문장 앞에 // 를 추가하면 된다. 이렇게 라인 주석을 선언하면 해당 라인의 끝까지 모두 주석처리 되어 프로그램의 흐름에 영향을 줄 수 없게 된다. 다음은 라인 주석의 사용 예를 보여준다.
코드) 라인 주석(Line Comment)
int no = 0; //
임시
변수
//String name = null;
2.5.2 블록 주석(Block Comment)
블록 주석은 여러 라인의 문장을 주석 처리하기 위해 사용하는 주석문이다. 보통 라인 주석으로 처리하기에는 많은 라인을 한번에 주석 처리하기 위해 사용한다. 블록 주석을 선언하기 위해서는 주석 처리하고자 하는 문장들을 로 감싸기만 하면 된다. 블록 주석은 다음과 같이 선언한다.
코드) 블록 주석(Block Comment)
/*
이
메소드는 테스트를 위해 잠깐 주석 처리함.
public String getName() {
return name;
}
*/
2.5.3 문서화 주석(Documentation Comment)
문서화 주석은 변수, 메소드, 클래스 등에 선언되어 클래스의 역할과 메소드의 기능을 설명하기 위해 사용한다. 문서화 주석은 차후에 도큐먼트 도구(javadoc)를 이용하여 자동으로 자바 API 와 같은 HTML 페이지로 생성할 수 있기 때문에 클래스의 구조를 살펴보는데 매우 유용하게 사용될 수 있다. 문서화 주석은 주석 처리하고자 하는 문장을 로 감싸면 된다. 문서화 주석은 다음과 같이 선언한다.
코드) 클래스 문서화 주석(Class Documentation Comment)
public class UserInfo
{
//...
}
코드) 변수 문서화 주석(Field Documentation Comment)
/ **
* 사용자 이름
*/
String name;
코드) 메소드 문서화 주석(Method Documentation Comment)
/ **
* 이름과 주민번호를 연결해서 반환한다.
*
* @param name 이름
* @param jumin_id 주민번호
* @return 이름과 주민번호가 연결된 문자열
* @see java.lang.String
*/
public String getStr(String
name, String jumin_id) {
returnname + jumin_id;
}
문서화 주석에는 헤더 테그를 제외한 모든 HTML 태그를 사용할 수 있다. 또한 문서화 주석에서 사용할 수 있는 특별한 태그를 제공하고 있는데 이 태그는 @로 시작한다. 이 문서화 주석 태그에는 많은 종류가 있지만 여기서는 가장 자주 사용하는 태그에 대해서만 살펴보도록 하겠다.
표 2-4-3-1 문서화
주석 태그
키워드 |
설명 |
@author |
코드 작성자를 설명한다.
사용법) @author
name
사용예) @author
개발자 |
@deprecated |
클래스, 메소드, 변수 등 더 이상 사용되지 않는다는 것을 알리기 위해 사용한다.
사용법) @deprecated
deprecated-text
사용예)
@deprecated 이 메소드는 더 이상 사용되지 않습니다. |
@exception |
코드가 발생할 수 있는 예외를 설명하기 위해 사용한다.
사용법) @exception
class-name description
사용예)
@exception IOException 입출력시 예외가 발생하면 |
{@link} |
특정 패키지의 문서로 링크를 걸기 위해 사용한다.
사용법) {@link package.class#member
label}
사용예) {@link
#getStr(int, int) getStr} |
@param |
메소드의 매개 변수를 설명하기 위해 사용한다.
사용법) @param
parameter-name description
사용예) @param
name 이름 |
@return |
메소드로부터 반환되는 값을 설명하기 위해 사용한다.
사용법) @return
description
사용예) @return
이름과 주민번호가 연결된 문자열 |
@see |
클래스, 메소드, 변수 등 관련된 정보를 알리기 위해 사용한다.
사용법) @see
package.class#member label
사용예) @see
String#equals(Object) equals |
@throws |
@exception 과 동일하다.
사용법) @throws
class-name description
사용예) @throws
IOException 입출력시 예외가 발생하면 |
@version |
코드의 버전을 알리기 위해 사용한다.
사용법) @version
version-text
사용예)
@version 1.0 |