13. 대규모 프로그램의 작성

13-1. 파일 분할

파일 분할하기

  • 수많은 개발자가 분담하여 프로그램 작성

클래스 여러 개를 다른 파일에 나눠서 작성하는 방법?


하나의 파일에 작성했던 2개의 클래스를, 각각 다른 파일로 나눔!

  • Car.java : Car 클래스
  • Sample1.java : main() 메소드를 가지는 Sample1 클래스


파일을 나누었지만, 예전과 같은 방법으로 실행 가능!

Sample1 컴파일 & 실행

  • javac Sample1.java
    • Sample1.class & Car.class 2개의 파일이 생성됨
  • java Sample
    • 두 개의 class 파일이 같은 위치에 있어야!


13-2. 패키지의 기본

패키지 = 다른 사람들이 설계한 다양한 클래스를 이용

  • 클래스를 패키지에 포함시키기!
  • Java에서는, 클래스 이름 앞에 패키지 이름을 붙이는 방법을 사용


Example )

package pa;
class Car
{
    //...
}

class Sample
{
    //...
}
  • Car & sample 클래스 모두 pa 패키지 안에 포함됨

    ( 여러 클래스를 하나의 패키지에 포함 시킬 수 있음 )

  • 이 프로그램을 컴파일 하기 전, pa라는 폴더를 생성할 것!


컴파일 & 실행하기

  • 컴파일 : javac pa\Sample.java
  • 실행 : java pa.Sample


패키지 지정 X면?

“이름없는 패키지”에 모두 포함됨!


13-3. 패키지의 사용

같은 패키지에 포함시키기

  • 다른 파일에 존재하는 클래스를, 같읔 패키지에 포함시키기!

Car.java

package pa;
class Car
{
    //...
}


Sample.java

package pa;
class Sample
{
    //...
}


이번엔, 2개의 클래스가 각기 다른 파일에 작성 되었다.

서로 다른 파일에 작성된 클래스도, 동일한 패키지 OK


다른 패키지로 나누기

다른 파일에 작성된 클래스를 다른 패키지에 포함시키기!

package pb;

class Sample2
{
    //...
    // Car 패키지 사용함
    // ...
}


컴파일 :

  • javac pa\Sample2.java
  • 오류 뜰 것! 이유?
    • Car 클래스 : 패키지 pa
    • Sample2 클래스 : 패키지 pb
      • 여기서, Car을 쓰고 있기 때문에!
      • 단순히 Car라고 쓰면, 같은 패키지(pb)의 Car 클래스를 사용하려함
      • 따라서, 해당 Car가 pa 패키지에서 온 것이라는 것을 알려줘야한다!


다른 패키지 안의 클래스 사용하기

아래의 2번의 작업이 필요

  1. 사용될 클래스의 이름 앞에 public
  2. 다른 패키지의 클래스의 이름 앞에 패키지 이름 붙이기

Car.java

package pc;

// (1) 앞에 public 붙이기
public class Car
{
    //...
}


Sample3.java

package pb;

class Sample3
{
    //...
    // (2) 클래스 이름 앞에 패키지 이름
    pc.Car car1=new pc.car();
    car1.show();
    // ...
}
  • 실행 : java pb.Sample3


클래스에 붙이는 public

  • public (O) : 다른 패키지의 클래스 사용 가능
  • public (X) : 다른 패키지의 클래스 사용 불가


패키지 이름으로 클래스 구분하기

sample1의 pa.Car 클래스 & sample2의 pc.Car 클래스

  • 이름은 같지만, 전혀 다른 클래스!
  • 패키지에 의해 나눠진 클래스의 이름의 모음 = “네임스페이스”


13-4. 임포트

“다른 패키지”안의 클래스를 사용하기 위해선,

  • 클래스의 이름 앞에 “패키지의 이름”을 붙여야!

    ( 하지만, 매번 하기 번거로워 … )

pc.Car car1 = new pc.Car();


따라서, import통해 편하게 하자!

  • import 패키지.클래스;
  • 패키지 이름 생략하고 사용 가능
import pc.Car;

Car car1 = new Car();


서브 캐피지 만들기

  • 서브 패키지 = 패키지 안의 패키지


여러 클래스 임포트하기

import java.io.BufferedReader;
import java.io.IOException;
...

대신에

import java.io.*;

import java.awt.*;
import java.awt.image.*;

Tags:

Categories:

Updated: