* import
- 다른 패키지의 클래스(인터페이스)를 사용할 때 필요한 코드.
- package 선언과 class 선언 사이에 필요한 만큼 정의한다.
- 같은 패키지의 다른 클래스나 java.lang 패키지의 클래스들은 import 없이 사용할 수 있다.
- JDK 1.5에서부터는 static import가 추가되었다.
- 문법)
// 특정 패키지의 하나의 클래스를 사용할 때.
import 패키지명.클래스명;
// 패키지 내의 모든 클래스를 import할 때.
imprt 패키지명.*;
package 패키지명;
import 패키지명.클래스명;
public class 클래스명{
// import로 선언된 클래스를 사용할 수 있다.
}
package test;
import java.util.Date;
public class Test{
public void test(){
Date d = new Date();
// Test 패키지에는 Date가 존재하지 않으나 import를 받으면 존재하는 것처럼 사용할 수 있다.
}
}
- import 클래스는 소스코드에서 몇 번이든 사용 가능.
- 주의 : 패키지명이 다르고 이름이 같은 클래스(인터페이스)는 둘 중 하나만 import 가능.
- import 없이 다른 패키지의 클래스를 사용할 때는 full path를 기술하여 사용한다.
패키지명.클래스명
package test;
public class Test{
public void test(){
java.util.Date d = new java.util.Date();
// import를 사용하지 않으면 클래스를 사용할 때마다 모든 패키지를 다 기술하여 사용한다.
}
}
* static import
- JDK 1.5에서부터 지원되는 문법.
- 다른 클래스의 static 변수나 static method를 클래스명 없이 사용할 때.
- package와 class 사이에 정의.
- 문법)
-> static 변수(상수)를 사용할 때 (주의 : 클래스는 다르고 상수명이 같다면 하나만 선언 -> 선언에서는 에러가 발생하지 않고, 사용하는 코드에서 error) : import static 패키지명.클래스명.상수명;
-> static method 사용할 때 (주의 : method 기호는 붙이지 않는다.) : import static 패키지명.클래스명.method명;
- 사용법)
변수명, 상수명
method명(값)
package test;
import static java.lang.Integer.MAX_VALUE;
public class Test{
// Integer.MAX_VALUE로 써야하나 클래스명을 제외한 상수명으로만 사용 가능
MAX_VALUE
}
* 문자열 다루기
* String
- 짧은 문자열을 다룰 때 사용
- 중복 문자열을 저장하지 않는다.
- "로 시작하여 끝나는 문자열 : "안녕하세요"
* StringBuffer
- 긴 문자열을 다룰 때 사용. 중복 문자열을 저장한다.
- 연결되는 문자열 "안녕"+"하세요"
- JDK 1.1에서부터 제공, 속도 느림
- 동기화 처리 - multi-thread에서 동시접근 불가능
* String Builder
- 긴 문자열을 다룰 때 사용. 중복 문자열을 저장한다.
- 연결되는 문자열 "안녕"+"하세요"
- JDK 1.5에서부터 제공, 속도 빠름
- 동기화X - multi-thread에서 동시접근 가능
- 사용법)
// 1. 생성)
StringBuffer sb = new StringBuffer(); // 기본생성자
StringBuilder sb2 = new StringBuilder("hello");
// 2. 값 붙이기) - 값은 문자열로 붙는다.
sb.append(값);
int i = 43;
sb2.append(i);

boolean flag = true;
sb.append(flag);
sb.append("ㅇㅇㅇ");
// 3. 기존 값 사이에 값 삽입
// sb.insert(위치, 값);
sb.insert(4, " 수원시의 자랑 ");
// 4. 삭제
// sb.delete(시작인덱스, 끝인덱스+1)
sb.delete(10, 13);
// 5. 문자열 순서 변경(뒤집기)
sb2.reverse(); // => 34olleh

* StringTokenizer
- 문자열을 짧은 한 마디(token)로 자를 때 사용하는 클래스.
- java.util 패키지에서 제공(import)를 정의하여 사용.
- 문자열을 가지고 있지 않고(데이터의 크기를 모름), 문자열의 제어권만 받아서 문자열을 잘라낸다.
- 사용법)
- 대상)
String data = "자를 대상 문자열";
// 1. 생성)
StringTokenizer stk = new StringTokenizer(data); // 공백으로 토큰을 생성
StringTokenizer stk = new StringTokenizer(data, "기준문자열");
// 기준문자열로 토큰을 생성, 기준문자열은 토큰에서 제외(기준 문자열은 or 기능)
// -> 기준문자열에 해당되는 것은 모두 자른다.
StirngTokenizer stk = new StringTokenizer(date, "기준문자열", boolean);
// 기준문자열로 토큰을 생성, 기준문자열을 토큰으로 포함할 것인지를 선택
// 2. 토큰의 수) - 토큰을 얻을 때마다 줄어든다.(가변적)
int cnt = stk.countTokens();
// 3. 토큰이 존재하는지?
boolean flag = stk.hasMoreTokens();
// 4. 토큰이 있다면 값(토큰)을 얻고 포인터를 다음으로 옮기는 일
String token = stk.nextToken();
* java.util.Date
- 날짜 얻을 때 사용하는 클래스.
- 비추천 method가 많은 클래스. -> 단독으로 사용하지 않고 java.text.SimpleDateFormat 클래스와 함께 사용한다.
- import java.util.Date를 받아서 사용.
- 사용법)
// 1. 생성)
Date d = new Date();
// 2. method 호출)
// -> 비추천 method가 많아 사용하지 않는다.
* SimpleDateFormat
- 날짜를 지정된 형식으로 반환하는 일
- 사용법)
// 1. 객체생성) => 날짜를 모름
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
// pattern -> Letter를 반복시켜 사용자에게 제공하고 싶은 날짜 형식을 만든다.
// letter : 년-y, 월-M, 일-d, 오전/오후-a, 12시간-h(1~12),K(0~11), 24시간-H(0~23), k(1~24)
// 분-m, 초-s, 요일-E
// 2. method) => 일
String format = sdf.format(new Date());
// sdf객체에서 Date객체를 입력받아 현재 시스템의 원하는 날짜 정보로 반환

* 클래스 간에 관계를 설정하는 이유
=> 다른 클래스가 제공하는 기능을 사용하기 위해서!!
- is a 관계 (상속관계)
: 다른 클래스가 제공하는 기능을 내 클래스에서 정의된 것처럼 사용하기 위해. -> 자식 클래스만 생성하면 부모가 생성되기 때문에.
- has a 관계
: 다른 클래스의 객체를 받아들여 객체명으로 입력 받을 클래스의 기능을 사용하기 위해. -> 객체가 생성되고, 객체명을 계속 사용해야 한다.