| 백기선님의 자바 라이브 스터디 7주차 주제
패키지란?
자바에서 패키지는 클래스나 인터페이스를 구분짓는 폴더(디렉토리) 개념입니다. 우리가 D드라이브 → 사진 폴더 → 음식 or 인물 등등 구분지어서 정리하듯이 묶어서 관리하는데 사용됩니다. 위의 예시를 굳이 패키지스럽게 표현하자면 D.사진.음식 이런 느낌이겠네요.
package com.example;
소스에서 가장 맨 윗줄에 위치하고 있으며 딱 한 줄만 필요합니다. 패키지 이름과 소스 코드가 위치한 폴더의 이름이 동일해야합니다. 따라서 중간에 패키지 이름(폴더 이름)을 변경한 경우 소스 코드에서도 수정이 필요합니다.
패키지 이름은 java로 시작해서는 안된다고 합니다. 아마도 java나 javax라는 패키지가 자바 기본(확장) 패키지라서 그런가봅니다. 모든 클래스에는 정의된 클래스 이름과 패키지 이름이 있습니다.
클래스 이름 + 패키지 이름 = 완전하게 한 클래스를 표현
위의 식은 FQCN(Fully Qualified Class Name)을 의미합니다. 이게 무슨 말인고~ 하니~ com.example.controller에 UserController라는 클래스를 만들었다고 해볼게요. 그러면 com.example.controller.UserController가 FQCN이 되는거죠. FQCN이라는 복잡해보이는 용어와는 달리 간단한 내용이었습니다.
패키지명 짓는 규칙
변수명을 짓는 규칙처럼 패키지명도 예약어를 사용해서를 안됩니다. 또한 패키지명은 소문자로 적어야한다고 하더라구요. 그냥 소문자가 편해서 여태껏 그렇게 작성했는데 저도 모르게 정석을 잘 따라가고 있었군요.
import문
무의식적으로 사용하는 import문에 대해서 깊게 생각해본 적이 없는데 이번 기회에 다뤄보겠네요. package 키워드는 지금 작성중인 소스 코드의(클래스나 인터페이스 등) 현재 위치를 표현하는거라면 import문은 다른 패키지의 클래스를 불러올때 사용합니다.
import 패키지명.클래스명;
사실 IDE를 쓰면 Alt+Enter 같은 단축키를 이용하면 알아서 import 해줍니다.
음 특이한건 제가 Test code 작성시에 assertj를 사용하면서 본 static이란게 있습니다. import static의 경우, static한 변수( 클래스 변수)와 static한 메소드를 사용하고자 할때 사용됩니다. 원래는 클래스.함수, 클래스.변수 형태로 이용해야하는데 static을 붙여주면 딱 함수명이나 변수명으로만 사용가능해요.
예시
import static org.assertj.core.api.Assertions.assertThat;
assertThat(posts.getTitle()).isEqualTo(title);
import static org.assertj.core.api.Assertions;
Assertions.assertThat(posts.getTitle()).isEqualTo(title);
참고로 다른 패키지에 있는 클래스를 참조해야할때 import를 사용한다고 했잖아요? 그래서 같은 패키지는 당연히 import문을 사용할 필요가 없구요. java.lang 패키지도 import문을 안써도 된다고 하네요.
클래스패스
JVM이 프로그램을 실행할 때 클래스를 찾기 위한 기준이 되는 경로
소스 코드를 컴파일하면 바이트 코드로 변환이 되고 java runtime이 이 명령(바이트 코드에 있는 명령)을 실행합니다. 그런데 실행을 하려면 실행 대상이 있는 위치를 알아야 하잖아요. 실행 대상의 확장자는 .class 파일이고 얘를 찾기 위해 클래스패스에 등록된 경로를 이용합니다.
클래스패스를 지정하지 않으면 기본적으로 현재의 위치가 클래스패스로 지정됩니다. 클래스 패스를 설정하는 방법으로는 CLASSPATH 환경변수를 사용하는 방법과 -classpath 옵션을 사용하는 방법 두 가지가 있습니다.
환경 변수 이용
파일 탐색기에서 내PC 우클릭 -> 속성 -> 고급 시스템 설정 -> 환경 변수를 차례대로 선택해주세요.
시스템 변수 새로 만들기를 통해서 변수 이름에는 CLASSPATH 변수 값에는 jdk 폴더 경로\lib 를 입력해줍시다. 아니면 JAVA_HOME 변수가 있으신 분들은 이렇게 응용도 가능하죠.
classpath 옵션
옵션의 경우 cmd 창이나 터미널에서 조작하는 방식입니다.
javac -classpath 추가대상 HelloWorld.java(컴파일 대상)
참고
'Java' 카테고리의 다른 글
[Java] 예외처리 (0) | 2021.05.18 |
---|---|
[Java] 인터페이스에 대하여 (0) | 2021.05.10 |
객체지향 프로그래밍이란? (0) | 2021.04.30 |
[JAVA] 자바 상속 (0) | 2021.04.26 |
테스트 코드 작성 범위 (0) | 2021.04.21 |