"이봐, 젊은 친구. 내가 16 세대 관료라는 사실을 잊지 않았기를 바란다. 내 모든 지식을 체계화하지 않았었다면 지금 누리는 것을 결코 달성하지 못했을 거야. 나는 유용한 정보로 가득 차 있지. 내가 몇 가지 과제를 도와줄 거야. 우선, 전형적인 자바 프로그램에 대해 말해 줄게."

"듣고 있어."

"팩트 넘버원. 자바 프로그램은 클래스로 구성된다. 각 클래스는 클래스 이름과 일치하는 개별 파일에 저장된다. 파일 확장자는 java이다."

"그럼, 프로그램은 'java' 파일 확장자가 있는 일련의 파일로 구성되고 각 파일에는 하나의 클래스에 대한 코드가 들어 있고?"

"아미고, 정확히 맞췄어. 파일이 MyCat.java이면 MyCat 클래스를 포함하지."

"두 번째 팩트. 클래스 파일이 많으면 폴더와 하위 폴더로 그룹화한다. 또한 클래스는 패키지와 하위 패키지로 그룹화된다. 패키지 및 하위 패키지 이름은 클래스 코드로 표시하고, 드라이브의 폴더 및 하위 폴더 이름과 동일해야 한다."

"따라서 한편에서는 파일을 폴더에 저장하고, 다른 한편에서는 클래스를 패키지에 저장한 거지. 클래스 이름은 클래스를 설명하는 파일의 이름과도 일치해야 하고. 패키지 이름은 클래스를 저장한 폴더 이름과 일치해야 해."

"좀 더 자세히 말해 줄 수 있겠어?"

"중첩된 패키지의 이름들은 마침표로 구분되어 있다. URL과 거의 비슷하지."

"즉, animals.pets 패키지에 저장된 Cat이라는 이름의 클래스가 있다고 가정해 보자. 의미는 다음과 같아.

하드 드라이브에는 모든 프로젝트 파일이 저장된 폴더(src라고 한다)가 있다.

이 폴더에는 animals라는 폴더가 들어있고, animals 폴더에는 다시 pets라는 하위 폴더가 포함되어 있지.

pets 폴더에는 Cat.java 파일이 들어 있는데, 이 파일에는 Cat이라는 클래스에 대한 코드가 들어 있는 거고."

"내가 올바르게 이해하는지는 잘 모르겠어."

"봐. 클래스와 패키지의 구조는 드라이브에 있는 폴더와 파일의 구조를 반영한다. src/com/houses 폴더에 저장된 House.java라는 파일이 있으면, House라는 클래스가 com.houses 패키지에 저장되어 있지."

"알았어."

"이해력이 빠른데! 화면을 봐. 이건 클래스 코드인데, 많지 않아. 핵심 부분에 모두 라벨을 붙여 놨어."

        PACKAGE NAME
package com.futujava.lesson2;
import java.io.IOException;
/**
 * User: General
 * Date: 12/21/12
 * Time: 11:59
 */
             CLASS NAME
public class Task1
{
                                                              
   private static String TEXT = "Kiss my metal rear actuator";⎥ CLASS VARIABLE
                                                              
                                                                
   public static void main(String[] args) throws IOException    
   {                                                            
      SCREEN OUTPUT                    SINGLE-LINE COMMENT      
      System.out.println(TEXT); //Display a single string  
        MULTILINE COMMENT                                       
      /*                                                        
        This is a multiline comment.                            
        The code below will display three identical strings.    ⎥ main() METHOD
       */                                                       
      VARIABLE DECLARATION                                      
      String s = "Ho-ho-ho!";                                   
      METHOD CALL                                               
      printTextMoreTimes(s, 3);                                 
   }                                                            
                                                                
                                          METHOD PARAMETERS   
   public static void printTextMoreTimes(String s, int count) ⎥ METHOD SIGNATURE
                                                            
                                                                
   {                                                            
      LOOP                                                      
      for (int i = 0; i < count; i++)                           
      LOOP BODY                                                 ⎥ METHOD BODY/CODE
      {                                                         
         System.out.println(s);                                 
      }                                                         
   }                                                            

}

"헤헤, 한 가지 설명만 하고 나면 명확해질 거야."

"좋아! 그게 필요해. 적어도 뭔가 그냥 이해하려고 해봐. 완전히 이해하려면 시간이 좀 걸릴 테니까. 난 이제 낮잠 좀 자야겠어. 다른 누군가가 계속 널 가르칠 거야."