일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- 소수판정
- 예외처리
- bubble-sort
- 백준 알고리즘
- 객체지향
- jvm
- 자동 형변환
- 백준
- OOP
- HTML
- 2884
- 재귀호출기본
- 형변환 연산자
- 암호론
- lang package
- 객체
- 디렉티브
- 공개키 암호
- LANG
- 연결된 예외
- 클래스 패스
- JSP
- class
- 현대암호
- try&catch
- 프로그래밍
- BufferedWrite
- java
- 자료구조
- Today
- Total
코드일기장
[Java] 패키지, import, static import 본문
패키지
- 서로 관련된 클래스의 묶음
- 클래스는 클래스 파일(*. class), 패키지는 폴더. 하위 패키지는 하위 폴더
- 클래스의 실제 이름은 패키지를 포함한 이름이다. ex) java.lnag.String
- rt.jar는 클래스들을 압축한 파일, Java9부터 용량 문제로 사라졌다.
(참고로 jar파일은 jar.exe로 압축을 풀 수 있다.)
패키지 선언
- 패키지는 소스파일의 첫 번째 문장으로 단 한번 선언한다.
- 같은 소스 파일의 클래스들은 모두 같은 패키지에 속한다.
- 패키지 선언이 없다면 클래스들은 이름없는 패키지(default package)에 속하게 된다.
package Testpackage;
public class Main {
public static void main(String[] args) {
}
}
class Main2{
//위 클래스도 Testpackage에 속한다.
}
Main 클래스와 Main2 클래스는 Testpackage에 속한다.
import
import를 사용한다면 클래스를 사용할 때 패키지 이름을 생략할 수 있다.
class Main2{
java.util.Scanner sc= new java.util.Scanner(System.in);
}
Scanner 클래스를 사용하기 위해서는 원래는 패키지의 이름을 귀찮게 적어가면 코드를 작성했었다.
import java.util.Scanner;
class Main2{
Scanner sc=new Scanner(System.in);
}
import문을 사용하게 되면 Scanner 클래스를 사용할 때 즉 Scanner 객체를 생성할 때 패키지 이름을 import문에서 단 한번만 작성하면 모든 클래스에서 객체를 생성할 수 있게 된다.
여기서 알아야 할 것은
import문은 반드시 모든 코드들을 무시하고 맨 위에 있어야 한다. (단, package 밑)
또 한 java.lang 패키지는 java의 기본 패키지라 import문을 사용하지 않아도 얼마든지 사용할 수 있다. (ex String, System 등)
//import java.util.Objects;
//import java.util.Scanner;
import java.util.*;
class Main2 {
Scanner sc = new Scanner(System.in); //Scanner 클래스 사용
int n=sc.nextInt();
public int hashCode() {
return Objects.hash(n); //Objects 클래스 사용
}
}
그리고 java.util 패키지 안에 있는 클래스들을 Scanner 뿐만 아니라 다른 것도 다양하게 사용하게 된다면 일일이 각 클래스마다 import문으로 작성하지 않고 import java.util.*;으로 작성하면 util 패키지 안에 있는 모든 클래스들을 사용할 수 있게 된다.
다시 정리하면 import문은 반드시 모든 코드를 무시하고 맨 위에 존재해야 한다.
( 패키지문과 클래스 선언의 사이)
import 패키지명. 클래스명;
또는
import 패키지명.*; (클래스명 생략 패키지 내에 모든 클래스 사용 가능) //프로그램 성능에 영향 없다.
static import
static 멤버를 사용할 때 클래스 이름을 생략할 수 있게 해 준다.
public class Main {
public static void main(String[] args) {
double d1= 1.5;
double d2= 1.3;
double outd= d1/d2;
outd=Math.round(outd*1000)/1000.;
int num=1515;
num=(int)Math.round(num/100.0)*100;
System.out.println(outd+" "+num);
}
}
1.154 1500
static import 사용 전 코드
import static java.lang.System.out; //System.out 을 out으로만 참조가능
import static java.lang.Math.round; //Math.round 을 round으로만 참조가능
public class Main {
public static void main(String[] args) {
double d1 = 1.5;
double d2 = 1.3;
double outd = d1 / d2;
outd = round(outd * 1000) / 1000.0;
int num = 1515;
num = (int) round(num / 100.0) * 100;
out.println(outd + " " + num);
}
}
1.154 1500
static import 사용 후 코드
import static으로 System와 Math를 생략한 것을 확인할 수 있다.
'Java > OOP' 카테고리의 다른 글
[Java] 접근 제어자 (access modifier) (0) | 2022.02.20 |
---|---|
[Java] static, final, abstract의 정의 (0) | 2022.02.18 |
[Java] super, super() (객체지향 2-3) (0) | 2022.01.30 |
[Java] 단일상속, 오버라이딩 (객체지향2-2) (0) | 2022.01.26 |
[Java] 상속과 포함 (객체지향 2-1) (0) | 2022.01.20 |