7장. 패키지
목표
자바의 패키지에 대해 학습하세요. issue
학습할 것
package 키워드
package
- 클래스들을 그룹화하기 위한 네임스페이스의 역할
- 모든 클래스에는 정의된 클래스 이름과 패키지 이름이 있다.
- 패키지를 정의하지 않으면 default 패키지로 분류된다.
- 클래스 이름과 패키지 이름을 합친 것을
FQCN(Fully Qualified Class Name)
사용법
package com.example
- 같은 패키지에 존재하는 추가적으로 import를 하지 않고도 class를 불러서 사용할 수 있다.
import 키워드
- 다른 패키지에 있는 클래스를 참조하기 위해서 사용된다.
- FQCN을 입력해서 import하게 된다.
import com.java.study.HelloWorld;
---
import com.java.study.*;
---
import static com.java.study.*;
- 첫번째는 해당 FQCN만을 사용할 수 있다.
- 두번째는
*
을 사용해서 해당 패키지에 있는 모든 class를 사용할 수 있다. - 세번째는 static을 사용한 경우이며 정적 멤버도 임포트를 할 수 있게 해준다.
클래스패스
클래스패스란, JVM이나 Java 컴파일러에 사용자정의 클래스와 해키지의 위치를 지정해주는 파라미터이다.
자바가 클래스를 찾아 사용을 해야하는데, 클래스가 어디 있는지 명확하게 위치를 지정해주는 값이다.
자바 파일이 compile이 진행되면 .class
이 되게 된다.
우리는 그 .class
을 실행해야되며 그 실행을 위해서 명확하게 java가 해당 파일이 어디있는지 지정해주어야 한다.
패키지가 있는 경우 경우 해당 패키지에 대한 경로를 명확하게 해주고 실행해야지 잘 실행된다.
-classpath 옵션
- classpath를 명확하게 지정할 수 있다.
- javac, java 모두에서 해당 옵션을 줄 수 있다.
접근지시자
멤버 변수, 메소드 들이 어디까지 접근 허용할 것인지에 대해서 지정하기 위해서 사용한다.
private
: 외부 접근은 안되며 내부에서만 호출할 수 있다.public
: 어디에서든 호출할 수 있다.protect
: 동일 패키지, 상속 받은 클래스에서 호출할 수 있다.지정 안함
: default로 판단하며 이런 경우 같은 클래스 내부와 같은 패키지에 있는 친구들은 접근할 수 있다.
라이브 방송
방송 중 내용
- FQCN (Fully Qualified Class Name): 어떤 언어를 사용하든지 들을 수 있는 용어다. (Ex.
com.hello.world.HoonMainClass
) - 빌드-인 패키지
- 클래스패쓰: jvm 다루면서 이야기 했을 것입니다.
- classpath는 컴파일, 런타임 둘 다 모두 사용할 수 있음.
- 외부 라이브러리루
- 디펜더시에 추가된 애들은 외부에서 모두 jar파일들을 가져오는 것임.
- maven, gradle 이런 친구들은 해당 라이브러리들이 어디있는지 안다. (의존성에 대해서 알고 있다. 왜냐하면 디펜더스 해서 추가하기 때문에)
- 외부 라이브러리에 들어가 있는친구들 모두 classpath에 들어간 것이다.
- 컴파일, 런타임 모두 되기 때문에 maven에서 scop이라는 것이 있어서 run-time 이런 설정이 가능하다.
- 점점 메모리가 증가한다고 했을 떄 그것은 leak이 있는 것이기 때문에 튜닝이 아닌 그 부분을 해결하는 것으로 해야됩니다.
- 튜닝. 최대한으로 어플리케이션이 메모리를 효율적으로 사용할 수 있도록 하는 것. 그것이 튜닝.
-
classpath를 환경변수로 지정해버리면 모든 프로젝트에서 해당 클래스패스를 사용해야 되기 때문에 좋지 않으니까 지우세요!
- Constant interface 를 사용해서 모든 변수를 모아두고 사용하는 경우가 있음. 이것을 별로 추천하지는 않음. (안티 패턴)
- interface에 변수를 정의하면
public static final
이 자동으로 붙음 - 해당 변수들은 interface를 정의하는 이유가 아님.
- interface는 규약을 정의하기 위해서 존재한다.
- 상수를 사용하는데 단순히 인스턴스를 만드는 작업이 진행됨.
- interface에 변수를 정의하면
8주차 과제 - 인터페이스
- 쉽고 최신 자바 버전까지 공부 하기
베스트 글 모음
https://kils-log-of-develop.tistory.com/430
https://blog.baesangwoo.dev/posts/java-livestudy-7week/
https://www.notion.so/ed8e346f88f54849a06ff968b1877ca5
https://pej4303.tistory.com/57
https://gintrie.tistory.com/67
https://ahnyezi.github.io/java/javastudy-7-package/
https://velog.io/@jaden_94/7%EC%A3%BC%EC%B0%A8-%ED%95%AD%ED%95%B4%EC%9D%BC%EC%A7%80
https://parkadd.tistory.com/45
https://github.com/dacapolife87/javaStudy/blob/main/study/week07/Week07_package.md
Leave a comment