티스토리 뷰

개발/Java Study

7주차 : 패키지

박비버 2021. 2. 13. 22:23

1. package 키워드

  • 클래스의 묶음, 관련된 클래스끼리 그룹으로 묶어서 관리
  • 서로 다른 패키지에 존재하도록함 -> 다른 개발자의 라이브러리의 클래스 이름 충돌을 막음
  • 하나의 소스파일에는 첫번째 문장으로 단 한번의 패키지 선언만을 허용
  • 모든 클래스는 반드시 하나의 패키지에 속해야함
  • 패키지는 점(.)을 구분자로 하여 계층 구조로 구성할 수 있음
  • 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리임
  • 소스 파일의 첫번째 문장
  • 주로 소문자
  • 패키지 지정하지 않는 경우 unnamed package로 지정됨
  • 컴파일 시 -d 옵션 추가 : 지정된 패키지와 일치하는 디렉토리가 존재하지 않는다면 자동으로 생성
package 패키지명;

 

2. import 키워드

  • 사용하고자 하는 클래스의 패키지를 미리 명시함
  • 소스코드에서 사용되는 클래스 이름에서 패키지명을 생략할 수 있음
  • 이클립스 단축키 : ctrl+shift+o
  • java.lang.* 은 모든 파일에 묵시적으로 선언되어 있음
package 문

import 문

클래스 선언
import 패키지명.클래스명;
import 패키지명.*;
  • 패키지명.* 를 이용해서 지정된 패키지에 속하는 모든 클래스를 패키지명 없이 사용할 수 있음, 실행시 성능상의 차이는 없음
import java.util.*;
import java.text.*;

import java.*; // 불가능, 하위 패키지의 클래스까지 포함하는 것은 아님
  • static import 문 : static 멤버를 호출할 때 클래스 이름을 생략할 수 있다.
System.out.println(Math.random());

아래와 같이 변경 가능

import static java.lang.Integer.*;
import static java.lang.Math.random;
import static java.lang.System.out;

out.println(random());

3. 클래스패스

  • 컴파일러(javac.exe)나 JVM 등이 클래스의 위치를 찾는데 사용되는 경로
  • 패키지의 루트 디렉토리를 클래스 패스에 포함 시켜야 함
  • 루트 디렉토리가 포함 되어야만 실행 시에 JVM이 클래스를 찾을 수 있음


4. CLASSPATH 환경변수

  • 윈도우 환경 : 제어판 - 시스템 - 고급 시스템 설정 - 환경변수 새로만들기' 변수 이름에 CLASSPATH를 입력하고 변수 값에 '.;c:\jdk1.8\work' 입력
  • ';'를 구분자로 여러 개의 경로를 클래스패스에 지정할 수 있음
  • '.;' 는 현재 디렉토리를 클래스 패스에 포함 시키기 위함

5. -classpath 옵션 

  • javac <options> <souce files>
  • 실행시에 옵션을 이용해서 일시적으로 클래스 패스를 지정
  • javac -classpath c:\jdk1.8\work com.javachobo.book.PackageTest 
  • -classpath를 줄여서 -cp로 사용 가능


6. 접근지시자

  • 멤버 또는 클래스에 사용되어, 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한 하는 역할
  • 지정되어 있지 않다면 default
  • 클래스, 멤버변수, 메서드, 생성자에 사용가능
  • public > protected > (default) > private
제어자 같은 클래스 같은 패키지 자손클래스 전체
public O O O O
protected O O O  
(default) O O    
private O      

 

대상 사용 가능한 접근 제어자
클래스 public, (default)
메서드 public, protected, (default), private
멤버변수 public, protected, (default), private
지역변수 없음

 

  • 클래스 내부에 선언된 데이터를 보호하기 위해서
  • 객체지향 개념의 캡슐화 encapsulation
  • 내부 작업을 위해 임시로 사용되는 멤버 변수나 부분 작업을 처리하기 위한 메서드를 클래스 내부에 감추기 위함
  • 외부에서 접근할 필요가 없는 멤버는 private로 지정, 복잡성을 줄일 수 있음 : 캡슐화
public class Time {
	private int hour;
    private int minute;
    private int second;
    
    Time(int hour, int minute, int second){
    	setHour(hour);
        setMinute(minute);
        setSecond(second);
    }
    
    public int getHour() { return hour; }
    public void setHour (int hour) {
    	if (hour < 0 || hour > 23) return;
        
        this.hour = hour;
    }
    public int getMinute() { return minute; }
    public void setMinute (int minute) {
    	if (minute < 0 || minute > 59) return;
        
        this.minute = minute;
    }
    public int getSecond() { return second; }
    public void setSecond (int second) {
    	if (second < 0 || second > 59) return;
        
        this.second = second;
    }

}
  • 생성자의 접근 제어자를 private로 지정하면 외부에서 생성자에 접근할 수 없도록 할 수 있음
  • 아래와 같이 public static 으로 지정하면 인스턴스의 개수를 제한 할 수 있음
class Singleton {
	private static Singleton s = new Singleton();
    
    private Singleton() {
    
    }
    
    public static Singleton() getInstance() {
    	return s;
    }
}
  • 생성자가 private 인 클래스는 다른 클래스의 조상이 될 수 없음, 자손클래스에서 호출하는 것이 불가능하기 때문
  • final을 추가하여 상속 할 수 없는 클래스 임을 알림
public final class Math {
	private Math() {}
    ...
}
final class Singleton {
	private static Singleton s = new Singleton();
    
    private Singleton() {
    
    }
    
    public static Singleton() getInstance() {
    	return s;
    }
}

class SingletonTest {
	public static void main (String args[]){
    	// Singleton s = new Singleton(); // 에러, Singleton() 은 private
        Singleton s = Singleton.getInstance();
    }
}

 

 

출처 

자바의 정석, 남궁 성 지음

 

'개발 > Java Study' 카테고리의 다른 글

9주차 : 예외 처리  (0) 2021.02.15
8주차 : 인터페이스  (0) 2021.02.15
6주차 : 상속  (0) 2021.02.13
5주차 : 클래스  (0) 2021.02.12
4주차 : 제어문  (0) 2021.02.09
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함