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번의 작업이 필요
- 사용될 클래스의 이름 앞에 public
- 다른 패키지의 클래스의 이름 앞에 패키지 이름 붙이기
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.*;