패키지
: 관련있는 클래스를 묶어놓은 디렉터리 (일종의 그룹핑)
패키지.패키지.클래스 ⇒ 점으로 연결
→ 따로 관리하면 클래스 이름이 같아도 된다.
→ 하나의 응용 프로그램은 한 개 이상의 패키지
→ jar 파일로 패키지 압축 가능
→ 관련있는 멤버는 default (동일 패키지 상에서 접근 가능)
디폴트 패키지
: 패키지 선언 없이 만들어진 클래스의 패키지
모듈
: 여러 패키지와 이미지 등의 자원을 모아놓은 컨테이너
(변수와 함수를 묶어 클래스, 클래스를 묶어 패키지, 패키지를 묶어 모듈)
모듈로 묶이는 기준) 실행 환경 → 모든 클래스들을 패키지 기반에서 모듈로 재구성
⇒ 불필요한 클래스를 제외하고 하나의 런타임을 만든다.
ex. 소형기계에는 모든 패키지 필요 X → 몇 개의 클래스를 선택해 모듈화
⇒ 검토할 것이 적으니 유지 보수 쉽다, 시스템 부담 감소
import문
: 다른 패키지에 있는 클래스를 사용
java.util.* ← 패키지 내의 모든 클래스 (하위 패키지의 클래스까지 포함하지 X)
util 클래스 안에 클래스와 패키지 존재할 수 있다.
⇒ 사용 자제, 불필요한 클래스도 import 되기 때문
+) import java.* util 안에 내용 포함 X
→ 클래스이름 등 엄청 자세히 작성해야
Object 클래스
→ java.lang 패키지 아래에 있고 import를 안해도 된다
즉, 모든 클래스의 슈퍼 클래스이다, 강제 상속
→ 모든 클래스가 공통으로 가지는 객체의 속성을 가지고 있다.
→ 업캐스팅 후 찾아서 실행 ⇒ 반드시 오버라이딩 해줘야
(해주면 내가 구현한 메소드로 구현)
boolean equals(Object obj)
String toString()
Class getClass()
obj 객체와 현재 객체 비교 후 true 리턴
현 객체에 대한 문자열 표현을 리턴
현 객체의 런타임 클래스를 리턴
※ 스레드 ← 안드로이드에서 중요하게 사용
예제 6-1) 객체 비교
→ 객체의 주소 값으로 판단
→ 개발자가 내용 동일 여부를 오버라이딩해서 판단
시험문제) ==와 equals의 차이
class Point {
int x, y;
public Point(int x, int y){
this.x = x;
this.y = y;
}
public boolean equals(Object p) {
Point p = (Point) obj;
if(x == p.x && y == p.y) {
return true;
}
else{
return false;
}
}
}
public class ObjectPropertyEx {
public static void main(String [] args) {
Point p = new Point(2,3);
System.out.println(p.getClass().getName()); // 클래스 이름
System.out.println(p.hashCode()); // 해시 코드 값
System.out.println(p.toString()); // 객체의 문자열
}
}
equals를 오버라이딩해야 ← 매개 변수로 Object 객체 전달 (업캐스팅)
⇒ 함수 내에서 Point p = (Point) obj (다운캐스팅) 해줘야
Why? 다운 캐스팅을 하지 않는다면, Object 클래스로 Point의 멤버인 x와 y 접근 X
매개 변수를 object obj로 설정(업캐스팅)하면 다른 클래스에서도 오버라이딩해서 사용 가능
toString()_객체를 설명하는 문장
자식 클래스에서 반드시 오버 라이딩하여 실행
(현재는, object 클래스에서 실행 → point 클래스에서 실행할 수 있도록)
equals()나 toString()은 모든 사람이 오버라이해 사용하므로 오버라이딩 표시 X
println은 최소 4개 이상 오버로딩되어 있다.
예제 6-4) (20,1)과 (4,5)가 다른 사각형임을 판별 (예제는 넓이가 같으므로 판별 X)
Wrapper 클래스
: 자바의 기본 타입을 클래스화한 8개 클래스
배경) 기능을 추가하고 싶어 Wrapper 클래스 정의_클래스 사용하는 이유와 동일, 컬렉션에는 객체만 넣을 수 있니까 Wrapper로 기본 타입도 저장 가능 (시험 문제)
: 멤버 하나에 대한 다양한 기능, 함수를 묶어 놓을 수 있다 (패키징 가능)
⇒ 기본 타입은 값만 저장할 수 있는 반면, 값과 기능을 모두 포함해 저장 가능
특징)
생성자를 부르지 X → new 안쓴다.
클래스 이름.static 메소드로 구성 ex) Integer.valueOf(10)
→ 오버로딩되어 문자열, 숫자 등 모두 사용 가능
parseInt(문자열을 숫자로 저장)
toString(숫자를 문자로 변환)
박싱과 언박싱)
//박싱
Integer ten = Integer.valueOf(10);
//자동 박싱
Integer ten = 10;
//언박싱
int n = ten.intValue();
//자동 언박싱
int n = ten;
응용)
컬렉션 : 객체들만을 저장하는 자료구조
제네릭에 활용(타입도 매개변수로 전달)
String 클래스
StringBuffer 클래스
⇒ 문자열 변경 여부에 따라 클래스 이용
StringTokenizer 클래스
Math 클래스
Calendar 클래스