7장. 패키지

2 minute read

목표

자바의 패키지에 대해 학습하세요. 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는 규약을 정의하기 위해서 존재한다.
    • 상수를 사용하는데 단순히 인스턴스를 만드는 작업이 진행됨.

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