자바 스터디 7주차

김성훈·2022년 8월 27일
0
post-thumbnail

자바의 패키지에 대해 학습하세요.


학습할 것

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


package

Java의 패키지는 관련 클래스를 그룹화하는 데 사용된다.

파일 디렉토리에 있는 폴더 생각하면 된다.

우리는 패키지를 사용해서 이름 충돌을 피하고 더 나은 유지 관리 가능한 코드를 작성할 수 있다.

패키지는 크게 두 가지로 나뉜다.

  • 내장 패키지 (Java api 패키지)

  • 사용자 정의 패키지 (자신만의 패키지 생성)

내장 패키지

Java API는 Java Development Environment에 포함된 무료로 미리 작성된 클래스 라이브러리다.

라이브러리에는 입력, 데이터베이스 프로그래밍 등을 관리하기 위한 구성 요소가 포함되어 있다.

라이브러리는 패키지와 클래스로 나뉘는데, 단일 클래스(메소드 및 속성과 함께) 가져오거나 지정된 패키지에 속하는 모든 클래스를 포함하는 전체 패키지를 가져올 수 있다.

import 라이브러리의 클래스나 패키지를 사용하려면 다음 키워드를 사용해야 한다

import package.name.Class;   // Import a single class
import package.name.*;   // Import the whole package

클래스 가져오기 (import)

우리가 알고리즘 문제를 풀때 많이 사용하는 사용자 입력을 받는 데 사용되는 Scanner 클래스와 같이 사용하려는 클래스를 찾은 경우 다음과 같이 코드를 작성한다.

import java.util.Scanner;

여기서 java.util 은 패키지이고 Scanner는 패키지의 Scanner 클래스 이다.

클래스를 사용하려면 Scanner 클래스의 개체를 만들고 Scanner 클래스 설명서에 있는 사용 가능한 메서드를 사용한다.

import java.util.Scanner;

class MyClass {
  public static void main(String[] args) {
    Scanner myObj = new Scanner(System.in);
    System.out.println("Enter username");

    String userName = myObj.nextLine();
    System.out.println("Username is: " + userName);
  }
}

패키지 가져오기

선택할 수 있는 패키지는 굉장히 많다.

java.util 에는 날짜 및 시간 기능, 난수 생성기 및 기타 유틸리티 클래스도 포함되어 있다.

import java.util.*;

전체 패키지를 가져오려면 문장을 * 로 끝내면 된다. 그러면 패키지의 모든 클래스를 가지고 온다.

사용자 정의 패키지

자신의 패키지를 만들려 하면 Java 가 파일 시스템 디렉토리를 사용하여 패키지를 저장한다는 것을 이해해야 한다.

└── root
  └── mypack
    └── MyPackageClass.java

패키지를 만들려면 pacakge 키워드를 사용하면 된다.

package mypack;
class MyPackageClass {
  public static void main(String[] args) {
    System.out.println("This is my package!");
  }
}

FQCN (Fully Qualified Class Name)

모든 클래스에는 정의된 클래스 이름과 패키지 이름이 있다.

이 둘을 합쳐야 완전하게 한 클래스를 표현할 수 있으며 FQCN(Fully Qualified Class Name)이라 한다.

ex) String 클래스의 패키지는 "java.lang" 이며 FQCN은 "java.lang.String"이 된다.

클래스패스

클래스를 찾기 위한 경로를 의미한다.

JVM 이 프로그램을 실행할 때, 클래스 파일을 찾는데 기준이 되는 파일 경로.

image-20220827160616652

.java 파일을 컴파일하면 소스 코드가 바이트코드 로 변환된다.(.class)

java runtime으로 .class 파일을 실행하려면 먼저 파일을 찾을 수 있어야 한다.

이때 .class 파일을 찾을 때 classpath 에 지정된 경로를 사용하게 된다.

package kr.sunghoon.jjang;

public class King {
    public static void main(String[] args){
        System.out.println("kingsunghoon");
    }
}

classpath를 지정할 수 있는 방법은 환경 변수 CLASSPATH 를 지정하거나 java runtime에서 -classpath 플래그를 사용하는 방법이 있다.

CLASSPATH 환경변수

환경변수는 운영체제에 지정하는 변수로 자바 가상머신과 같은 애플리케이션들은 환경변수 값을 참고해서 동작하게 된다.

자바는 클래스 패스로 환경변수 CLASSPATH 를 사용하게 되는데 이 값을 지정하면 실행할 때마다

-cp(classpath) 옵션을 사용하지 않아도 된다.

windows

시스템 설정 > 환경변수

linux / unix 계엘

/etc/profile

접근지시자

자바에서는 클래스, 인터페이스나 멤버에 대한 접근을 제어할 수 있는 접근 지시자(Access Modifier)라는 것을 제공한다.

선언 위치에 따라 언급한 항목들에 대해 접근성이 정해지는 것

  • public

    • 모든 패키지에서 아무런 제한 없이 호출할 수 있게 한다.
  • protected

    • default 접근 제한과 마찬가지로 같은 패키지에 속하는 클래스에서 호출할 수 있도록 한다.
      차이점은 다른 패키지에 속한 클래스가 해당 클래스의 하위 클래스라면 호출 할 수 있다.
  • package-private (default)

    • 접근 제한자를 명시하지 않았다면 default 접근 제한을 가진다.
      같은 패키지에서는 제한 없이 호출할 수 있으나, 다른 패키지에서는 호출할 수 없다.
  • private

    • 클래스 내부에서만 사용할 수 있다.

사용이유

  • 외부로부터의 접근을 제한하여 데이터를 보호하기 위함
    객체지향 개발방법론에서는 이를 '은닉성'이라고 표현함
  • 외부에는 불필요하고 내부적으로만 사용되는 부분을 감추기 위함
    객체지향 개발방법론에서는 이를 '캡슐화'라고 표현함

https://www.w3schools.com/JAVA/java_packages.asp

https://www.notion.so/ed8e346f88f54849a06ff968b1877ca5

profile
"한 명이 걷는 천 걸음 보다 천 명이 함께 걷는 한 걸음이 성공의 시작이고 완성이다"

0개의 댓글