JAVA/Basic

[스터디할래? Java 07]패키지

[스터디할래? Java] 목차

이글은 백기선님 스터디 할래? 스터디를 뒤늦게 따라간 기록입니다.

스터디할래 링크 >> https://github.com/whiteship/live-study

이필기를 시작으로 공부했습니다 >>  https://kils-log-of-develop.tistory.com/430

                                                https://sangwoobae.github.io/posts/java-livestudy-7week/

여기 없는내용은 스터디 할래 강의 내용 혹은 제가 java Doc보고작성하거나 예제를 만들어 추가했습니다.

그외는 같이 출처가 써있습니다. 

package 키워드 패키지 이름은 java로 시작하면안된다. 
소스 첫줄, 
폴더이름과 패키지 이름이 같아야
FQCN : Fully Qualified Class Name : 패키지이름과 정의된 클래스 모 표현되야 정확한 표현
ex) java.lang.String
FQCN  FQCN : Fully Qualified Class Name : 패키지이름과 정의된 클래스 모 표현되야 정확한 표현
패키지이름 규칙 java : 자바기본 패키지
javax : 자바 확장패키지
org : 비영리단체(오픈소스) 패키지
com : 영리단체(회사) 패키지

패키지 이름은 모두 소문자. 
자바 예약어 사용불가

빌트인 패키지 : 자바는 개발자들이 사용하는 패키지, 클래스 제공
ex) import java.lang.System, import java.lang.String
import 키워드 import 패키지*  사용가능. 
import static 

* import 하지 않아도 되는 패키지
java.lang, 같은패키지
접근제어자 public            누구나 접근
protected       같은패키지, 상속받은경우
private-package  = default  : 같은패키지내
private            해당클래스내 
클래스 패스 JVM이 프로그램 실행할때 클래스파일을 찾는데 기준되는 파일경로. 
- java runtime -classpath 
- javac -classpath
- 환경변수 CLASSPATH  안하는쪾으로..개발할때 라이브러리 꼬일수있음. 
CLASSPATH=
클래스 패스 옵션은 언제 쓸수 있나? 둘다 or javac or java   >> 둘다 쓸수 있다. 
cf)
maven pom.xml scop- runtime, provied.. 의존성설정 관련되어있다고함. 
클래스 로더.  java 에 3가지 기본 클래스 로더 존재
Bootstrap class loader
: 최상위 클래스 로더, jre/lib/rt.jar 에 담긴 JDK 클래스 파일 로딩
: 원시 클래스 로더 : Primordial ClassLoader
Extension class loader
: jre/lib/ext , java.ext.dirs 로 지정된 클래스파일 로딩. 
Application class loader
: classpath 나 jar 파일 안에 있는 Manifest파일의 class-path 속성값으로 지정된 폴더의 클래스 로딩
: 자가 애플리케이션 구동을 위해 직접 작성한 대부분클래스는 애플리케이션 클래스 로더에 의해로딩

동작 3원칙
1. 위임 : 클래스 로딩 작업을 상위 클래스 로더 위임
2. 가시범위 원칙 : 하위클래스 로더 상위클래스로더 볼수 있지만 상위는 하위클래스로더 로딩 볼수없음
3. 유일성 원칙 : 하위 클래스로더는 상위 클래스 로더가 로딩한 클래스를 다시로딩하지 못함

https://umanking.github.io/2019/06/25/java-class-loader/#:~:text=%E2%80%BB%20rt.jar%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%EB%9E%80,%EC%8B%9C%EC%97%90%20%EB%A9%94%EB%AA%A8%EB%A6%AC%EC%97%90%20%EC%98%AC%EB%A6%B0%EB%8B%A4.
rt.jar RunTime
코어 자바클래스의 콜렉션, 
JVM 에서 rt.jar 파일에 담긴 클래스 파일을 런타임때 메모리에 올림. 
String, System 클래스가 rt.jar 안에 있음. 
Built-in 패키지 패키지 = 사용자정의패키지 + 빌트인패키지
java.lang : 프리미티브타입, String
java.io : 입출력
java.util : 자료구조  Linked, Dictionary Time, Date
java.applet : Applets 생성
java.awt :  GUI 컴포넌트를 구현하기 위한 클래스들을 포함하는 패키지
java.net : 네트워킹 지원 
https://ahnyezi.github.io/java/javastudy-7-package/
   
   

테스트 주도개발 저자 켄트 벡|역자 김창준, 강규영|인사이트

maven or gradle 반드시 공부할것. 

java9 부터 모듈화가 많이됨.

클래스로더 계층구조.

부트스트랩: 최상단 

1. 부모한테 있는가?

2. 부모한테 없으면 자기가 읽음. 

보통 최상단 rt.jar에 java.lang을 읽어둠. 

 

heap 사이즈는 기본적으로 다이나믹. min max... 똑같이 썼었다.....요즘도...

java실행중 max 조정하는방법? 메모리누수.....그걸고칩시다.>> 실행할때 정해짐. 

튜닝 : 애플리케이션이 최대한으로 쓸수있는 heap을 찾는 과정. 

 

https://www.geeksforgeeks.org/java/?ref=ghm

 

Constant Interface  >> 쓰지마세용...

---------------------------------------

public interface Constats{

  int NUMBER = 100;

  String NAME = "NAME";

}

public class myBook implements Constants{

  private static final String NAME ="";

]

}

-----------------------------------------

>> 1. anti patten. : 인터페이스가 존재하는 목적이 아님. 규약 정하는게 목적. 

>> 2. 상수를 갖고 인스턴스를 만들게됨. 

인터페이스는 기본적으로 public static 이 써있음. .

public class Constants{

  public static final int NUMBER=100;

   private Constants(){}  // 생성못하게 막음. 

}

!! ENUM >> 선택가능한값 고정할때!!!

JPA.. 쿼리 DSR 

--------------------------------------------

import를 구체적 or 포괄적 ... 설정...  java > import > Class.... 999 이렇게 넣으면 패키지.* 사용하지 않음(명시적)

 

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