일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- gpt활용팁
- 창의적도구
- java super메소드
- 티스토리챌린지
- java 람다식
- 화살표연산자
- ai활용법
- asyncawait
- binraytree
- import 키워드
- Java 자료구조
- java스터디
- java 애노테이션
- java_this
- java 제네릭
- JAVA데이터타입
- java 패키지
- 생성형AI
- javautil패키지
- javascript
- java 이진트리
- this키워드
- java 추상 클래스
- java final 키워드
- javatime
- java
- java반복문
- java 메서드 오버라이딩
- java objact클래스
- 오블완
- Today
- Total
코딩쿠의 코드 연대기
Java 패키지 본문
학습목표
- package 키워드
- import 키워드
- CLASSPATH
- CLASSPATH 환경변수
- -classpath 옵션
- 접근지시자
키워드
Java에서 package
키워드는 클래스를 패키지라는 논리적인 단위로 묶는 데 사용됩니다. 패키지는 관련된 클래스들을 그룹화하여 코드를 구성하고 관리하는 데 도움을 주며, 이름 충돌을 방지하고 코드의 재사용성을 높이는 데 기여합니다.
package 선언
Java 소스 파일에서 package
키워드는 파일의 맨 처음에 선언되어야 합니다.
Java
package 패키지이름;
class MyClass {
// ...
}
package 명명 규칙
- 일반적으로 패키지 이름은 소문자로 시작합니다.
- 도메인 이름을 역순으로 사용하는 것이 일반적인 관례입니다 (예:
com.example.myproject
). - 계층 구조를 나타내기 위해 점(.)을 사용합니다.
- 숫자로 시작하거나 특수 문자를 사용할 수 없습니다 (
_
와$
제외).
package의 장점
- 이름 충돌 방지: 서로 다른 패키지에 같은 이름의 클래스가 존재할 수 있습니다.
- 코드 구성: 관련된 클래스들을 그룹화하여 코드를 체계적으로 관리할 수 있습니다.
- 접근 제어: 패키지 내의 클래스들은 서로 쉽게 접근할 수 있지만, 다른 패키지의 클래스들은 접근 제한자를 통해 접근을 제어할 수 있습니다.
- 재사용성 향상: 패키지를 통해 코드를 모듈화하여 재사용성을 높일 수 있습니다.
예시
Java
// com.example.myproject 패키지에 속하는 MyClass 클래스
package com.example.myproject;
public class MyClass {
// ...
}
참고:
import
키워드를 사용하여 다른 패키지의 클래스를 사용할 수 있습니다.CLASSPATH
환경 변수는 Java 컴파일러와 JVM이 클래스 파일을 찾는 데 사용되는 경로를 지정합니다.
출처
- [Java] package에 대해 알아봐요. - velog: https://velog.io/@redgem92/Java-%ED%8C%A8%ED%82%A4%EC%A7%80%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC-%EC%95%8C%EC%95%84%EB%B4%90%EC%9A%94
- [Java] 자바 package - 코딩 잘하고 싶어 - 티스토리: https://codingwell.tistory.com/72
- [Java] package, import - 성공보단 성장을. - 티스토리: https://ebabby.tistory.com/24
- [자바/Java] 패키지(package) 란? - 빠르고 꾸준하게 - 티스토리: https://resilient-923.tistory.com/103
- [스터디 7주차] package 키워드 - DailyStudyNote - 티스토리: https://daily-progress.tistory.com/18
import 키워드
Java에서 import
키워드는 다른 패키지에 있는 클래스를 현재 소스 파일에서 사용할 수 있도록 가져오는 역할을 합니다. 즉, import
문을 사용하면 클래스의 전체 패키지 이름을 매번 작성하지 않고도 해당 클래스를 사용할 수 있습니다.
import
문 형식
Java
import 패키지이름.클래스이름;
또는 특정 패키지의 모든 클래스를 가져오려면 와일드카드(*)를 사용할 수 있습니다.
Java
import 패키지이름.*;
예시
java.util
패키지의 ArrayList
클래스를 사용하려면 다음과 같이 import
문을 사용합니다.
Java
import java.util.ArrayList;
public class MyClass {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
// ...
}
}
java.util
패키지의 모든 클래스를 사용하려면 다음과 같이 와일드카드를 사용할 수 있습니다.
Java
import java.util.*;
public class MyClass {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
HashMap<String, Integer> map = new HashMap<>();
// ...
}
}
주의 사항
- 와일드카드를 사용하면 불필요한 클래스까지 가져올 수 있으므로, 가능하면 특정 클래스만 명시적으로 가져오는 것이 좋습니다.
- 같은 이름의 클래스가 여러 패키지에 존재하는 경우, 와일드카드를 사용하면 이름 충돌이 발생할 수 있습니다. 이 경우에는 클래스의 전체 패키지 이름을 명시해야 합니다.
import static
import static
키워드를 사용하면 클래스의 정적 멤버(static member)를 클래스 이름 없이 사용할 수 있습니다.
Java
import static java.lang.Math.PI;
public class MyClass {
public static void main(String[] args) {
double circumference = 2 * PI * 10;
// ...
}
}
참고
java.lang
패키지는 기본적으로 import 되므로,java.lang
패키지의 클래스는import
문 없이 사용할 수 있습니다.
출처
- [Java] import(임포트) - 공부하는 개발자 강씨네: https://12716.tistory.com/entry/Java-import%EC%9E%84%ED%8F%AC%ED%8A%B8
- [Java] package, import - 성공보단 성장을. - 티스토리: https://ebabby.tistory.com/24
- 온라인 자바 스터디 #7 - 패키지, import, 접근제어자, 클래스패스 - 슬기로운 개발생활
- [스터디 7주차] import 키워드 - DailyStudyNote - 티스토리: https://daily-progress.tistory.com/19
클래스패스(CLASSPATH)
Java CLASSPATH는란?
Java 런타임 환경이 컴파일된 클래스 파일과 라이브러리를 찾는 데 사용하는 경로를 정의하는 환경 변수입니다. 쉽게 말해, Java 프로그램이 실행될 때 필요한 클래스들을 어디서 찾아야 하는지 알려주는 지도와 같은 역할을 합니다.
클래스패스 환경 변수
Java CLASSPATH 환경 변수는 Java 런타임 환경이 컴파일된 클래스 파일(.class)과 라이브러리 파일(.jar)을 찾는 데 사용하는 경로를 지정합니다. 즉, Java 프로그램이 실행될 때 필요한 클래스들을 어디서 찾아야 하는지 알려주는 역할을 합니다.
왜 중요한가요?
Java 프로그램은 다양한 클래스들을 사용하여 작성됩니다. 이러한 클래스들은 파일 시스템의 여러 위치에 저장될 수 있습니다. CLASSPATH는 Java 런타임 환경에게 이러한 클래스 파일들을 어디에서 찾아야 하는지 알려줌으로써 프로그램이 정상적으로 실행될 수 있도록 합니다.
CLASSPATH 설정 방법
CLASSPATH는 다음과 같은 방법으로 설정할 수 있습니다.
- 환경 변수 설정:
- Windows:
내 PC
에서 우클릭 후속성
을 클릭합니다.고급 시스템 설정
을 클릭합니다.환경 변수
버튼을 클릭합니다.시스템 변수
섹션에서새로 만들기
를 클릭하여변수 이름
에CLASSPATH
,변수 값
에 원하는 경로를 입력합니다. 여러 경로를 지정할 경우 세미콜론(;)으로 구분합니다.- 또는 기존의
CLASSPATH
변수를 편집하여 경로를 추가할 수 있습니다.
- macOS/Linux:
- 터미널에서
export CLASSPATH="경로"
명령어를 사용하여 CLASSPATH를 설정합니다. - 쉘 설정 파일 (예:
.bashrc
,.bash_profile
)에export CLASSPATH="경로"
를 추가하여 영구적으로 설정할 수 있습니다.
- 터미널에서
- Windows:
- 명령줄 옵션 사용:
java -cp
또는java -classpath
옵션을 사용하여 Java 프로그램을 실행할 때 CLASSPATH를 지정할 수 있습니다.- 예를 들어,
java -cp ./lib/* MyClass
는 현재 디렉토리의lib
폴더에 있는 모든 JAR 파일을 CLASSPATH에 추가하고MyClass
를 실행합니다.
CLASSPATH 구성 요소
CLASSPATH는 일반적으로 다음과 같은 요소들로 구성됩니다.
- 현재 디렉토리 (.): 기본적으로 CLASSPATH에는 현재 디렉토리가 포함됩니다.
- 클래스 파일의 디렉토리: 컴파일된 클래스 파일(.class)이 있는 디렉토리들을 CLASSPATH에 추가해야 합니다.
- JAR 파일: JAR 파일은 여러 클래스 파일과 리소스를 하나의 파일로 묶은 것입니다. JAR 파일을 CLASSPATH에 추가하면 해당 JAR 파일에 포함된 클래스들을 사용할 수 있습니다.
- 라이브러리 디렉토리: 외부 라이브러리가 있는 디렉토리를 CLASSPATH에 추가할 수 있습니다.
주의 사항
- 경로 구분자: Windows는 세미콜론(;)을 사용하고, macOS/Linux는 콜론(:)을 사용합니다.
- 잘못된 경로: CLASSPATH에 잘못된 경로가 포함된 경우, Java 프로그램이 실행되지 않을 수 있습니다.
- IDE: IDE를 사용하는 경우, IDE에서 CLASSPATH를 자동으로 관리해주는 경우가 많습니다.
CLASSPATH 예시
Windows에서 C:\myproject\classes
디렉토리와 C:\mylibs\mylib.jar
파일을 CLASSPATH에 추가하려면 다음과 같이 설정합니다.
CLASSPATH=.;C:\myproject\classes;C:\mylibs\mylib.jar
macOS/Linux에서 /home/user/myproject/classes
디렉토리와 /usr/local/lib/mylib.jar
파일을 CLASSPATH에 추가하려면 다음과 같이 설정합니다.
export CLASSPATH=.:/home/user/myproject/classes:/usr/local/lib/mylib.jar
주의 사항
- CLASSPATH는 운영체제에 따라 경로 구분자가 다릅니다. Windows는 세미콜론(;)을 사용하고, macOS/Linux는 콜론(:)을 사용합니다.
- CLASSPATH에 잘못된 경로가 포함된 경우, Java 프로그램이 실행되지 않을 수 있습니다.
-classpath 옵션
-classpath
옵션은 Java 실행 환경에서 클래스를 찾을 위치를 지정하는 데 사용됩니다. 즉, Java 프로그램을 실행할 때 필요한 클래스 파일과 라이브러리 파일을 어디서 찾아야 하는지 JVM에게 알려주는 역할을 합니다.
사용 방법
java
명령어를 실행할 때 -classpath
또는 -cp
옵션을 사용하여 CLASSPATH를 지정할 수 있습니다.
java -classpath <경로1>:<경로2>;... <실행할 클래스>
또는
java -cp <경로1>:<경로2>;... <실행할 클래스>
<경로1>:<경로2>;...
: 클래스 파일 또는 JAR 파일이 있는 디렉토리 또는 JAR 파일 경로를 지정합니다. 여러 경로를 지정할 경우 운영체제에 따라 구분자를 사용합니다. (Windows: 세미콜론(;), macOS/Linux: 콜론(:))<실행할 클래스>
: 실행할 Java 클래스의 이름을 지정합니다.
예시
- 현재 디렉토리와 특정 JAR 파일 포함:
- 현재 디렉토리(.)와
./lib/mylib.jar
파일을 CLASSPATH에 추가하여MyClass
를 실행합니다.
- 현재 디렉토리(.)와
java -cp .;./lib/mylib.jar MyClass
- 특정 디렉토리의 모든 JAR 파일 포함:
./lib
디렉토리에 있는 모든 JAR 파일을 CLASSPATH에 추가하여MyClass
를 실행합니다.
java -cp ./lib/* MyClass
- 여러 디렉토리 지정:
/usr/local/java/classes
디렉토리와/home/user/myproject/classes
디렉토리를 CLASSPATH에 추가하여MyClass
를 실행합니다.
java -cp /usr/local/java/classes:/home/user/myproject/classes MyClass
참고 사항
-classpath
옵션을 사용하면 환경 변수에 설정된 CLASSPATH는 무시됩니다.-classpath
옵션은 Java 프로그램을 실행할 때마다 지정해야 합니다.
장점
- 유연성: 프로그램 실행 시마다 CLASSPATH를 다르게 지정할 수 있어 유연하게 클래스 경로를 관리할 수 있습니다.
- 명확성: 환경 변수 설정 없이 명령어 자체에서 CLASSPATH를 명확하게 지정할 수 있습니다.
- 일회성 설정: 특정 실행에만 적용되므로, 다른 Java 프로그램 실행에 영향을 주지 않습니다.
-classpath
옵션을 사용하면 Java 프로그램 실행 시 필요한 클래스들을 명확하게 지정하여 프로그램을 실행할 수 있습니다. 이를 통해 클래스 경로를 유연하게 관리하고 프로그램 실행 환경을 제어할 수 있습니다.
접근지시자
Java 접근 지시자는 클래스, 필드, 메서드에 대한 접근 범위를 제한하는 키워드입니다. 외부에서 클래스 내부의 멤버에 접근하는 것을 제어하여 데이터를 보호하고 코드의 안정성을 높이는 데 사용됩니다. Java는 4가지 접근 지시자를 제공합니다.
접근 지시자 | 같은 클래스 | 같은 패키지 | 자식 클래스 | 전체 |
---|---|---|---|---|
public |
O | O | O | O |
protected |
O | O | O | X |
default (생략) |
O | O | X | X |
private |
O | X | X | X |
public
: 모든 곳에서 접근 가능합니다.protected
: 같은 패키지 또는 자식 클래스에서 접근 가능합니다.default
: 접근 지시자를 명시하지 않으면 default 접근 지시자가 적용됩니다. 같은 패키지 내에서만 접근 가능합니다.private
: 해당 클래스 내에서만 접근 가능합니다.
접근 지시자를 사용하는 이유
- 정보 은닉: 클래스 내부의 구현 세부 사항을 외부에 감춰 코드의 복잡성을 줄이고 유지보수를 용이하게 합니다.
- 캡슐화: 데이터를 보호하고 무결성을 유지합니다.
- 모듈화: 코드를 논리적인 단위로 분리하여 재사용성을 높입니다.
예시
Java
public class Person {
public String name; // 모든 곳에서 접근 가능
protected int age; // 같은 패키지 또는 자식 클래스에서 접근 가능
String address; // 같은 패키지에서만 접근 가능 (default)
private int salary; // 해당 클래스 내에서만 접근 가능
public void printInfo() {
System.out.println("이름: " + name);
System.out.println("나이: " + age);
System.out.println("주소: " + address);
System.out.println("급여: " + salary);
}
}
참고
- 접근 지시자는 클래스, 필드, 메서드뿐만 아니라 생성자에도 적용될 수 있습니다.
private
접근 지시자는 외부에서 해당 멤버에 직접 접근하는 것을 차단하지만, public 메서드를 통해 간접적으로 접근을 허용할 수 있습니다 (getter/setter 메서드).
'코딩스터디 > JAVA스터디' 카테고리의 다른 글
Java 예외 처리 (4) | 2024.11.15 |
---|---|
Java) 인터페이스 (interface) (6) | 2024.11.14 |
Java) 상속_객체지향 프로그래밍(OOP) (6) | 2024.11.12 |
java 자료구조) 이진트리 (BinrayTree) (0) | 2024.11.11 |
객체지향 프로그래밍 (OOP) (5) | 2024.11.10 |