ch 7-15,16 import문, static import문
import문
- 클래스를 사용할 때 패키지이름을 생략할 수 있다.
- 컴파일러에게 클래스가 속한 패키지를 알려준다.
Ex) class ImportTest { import java.util.Date
java.util.Date today = new java.util.Date(); --> class ImprotTest {
// .... Date today = new Date();
} }
- import문이 있어서 Date에 java.util을 사용하지 않아도 Ok!
- 이클립스 단축키 (ctrl + shift + o)
- java.lang패키지의 클래스는 (기본 패키지이기 때문에) import하지 않고도 사용할 수 있다. (String, Object, System, Thread ...)
- 원래는 Stirng과 System에도 import문이 있어야 한다. (*은 패키지 안의 모든 클래스를 의미한다.)
- 그러나, 기본 패키지는 많이 사용하기 때문에 매 번 사용하지 않도록 생략 가능하다.
import문의 선언
- import문을 선언하는 방법은 다음과 같다.
import 패키지명.클래스명;
또는
import 패키지명*; // (*은 패키지에 속한 모든 클래스를 의미한다.)
- import문은 패키지문과 클래스선언의 사이에 선언한다.
- 패키지 선언 -> 2. import문 -> 3. 클래스 순서로 와야한다.
- import문은 컴파일 시에 처리되므로 프로그램의 성능에 영향없음.
import java.util.Calendar;
import java.util.Date; --> import java.util.*; // java.util 패키지의 모든 클래스를 의미
import java.util.ArrayList;
import java.util.*; --> import java.*; // java 패키지의 모든 클래스를 의미(패키지는 포함안됨.)
import java.text.*;
- 이름이 같은 클래스가 속한 두 패키지를 import할 때는 클래스 앞에 패키지명을 붙여줘야 한다.
static import문
- static멤버를 사용할 때 클래스 이름을 생략할 수 있게 해준다.
- static import문을 사용하게 되면, Math.random에서 Math를 생략할 수 있게 된다.
Ex) Syste.out.println(Math.random()); --> out.println(random());
- Math 클래스의 모든 staic멤버를 클래스 이름 없이 사용가능!
- System과 Math 생략 가능!
ch 7-17~20 제어자, static,final,abstract
제어자(modifier)
- 클래스와 클래스의 멤버(멤버변수, 메서드)에 부가적인 의미 부여(형용사의 역할)
- 접근 제어자 : public, protected, (default), private // 4개 중 1개만 사용 가능
- 그 외 : static, final, abstract, naive, transient, synchronized, volatile, strictfp
- 하나의 대상에 여러 제어자를 같이 사용가능(접근 제어자는 하나만)
- 순서는 상관없지만, 접근 제어자를 제일 왼쪽에 사용한다.
static - 클래스의, 공통적인
- 인스턴스멤버 = iv(인스턴스 변수) , im(인스턴스메서드)
- static은 iv 앞에 붙어 cv가 된다.
- 클래스 초기화 블럭 = 복잡한 초기화를 수행한다. / static {복잡한 초기화 코드}
- 메서드 앞에 붙일 수 있다. (iv 사용불가 / 인스턴스 메서드 사용 X)
- iv멤버들은 객체생성 후 사용할 수 있다.
- static과 cv는 객체생성 없이 사용 가능 but 객체를 필요로 하는 iv와 인스턴스 메서드를 사용 불가
final - 마지막의, 변경될 수 없는
- final은 전부 다 붙을 수 있다.
- 클래스의 마지막에 final이 붙으면 변경될 수 없는 클래스(=확장될 수 없는 클래스 = 조상이 될 수 없는 클래스)가 된다. (= 상속계층에서 제일 마지막이 된다.) -String / Math 클래스가 대표적
- 변수 앞에 final이 붙으면 상수가 된다.
- 메서드 앞에 final이 붙으면 변경불가한 메서드가 된다. (오버라이딩 할 수 없다. = 조상 메서드를 덮어쓸 수 없다.)
abstract - 추상의, 미완성의
- abstract는 클래스와 메서드 앞에만 붙을 수 있다.
- 몸통 {}이 없는 메서드는 미완성 메서드(선언부는 있으나, 구현부가 없음)로 추상 메서드라 하고, 앞에 abstract를 붙인다.
- 추상 메서드를 가진 클래스는 미완성 클래스로, 추상 클래스라 한다.
- 추상 클래스는 미완성 상태이므로 인스턴스(객체) 생성불가
Ex) AbstractTest a = new AbstractTest(); // 에러. 추상 클래스의 인스턴스 생성불가
- 추상 클래스를 상속받아서 완전한 클래스(구상 클래스)를 만든 후에 객체 생성가능