필수 사용 클래스
자바에선 프로그래밍 시 자주 사용되는 기능을 API 클래스로 만들어서 제공한다.
- Object 클래스
- Wrapper 클래스
- Math 클래스
- String 클래스
- StringBuffer 클래스 & StringBuilder 클래스
- System 클래스
- Class 클래스
- java.util 패키지의 클래스
- 참조 타입 배열과 객체를 리턴하는 메서드
- 열거 타입
- has-a 관계 클래스
Object 클래스
정의 : 모든 클래스의 최상위 클래스(root class)
- java.lang 패키지에 위치
- 명시적으로 구현하지 않으면 컴파일 시 클래스가 자동으로 상속받는다.
- Object 클래스의 멤버는 모든 클래스에서 사용 가능
Object에서 제공하는 메서드들
- protected Object clone() : 객체 자신을 복사한 후에 리턴
- boolean equals(Object obj) : 객체들의 실제 값을 비교
- public String toString() : 객체를 문자열로 표현 (기본은 클래스명@해시코드)
- protected void finalize() : 객체 자신에 대해 더 이상 참조할 경우가 없을 때 garbage colelctor에 의해 호출된다.
- Class<?>getClass() : 객체 자신의 클래스명을 얻는다.
- int hashCode() : 객체 자신의 해시 코드를 얻는다.
- void notify() : 대기 상태의 스레드에게 실행 준비를 알린다.
- void wait() : 다른 스레드가 notify()나 notifyAll()를 호출할 때까지 현재 실행하는 스레드를 대기 상태에 머물게 한다.
참고로java.lang 패키지 핵심 클래스들
- Object(모든 클래스의 조상)
- String/StringBuilder/StringBuffer (문자열 처리)
- Math, System (유틸리티)
- Wrapper (Integer, Double 등)
- Throwable/Exception/Error (예외 처리)
- Thread/Runnable (멀티스레딩)
- 기타 : Runtime, Enum, Class
equals() 메서드
- 기본 타입 데이터 값 비교 : ==
- 참조 타입 데이터 값 비교 : equals() (==는 위치값이 같은지 비교)
- Object 클래스의 equals() 메서드는 ‘==’으로 구현되어 있다.
- 참조 데이터 비교 시 위치값이 비교된다.
- 실제 값을 비교하려면 메서드를 오버라이딩 해야한다.
- 대부분의 API 클래스는 미리 equals() 메서드를 오버라이딩해서 제공한다.
예를 들어 Student 클래스에서 name과 grade를 동시에 비교하는 equals()메서드를 오버라이딩하고 싶다
→
public class Student {
String name;
int grade;
// ...
@Override
public boolean equals(Object obj) {
boolean result = false;
if (obj instanceof Student) {
Student s = (Student)obj;
if(name.equals(s.name)&& (grade == s.grade)) {
result = true;
}
}
}
}
- equals 메서드를 오버라이딩하며 Object obj 객체를 받는다.
- result 값는 false 디폴트
- obj가 Student의 인스턴스 일때 obj 다운캐스팅
- 이름 비교(equals), 점수 비교(==) 둘 다 맞으면 true
toString() 메서드
예를 들어 객체의 필드값을 한꺼번에 출력해야할 경우 toString() 사용
- Object 클래스에서 제공
- 인스턴스의 필드 정보를 문자열로 출력
- 참조 타입 변수를 println() 메서드에 전달하면 자동으로 toString() 메서드가 호출된다.
근데 Object 클래스의 toString() 메서드의 실제 기능은 클래스 객체의 클래스명과 객체의 해시코드를 출력하는 기능이다
→ 본 형태는 “클래스명@해시코드”
즉 형식만 선언되어 있을 뿐 필드값을 출력하진 않는다.
상황에 맞게 오버라이딩하여 사용한다.
+) 해시코드(hashCode) : 클래스 객체 생성 시, JVM이 클래스 객체에 부여하는 고유 번호
예를 들어, toString() 메서드를 오버라이딩하지 않고 사용했을 때


출력값 : 클래스명과 해시코드가 출력된다.
sec01.ex04.Student@6576fe71
sec01.ex04.Student@6576fe71
오버라이딩 했을 때
+
@Override
public String toString() {
String info = "이름: " + name + ", 학년: " + grade;
return info;
}
→
출력값
이름: 이순신, 학년: 24
이름: 이순신, 학년: 24
Clone() 메서드
Object 클래스의 clone() 메서드는 실행 중 생성된 클래스 객체를 따로 복사(깊은 복사)하는 기능을 제공
기본적으로 clone()을 그냥 이용하면 얕은 복사 (Shallow copy)가 된다.
+) 예외로 Array의 경우 clone()메서드를 바로 사용해도 deep copy가 된다.
+) Arrays.copyOf(), copyOfRange() 메서드도 deep copy
깊은 복사를 위한 3가지 조건
- Cloneable 인터페이스를 implements하기
- clone() 메서드를 override 하기
- try-catch 구문을 이용해 CloneNotSupportedException 던지기
예제


출력값
이름: 이순신, 학년: 3
이름: 이순신, 학년: 3
이름: 이순신, 학년: 2
이름: 이순신, 학년: 3
값 변경을 공유하지 않는다 → 깊은 복사가 된다.
- Student 클래스는 Cloneable 인터페이스 구현
: “ 이 클래스는 clone()을 사용할거다”라는 신호를 컴파일러에게 준다.
만약 구현하지 않으면 CloneNotSupportedException이 발생 - Cloneable을 구현하는 것만으로는 예외가 없어지지 않는다. 호출하는 쪽에서 반드시 예외 처리(try-catch 또는 throws)
Wrapper 클래스
기본 타입 데이터 별로 편리한 기능을 제공하는 클래스
+) 자바에선 8가지 기본 타입 데이터 제공됨.
| 기본 타입 데이터 | 래퍼 클래스 |
| boolean | Boolean |
| byte | Byte |
| char | Character |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
Integer 클래스
Integer 래퍼 클래스

실행 결과

+)그 밖의 Integer 클래스의 여러 메소드들
- int intValue() : Integer 객체의 갑슬 정수값으로 리턴
- long longValue() : Integer 객체의 값을 long 데이터로 변환하여 리턴
- static int max(int a, int b) : 두 정수 중 큰 값을 리턴
- static int min(int a, int b) : 두 정수 중 작은 값을 리턴
- static int parseInt(String s) : 문자열을 정수로 변환한 후 리턴
- static String toBinary(int a) : 정수를 2진수로 변환한 후 문자열로 리턴
- static String toHexString(int a) : 정수를 16진수로 변환한 후 문자열로 리턴
- static String toOctalString(int a) : 정수를 8진수로 변환한 후 문자열로 리턴
Float 클래스도 마찬가지
Float.MAX_VALUE
Float.parseFloat(…)
Float.toString(…)
Math 클래스
java.lang.Math 클래스 : 정적 메서드로 객체 생성 없이 바로 사용
상수
- static final double E : 자연 지수 e의 값
- static final double PI : 원주율 파이값
메서드
- static double abs(double a) : a의 double 타입 절대값을 리턴
- static int abs(int a) : a의 int 타입 절대값을 리턴
- static double ceil(double a) : a보다 큰 정수 중 가장 작은 정수를 double 타입 실수로 리턴
- static double floor(double a) : a보다 작은 정수 중 가장 큰 정수를 double 타입 실수로 리턴
- static double max(double a, double b) : 두 수 중 큰 값을 리턴
- static double min(double a, double b) : 두 수 중 작은 값을 리턴
- static double pow(double a, double b) : a의 b 제곱(power)의 값을 리턴
- static double random() : 0.0에서 1.0 사이의 난수를 리턴
- static long round(double a) : a의 소수점 아래의 수를 반올림한 후 long 타입 정수로 리턴
- static double sqrt(double a) : a의 제곱근을 리턴
Math 클래스 예제

실행결과

Random 클래스
지금까지는 Math 클래스의 random() 메소드를 사용해왔다.
자바는 따로 java.util 패키지에 있는 Random 클래스로 더 많은 난수 기능 제공
생성자
- Random() : 디폴트 생성자. 현재 시간을 초깃값으로 하는 난수 발생기 객체를 생성
- Random(long seed) : long 타입의 seed값을 매개변수로 받아 객체를 생성
메서드
- boolean nextBoolean() : boolean 타입의 난수를 리턴
- double nextDouble() : double 타입의 난수를 리턴
- float nextFloat() : float 타입의 난수를 리턴
- int nextInt() : int 타입의 난수를 리턴
- long nextLong() : long 타입의 난수를 리턴
- int nextInt(int bound) : 0과 한계값(bound) 사이(한계값은 미포함)의 난수를 리턴
Random 클래스 예제

실행 결과
755473468
2
5
0.2642843929746739
false
3
'멀티캠퍼스-JAVA 풀스택 > JAVA' 카테고리의 다른 글
| Java 기초(10) - util 클래스와 객체 리턴 (0) | 2025.12.17 |
|---|---|
| Java 기초(9)-필수 사용 클래스(String과 그 외) (0) | 2025.12.12 |
| Java 기초(7) - 인터페이스 (0) | 2025.11.25 |
| Java 기초(6)- 객체지향(2) (0) | 2025.11.18 |
| Java 기초(5) - 객체 지향 (0) | 2025.11.12 |