Notice
Recent Posts
Recent Comments
Link
«   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
Tags
more
Archives
Today
Total
관리 메뉴

보근은 참고 있다

7주차 과제: 패키지 본문

Language/자바 정리 할래

7주차 과제: 패키지

보근 2020. 12. 30. 13:43

 

 

 

 

 

 

 

 

 

 

 

 

 

  • package 키워드
  • import 키워드
  • 클래스패스
  • CLASSPATH 환경변수
  • -classpath 옵션
  • 접근 지시자

 

 

 

 

 

 

 

 

 

 

클래스의 이름

 

 클래스의 이름은 두 가지가 있다. 클래스 파일 자체의 이름과 패키지+클래스의 이름인 FQCN(Fully Qualified Class Name)이 있다. 

 

 String 클래스를 예시로 들어보면 java.lang.String이 FQCN이다.

 

 같은 이름을 가진 서로 다른 클래스가 있다면, 이렇게 사용해야 한다.

 

import mypackage.MyClass;

class Main {
    public static void main(String[] args) {
        MyCalss m1 = new MyClass(); // mypackage.MyClass
        yourpackage.MyClass m2 = new yourpackage.MyClass();  //  yourpackage.MyClass
    }
}

 

 

 

 

 

 

 

package 키워드

 

  • 패키지란, 클래스나 인터페이스 같은 (파일의 디렉토리처럼)참조 타입의 묶음 단위이다.
  • 패키지로 관련 클래스를 그룹화한다. (java.util, java.lang처럼)
  • 패키지는 같은 이름의 클래스들을 헷갈리지 않도록 해준다.
  • 패키지 하위에 존재하는 패키지를 서브 패키지(sub package)라고 한다. (java.util은 java의 서브 패키지)
  • package 키워드는 해당 클래스의 패키지를 명명하는 키워드이다.
  • package는 소스 코드의 최상단에 기입해야 한다. 
  • 패키지의 가장 최상단인 default package는 이름이 없으며, package 키워드로 명시하지 않아도 된다. (하지만 이름이 같은 클래스 등이 헷갈릴 수 있으므로 사용하지 않는 걸 추천한다.)
  • 패키지에 기입된 것과 실제 클래스들의 디렉토리 구조가 같아야 한다.

 

 

package mypackage.my; // A 클래스는 mypackage의 서브 패키지인 my에 위치.
                      // 실제 디렉토리 구조도 이렇게 되어야 한다.
class A {
}

 

 

 

 

 

 

 

 

 

 

 

 

import 키워드

 

  • 패키지로 구분된 클래스나 인터페이스들을 다른 패키지의 클래스에서 사용하기 위해선 해당 클래스의 패키지 정보를 알아야 한다.
  • 그 패키지 정보는 import 키워드를 통해 기입한다.
  • import 키워드는 package 키워드와 클래스 정의 사이에 기입해야 한다.
  • import 키워드에는 원하는 클래스나 인터페이스, 원하는 패키지의 모든 클래스와 인터페이스, 원하는 클래스의 스태틱 멤버들을 기입할 수 있다.
  • java.lang 패키지의 경우 따로 import 해주지 않아도 된다.

 

 

 

 

 

 

대략적인 패키지와 클래스 구조(네모 : 패키지, 동그라미 : 클래스)

 

 

import my.*; // my의 모든 클래스들을 import
import your.C; // your.C your의 C 클래스만 import

import static static.Static.staticMethod; // static.Static 클래스의 staticMethod()만 import

class Main {
    public static void main(String[] args) {
        A a = new A(); // my.A
        B b = new B(); // my.B  
        C c = new C();
        D d = new D(); // 기본 패키지의 클래스라 import X
        String s = "hello" // java.lang의 클래스들은 자동으로 import
        
        staticMethod(s);
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

클래스패스

 

  • 클래스패스란, JVM이나 컴파일러가 클래스를 사용할 수 있도록 위치, 경로를 알려주는 매개 변수이다. 
  • 세부적인 경로는 각각의 클래스에서 import 키워드로 알려주기 때문에, 클래스패스는 가장 최상단의 디렉토리나 zip, jar 파일을 지정한다.
  • JVM이 지정된 클래스패스를 바탕으로 import에 기입된 세부적인 경로를 통해 클래스를 찾는다.
  • 클래스패스를 지정하는 방법에는 두 가지가 있는데, 하나는 시스템 환경 변수로 설정하는 것과 -classpath(-cp) 옵션을 사용하는 것이다.

 

 

 

 

 

 

 

 

 

 

CLASSPATH 환경 변수

 

 

 

 

시스템의 고급 시스템 설정

 

 

 

 

고급 탭의 환경 변수

 

 

 

JAVA_HOME은 자바의 절대 경로

 

 

 

 

 

 

 

 

-classpath 옵션

 

  • -classpath 또는 -cp으로 줄여서 사용할 수 있다.
  • java -cp <경로> <소스파일>의 모양으로 사용한다.

 

ex)

대략적인 패키지와 클래스 구조(네모 : 패키지, 동그라미 : 클래스, / : dev 디렉토리)

 

Main 클래스

import my.*;
import your.C;

class Main {
    public static void main(String[] args) {
        A a = new A();
        B b = new B();
        C c = new C();
        D d = new D();

        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
    }
}

 

 

실행 결과

 

 

 

 

 

 

 

 

 

 

 

접근 지시자

 

  • 자바의 객체 지향 언어로써의 정보 은닉을 위한 기능이다.
  • 클래스와 멤버 필드나 메서드의 접근을 제어한다.
  • 그 종류는 4가지가 있다. (public, protected, default, private)

 

접근 지시자의 종류

  • public - 모든 곳에서 접근이 가능하다.
  • protected - 클래스, 같은 패키지 내에서, 서브 클래스에서 접근이 가능하다.
  • default(package-private) - 따로 기입하지 않는다. 클래스, 같은 패키지 내에서만 접근이 가능하다.
  • private - 같은 클래스 내에서만 접근이 가능하다.

 

  같은 클래스 내 같은 패키지 내 서브 클래스 다른 패키지
public O O O O
protected O O O X
default
(package-private)
O O X X
private O X X X

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

참고 : ko.wikipedia.org/wiki/%ED%81%B4%EB%9E%98%EC%8A%A4%ED%8C%A8%EC%8A%A4, idratherbewriting.com/java-access-modifiers/#quick-summary, stackoverflow.com/questions/2396493/what-is-a-classpath-and-how-do-i-set-it

'Language > 자바 정리 할래' 카테고리의 다른 글

6주차 과제: 상속  (0) 2020.12.21
5주차 과제: 클래스  (0) 2020.12.19
4주차 과제: 제어문  (0) 2020.12.12
3주차 과제: 연산자  (0) 2020.11.24
2주차 과제: 자바 데이터 타입, 변수 그리고 배열  (0) 2020.11.18
Comments