일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- java final 키워드
- 티스토리챌린지
- javascript
- 창의적도구
- 오블완
- javatime
- binraytree
- java 메서드 오버라이딩
- javautil패키지
- java 애노테이션
- 생성형AI
- ai활용법
- 화살표연산자
- java 추상 클래스
- import 키워드
- java 제네릭
- java 패키지
- java objact클래스
- Java 자료구조
- java 람다식
- java super메소드
- asyncawait
- JAVA데이터타입
- this키워드
- java반복문
- java스터디
- gpt활용팁
- java_this
- java 이진트리
- java
- Today
- Total
코딩쿠의 코드 연대기
Java) 기본 API클래스 본문
학습목표
- API란?
- Object 클래스
- 문자열 클래스
- Wrapper 클래스
- Random 클래스
API란?
API: Application Programming Interface, 자바에서개발자들을위해기본적으로제공하는클래스
https://docs.oracle.com/javase/8/docs/api/index.html
Object 클래스
Java에서 Object 클래스는 모든 클래스의 최상위 부모 클래스입니다. 즉, Java에서 생성하는 모든 클래스는 암시적으로 Object 클래스를 상속받습니다.
Object 클래스의 특징
- 모든 클래스의 조상: 모든 클래스는 직접적으로든 간접적으로든 Object 클래스를 상속받습니다. 즉, Object 클래스의 모든 메서드와 속성을 물려받습니다.
- 기본적인 메소드 제공: 객체의 생성, 비교, 해시 코드 생성, 문자열 표현 등 객체 조작에 필요한 기본적인 메서드를 제공합니다.
- 다형성 지원: Object 타입의 변수는 어떤 객체든 참조할 수 있어 다형성을 구현하는 데 중요한 역할을 합니다.
Object 클래스의 주요 메소드
메소드설명
toString() | 객체를 문자열로 표현합니다. |
---|---|
equals(Object obj) | 현재 객체와 지정된 객체가 같은지 비교합니다. |
hashCode() | 객체의 해시 코드를 반환합니다. |
getClass() | 객체의 클래스 정보를 반환합니다. |
clone() | 객체의 복사본을 생성합니다. |
finalize() | 객체가 가비지 컬렉션되기 전에 호출됩니다. |
notify() | 객체를 기다리는 하나의 스레드를 깨웁니다. |
notifyAll() | 객체를 기다리는 모든 스레드를 깨웁니다. |
wait() | 현재 스레드가 다른 스레드가 notify() 또는 notifyAll() 메소드를 호출할 때까지 기다리도록 합니다. |
wait(long timeout) | 지정된 시간 동안 또는 다른 스레드가 notify() 또는 notifyAll() 메소드를 호출할 때까지 현재 스레드가 기다리도록 합니다. |
wait(long timeout, int nanos) | 지정된 시간 동안 또는 다른 스레드가 notify() 또는 notifyAll() 메소드를 호출할 때까지 현재 스레드가 기다리도록 합니다. |
Object 클래스 활용
- 메소드 오버라이딩: toString(), equals(), hashCode() 등의 메서드는 클래스의 특성에 맞게 재정의하여 사용할 수 있습니다.
- 다형성: Object 타입의 변수는 어떤 객체든 참조할 수 있으므로, 다양한 타입의 객체를 동일한 방식으로 처리할 수 있습니다.
- 객체 비교: equals() 메서드를 사용하여 객체의 내용을 비교할 수 있습니다.
- 해시 기반 컬렉션: hashCode() 메서드는 해시 기반 컬렉션 (HashMap, HashSet 등)에서 객체를 저장하고 검색하는 데 사용됩니다.
Object 클래스 예시
Java
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
위 예시에서는 Person 클래스가 Object 클래스의 toString(), equals(), hashCode() 메서드를 오버라이딩하여 Person 객체의 특성에 맞게 재정의했습니다.
Object 클래스는 Java 클래스 계층 구조의 뿌리이며, 모든 객체의 공통적인 동작을 정의합니다. Java 프로그래밍에서 매우 중요한 역할을 하므로, 그 기능과 활용법을 이해하는 것이 중요합니다.
문자열 클래스
Java 문자열 클래스(String Class)
Java에서 문자열은 String
클래스를 통해 제공되며, 문자열 데이터를 다루는 데 필수적인 역할을 합니다. 문자열은 변경 불가능한 객체(immutable object)로 설계되었으며, 다양한 메서드와 기능을 제공합니다.
문자열의 특징
- 불변성(Immutable):
String
객체는 한 번 생성되면 변경할 수 없습니다.- 문자열을 수정하는 작업은 새로운 문자열 객체를 생성합니다.
- String Pool:
- 문자열은 String Pool이라는 메모리 영역에 저장됩니다.
- 동일한 문자열 리터럴이 생성될 경우, 기존 문자열을 재사용하여 메모리 사용량을 줄입니다.
- 객체 비교:
==
연산자는 참조 비교를 수행합니다..equals()
메서드는 문자열의 내용을 비교합니다.
문자열 생성 방법
- 리터럴 방식:
String str1 = "Hello"; String str2 = "Hello"; // str1과 str2는 같은 객체를 참조
- new 키워드를 사용:
String str3 = new String("Hello"); // 새로운 객체 생성
String 클래스 주요 메서드
- 문자열 길이 반환:
String str = "Hello"; int length = str.length(); // 5
- 문자 추출:
char ch = str.charAt(1); // 'e'
- 부분 문자열 추출:
String substr = str.substring(1, 4); // "ell"
- 문자열 비교:
boolean isEqual = str.equals("Hello"); // true boolean isIgnoreCase = str.equalsIgnoreCase("hello"); // true
- 문자열 연결:
String str2 = str.concat(" World"); // "Hello World"
- 대소문자 변환:
String upper = str.toUpperCase(); // "HELLO" String lower = str.toLowerCase(); // "hello"
- 공백 제거:
String trimmed = str.trim(); // 양쪽 공백 제거
- 문자열 포함 여부:
boolean contains = str.contains("ell"); // true
- 문자열 치환:
String replaced = str.replace('e', 'a'); // "Hallo"
- 문자열 분리:
String[] parts = "Java,Python,C".split(","); // {"Java", "Python", "C"}
- 문자열 시작/끝 확인:
boolean starts = str.startsWith("He"); // true boolean ends = str.endsWith("lo"); // true
String vs StringBuilder vs StringBuffer
특징 | String | StringBuilder | StringBuffer |
---|---|---|---|
불변성 | 불변 | 가변 | 가변 |
스레드 안전성 | 비스레드 안전 | 비스레드 안전 | 스레드 안전 |
속도 | 느림 | 빠름 | 상대적으로 느림 |
예제
- String Pool 확인:
String str1 = "Java"; String str2 = "Java"; String str3 = new String("Java"); System.out.println(str1 == str2); // true (String Pool) System.out.println(str1 == str3); // false (다른 객체) System.out.println(str1.equals(str3)); // true (내용 비교)
- 문자열 처리 예제:
String text = " Hello Java "; String result = text.trim().toUpperCase().replace("JAVA", "World"); System.out.println(result); // "HELLO WORLD"
문자열 클래스의 장점
- 간결한 문자열 처리:
내장 메서드를 활용해 다양한 문자열 작업을 쉽게 처리할 수 있습니다. - 불변성의 안전성:
멀티스레드 환경에서 데이터 무결성을 보장합니다. - 효율적인 메모리 관리:
String Pool을 사용해 중복 객체 생성을 방지합니다.
Wrapper 클래스
Java Wrapper 클래스(Wrapper Class)
Java에서 Wrapper 클래스는 기본 데이터 타입(Primitive Data Type)을 객체(Object)로 변환하거나 객체를 기본 타입으로 변환할 수 있도록 도와주는 클래스입니다. 이러한 변환 과정을 Boxing과 Unboxing이라고 하며, Java 5부터는 이를 자동으로 처리하는 Autoboxing과 Auto-unboxing 기능이 추가되었습니다.
기본 타입과 Wrapper 클래스의 매핑
기본 타입(Primitive Type) | Wrapper 클래스(Wrapper Class) |
---|---|
byte |
Byte |
short |
Short |
int |
Integer |
long |
Long |
float |
Float |
double |
Double |
char |
Character |
boolean |
Boolean |
Wrapper 클래스의 주요 특징
- 객체화:
기본 데이터 타입을 객체로 다룰 수 있습니다.
예: 컬렉션 프레임워크(예:ArrayList
)에서 기본 타입 대신 객체를 사용해야 할 때 유용합니다. - Immutable:
Wrapper 클래스는 모두 불변(Immutable) 객체입니다. 값을 변경할 수 없으며, 새로운 값을 할당하면 새로운 객체가 생성됩니다. - 유용한 메서드 제공:
Wrapper 클래스는 숫자 변환, 문자열 변환 등의 작업을 쉽게 처리할 수 있도록 다양한 메서드를 제공합니다.
Boxing과 Unboxing
- Boxing:
기본 타입을 Wrapper 객체로 변환하는 과정입니다. int num = 10; Integer boxedNum = Integer.valueOf(num); // Boxing
- Unboxing:
Wrapper 객체를 기본 타입으로 변환하는 과정입니다. Integer boxedNum = Integer.valueOf(10); int num = boxedNum.intValue(); // Unboxing
- Autoboxing & Auto-unboxing:
Java 5부터는 Boxing과 Unboxing을 컴파일러가 자동으로 처리합니다. int num = 10; Integer boxedNum = num; // Autoboxing int unboxedNum = boxedNum; // Auto-unboxing
Wrapper 클래스 주요 메서드
- 문자열로 변환:
int num = 100; String str = Integer.toString(num); // "100"
- 문자열을 숫자로 변환:
String str = "123"; int num = Integer.parseInt(str); // 123
- 값 비교:
Integer num1 = 10; Integer num2 = 10; System.out.println(num1.equals(num2)); // true
- 최소값/최대값 상수:
System.out.println(Integer.MIN_VALUE); // -2147483648 System.out.println(Integer.MAX_VALUE); // 2147483647
- 기본 값 가져오기:
Integer boxedNum = Integer.valueOf(20); int num = boxedNum.intValue(); // 20
Wrapper 클래스의 활용 예
- 컬렉션 프레임워크에서 기본 타입 사용:
ArrayList<Integer> numbers = new ArrayList<>(); numbers.add(10); // Autoboxing numbers.add(20); System.out.println(numbers.get(0)); // Auto-unboxing
- 기본 타입의 유틸리티 메서드 활용:
String binary = Integer.toBinaryString(10); // "1010" String hex = Integer.toHexString(255); // "ff"
- 문자열 변환 및 비교:
String str = "50"; int value = Integer.parseInt(str); if (value > 30) { System.out.println("Value is greater than 30"); }
Wrapper 클래스의 장점
- 객체 지향적 프로그래밍 지원:
기본 타입을 객체로 변환해 컬렉션 프레임워크와 같은 객체 지향적 환경에서 활용할 수 있습니다. - 유틸리티 메서드 제공:
문자열 변환, 형 변환 등 기본 타입으로는 수행할 수 없는 다양한 작업을 쉽게 처리할 수 있습니다. - 코드 간결화:
Autoboxing과 Auto-unboxing을 통해 코드 작성이 간단하고 직관적입니다.
주의할 점
- 비교 시 == 사용 주의:
Wrapper 객체는 기본 타입처럼==
로 비교하면 참조 비교를 수행하므로,.equals()
를 사용해 값을 비교해야 합니다.Integer num1 = 128; Integer num2 = 128; System.out.println(num1 == num2); // false System.out.println(num1.equals(num2)); // true
- 성능 문제:
Boxing과 Unboxing 과정에서 불필요한 객체 생성이 발생할 수 있으므로 반복문에서 주의해야 합니다.for (Integer i = 0; i < 1000; i++) { // Autoboxing으로 객체가 계속 생성됨 // ... }
Random 클래스
Java Random 클래스
Java에서 Random
클래스는 난수를 생성하는 데 사용됩니다. 이 클래스는 java.util
패키지에 포함되어 있으며, 다양한 타입의 난수를 생성할 수 있는 메서드를 제공합니다.
Random 클래스의 주요 특징
- 난수 생성:
int
,long
,float
,double
,boolean
등 다양한 타입의 난수를 생성할 수 있습니다. - 재현 가능성:
Random
객체는 시드(Seed) 값을 기반으로 난수를 생성하므로 동일한 시드 값을 설정하면 항상 동일한 난수를 생성합니다. - ThreadLocalRandom 및 SecureRandom과의 차이:
Random
클래스는 일반적인 난수 생성에 적합하며, 더 높은 보안이나 성능이 필요한 경우SecureRandom
또는ThreadLocalRandom
을 사용할 수 있습니다.
Random 클래스 생성
- 기본 생성자:
시스템 시간을 기반으로 시드 값을 설정합니다. Random random = new Random();
- 사용자 정의 시드:
동일한 시드 값을 사용하면 동일한 난수를 생성합니다. Random random = new Random(42);
Random 클래스 주요 메서드
- 정수 난수 생성:
- 범위 제한 없는 난수:
int num = random.nextInt(); // -2^31 ~ 2^31-1 범위의 정수
- 범위 제한 있는 난수:
int num = random.nextInt(100); // 0 ~ 99 범위의 정수
- 실수 난수 생성:
0.0
이상1.0
미만의 난수:double num = random.nextDouble(); // 0.0 <= num < 1.0
- 특정 범위의 난수:
double num = 5.0 + random.nextDouble() * 10.0; // 5.0 <= num < 15.0
- Boolean 난수 생성:
boolean value = random.nextBoolean();
- Long 난수 생성:
long num = random.nextLong();
- Float 난수 생성:
float num = random.nextFloat(); // 0.0 <= num < 1.0
- Gaussian 난수 생성:
- 평균이 0.0이고 표준편차가 1.0인 정규분포를 따르는 난수를 생성합니다.
double gaussian = random.nextGaussian();
Random 클래스 사용 예제
- 정수 난수 생성:
Random random = new Random(); int randomNum = random.nextInt(50); // 0 ~ 49 System.out.println("Generated Number: " + randomNum);
- 특정 범위 난수 생성:
int min = 10, max = 20; int randomNum = min + random.nextInt(max - min + 1); // 10 ~ 20 System.out.println("Random Number: " + randomNum);
- Boolean 난수 활용:
boolean randomBool = random.nextBoolean(); System.out.println("Coin Toss: " + (randomBool ? "Heads" : "Tails"));
- 정규분포 난수 생성:
double gaussianValue = random.nextGaussian(); System.out.println("Gaussian Value: " + gaussianValue);
Random 클래스의 장점
- 다양한 난수 타입 지원:
다양한 데이터 타입의 난수를 쉽게 생성할 수 있습니다. - 재현 가능:
시드 값을 설정하면 동일한 난수 시퀀스를 재현할 수 있어 테스트 및 디버깅에 유리합니다. - 간단한 사용법:
메서드를 호출하는 것만으로 난수를 생성할 수 있습니다.
Random 클래스의 단점 및 주의점
- 스레드 안전하지 않음:
Random
클래스는 스레드 안전하지 않으므로 멀티스레드 환경에서는ThreadLocalRandom
을 사용하는 것이 좋습니다. - 보안성이 낮음:
암호화나 보안과 관련된 작업에서는 난수 예측 가능성을 방지하기 위해SecureRandom
을 사용해야 합니다.
'코딩스터디 > JAVA스터디' 카테고리의 다른 글
Java) javaUtil 패키지 (0) | 2024.11.23 |
---|---|
Java 람다식 (0) | 2024.11.21 |
Java 제네릭 (1) | 2024.11.20 |
Java) I/O (0) | 2024.11.19 |
Java 애노테이션 (3) | 2024.11.18 |