728x90
반응형
챕터 5: Java API 활용
5.1 java.lang 패키지
java.lang 패키지는 Java 프로그래밍에 필수적인 기본 클래스를 포함하고 있으며, 별도의 임포트 없이 사용할 수 있습니다.
5.1.1 주요 클래스
- Object 클래스
- 모든 Java 클래스의 최상위 부모 클래스입니다. 기본적인 메서드를 제공합니다.
public class Main { public static void main(String[] args) { Object obj1 = new Object(); Object obj2 = new Object(); // equals() 메서드: 두 객체가 동일한지 비교 System.out.println(obj1.equals(obj2)); // false // hashCode() 메서드: 객체의 해시코드 값을 반환 System.out.println(obj1.hashCode()); // 객체의 해시코드 값 // toString() 메서드: 객체의 문자열 표현을 반환 System.out.println(obj1.toString()); // 객체의 문자열 표현 } }
- 모든 Java 클래스의 최상위 부모 클래스입니다. 기본적인 메서드를 제공합니다.
- System 클래스
- 표준 입력, 출력 및 시스템 관련 기능을 제공합니다.
public class Main { public static void main(String[] args) { // 표준 출력 System.out.println("Hello, World!"); // 표준 에러 출력 System.err.println("Error Message!"); // 현재 시간(밀리초 단위) 반환 long currentTime = System.currentTimeMillis(); System.out.println("Current Time: " + currentTime); // 현재 시간(밀리초) // 시스템 속성 가져오기 String javaVersion = System.getProperty("java.version"); System.out.println("Java Version: " + javaVersion); } }
- 표준 입력, 출력 및 시스템 관련 기능을 제공합니다.
- Math 클래스
- 수학 연산을 위한 메서드를 제공합니다.
public class Main { public static void main(String[] args) { // 제곱근 계산 double result1 = Math.sqrt(25); // 거듭제곱 계산 double result2 = Math.pow(2, 3); // 0.0 이상 1.0 미만의 랜덤 값 생성 double result3 = Math.random(); // 절댓값 계산 int result4 = Math.abs(-10); // 최대값과 최소값 계산 int max = Math.max(10, 20); int min = Math.min(10, 20); System.out.println("sqrt(25): " + result1); // 출력: sqrt(25): 5.0 System.out.println("pow(2, 3): " + result2); // 출력: pow(2, 3): 8.0 System.out.println("random(): " + result3); // 출력: random(): 0.123456789 (예시) System.out.println("abs(-10): " + result4); // 출력: abs(-10): 10 System.out.println("max(10, 20): " + max); // 출력: max(10, 20): 20 System.out.println("min(10, 20): " + min); // 출력: min(10, 20): 10 } }
- 수학 연산을 위한 메서드를 제공합니다.
- String 클래스
- 문자열을 다루기 위한 다양한 메서드를 제공합니다.
public class Main { public static void main(String[] args) { String str = "Hello, World!"; // 문자열 길이 int length = str.length(); // 특정 위치의 문자 추출 char charAt = str.charAt(0); // 부분 문자열 추출 String substring = str.substring(7, 12); // 문자열 비교 boolean isEqual = str.equals("Hello, World!"); // 대소문자 변환 String upperCase = str.toUpperCase(); String lowerCase = str.toLowerCase(); // 문자열 교체 String replacedString = str.replace("World", "Java"); // 문자열 분리 String[] words = str.split(" "); System.out.println("Length: " + length); // 출력: Length: 13 System.out.println("Char at 0: " + charAt); // 출력: Char at 0: H System.out.println("Substring: " + substring); // 출력: Substring: World System.out.println("Is equal: " + isEqual); // 출력: Is equal: true System.out.println("Upper case: " + upperCase); // 출력: Upper case: HELLO, WORLD! System.out.println("Lower case: " + lowerCase); // 출력: Lower case: hello, world! System.out.println("Replaced string: " + replacedString); // 출력: Replaced string: Hello, Java! System.out.println("Words: " + java.util.Arrays.toString(words)); // 출력: Words: [Hello,, World!] } }
- 문자열을 다루기 위한 다양한 메서드를 제공합니다.
- Wrapper 클래스
- 기본 데이터 타입을 객체로 감싸는 클래스입니다. (Integer, Double, Boolean, 등)
public class Main { public static void main(String[] args) { // int -> Integer로 변환 Integer intValue = Integer.valueOf(10); // Integer -> int로 변환 int primitiveValue = intValue.intValue(); // 문자열 -> 기본 타입으로 변환 int parsedInt = Integer.parseInt("123"); double parsedDouble = Double.parseDouble("3.14"); // 기본 타입 -> 문자열로 변환 String intStr = Integer.toString(123); String doubleStr = Double.toString(3.14); System.out.println("Integer: " + intValue); // 출력: Integer: 10 System.out.println("Primitive: " + primitiveValue); // 출력: Primitive: 10 System.out.println("Parsed Int: " + parsedInt); // 출력: Parsed Int: 123 System.out.println("Parsed Double: " + parsedDouble); // 출력: Parsed Double: 3.14 System.out.println("Integer to String: " + intStr); // 출력: Integer to String: 123 System.out.println("Double to String: " + doubleStr); // 출력: Double to String: 3.14 } }
- 기본 데이터 타입을 객체로 감싸는 클래스입니다. (Integer, Double, Boolean, 등)
5.2 java.util 패키지
java.util 패키지는 유틸리티 클래스를 포함하고 있으며, 컬렉션 프레임워크, 날짜 및 시간 조작, 다양한 유틸리티 기능을 제공합니다.
5.2.1 유틸리티 클래스
- Calendar 클래스
- 날짜와 시간을 다루기 위한 클래스입니다.
import java.util.Calendar; public class Main { public static void main(String[] args) { // 현재 날짜 및 시간 가져오기 Calendar calendar = Calendar.getInstance(); System.out.println("Current Date: " + calendar.getTime()); // 날짜를 7일 뒤로 이동 calendar.add(Calendar.DATE, 7); System.out.println("Date after a week: " + calendar.getTime()); // 특정 날짜 설정 calendar.set(2022, Calendar.DECEMBER, 25); System.out.println("Set Date: " + calendar.getTime()); // 연도 가져오기 int year = calendar.get(Calendar.YEAR); System.out.println("Year: " + year); // 월 가져오기 (0-11, 0: January) int month = calendar.get(Calendar.MONTH); System.out.println("Month: " + month); } }
- 날짜와 시간을 다루기 위한 클래스입니다.
- Random 클래스
- 난수 생성을 위한 클래스입니다.
import java.util.Random; public class Main { public static void main(String[] args) { // Random 객체 생성 Random random = new Random(); // 0부터 99까지의 정수 난수 생성 int randomInt = random.nextInt(100); // 0.0부터 1.0 미만의 실수 난수 생성 double randomDouble = random.nextDouble(); // 가우시안 분포의 난수 생성 double randomGaussian = random.nextGaussian(); System.out.println("Random Integer: " + randomInt); System.out.println("Random Double: " + randomDouble); System.out.println("Random Gaussian: " + randomGaussian); } }
- 난수 생성을 위한 클래스입니다.
- Arrays 클래스
- 배열 조작을 위한 유틸리티 메서드를 제공합니다.
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] numbers = {5, 3, 8, 1, 2}; // 배열 정렬 Arrays.sort(numbers); System.out.println("Sorted Array: " + Arrays.toString(numbers)); // 이진 검색 int index = Arrays.binarySearch(numbers, 3); System.out.println("Index of 3: " + index); // 배열 복사 int[] copiedNumbers = Arrays.copyOf(numbers, numbers.length); System.out.println("Copied Array: " + Arrays.toString(copiedNumbers)); // 배열 채우기 Arrays.fill(numbers, 0); System.out.println("Filled Array: " + Arrays.toString(numbers)); // 다차원 배열 비교 int[][] matrix1 = { {1, 2}, {3, 4} }; int[][] matrix2 = { {1, 2}, {3, 4} }; boolean isEqual = Arrays.deepEquals(matrix1, matrix2); System.out.println("Matrices are equal: " + isEqual); } }
- 배열 조작을 위한 유틸리티 메서드를 제공합니다.
- Collections 클래스
- 컬렉션 조작을 위한 유틸리티 메서드를 제공합니다.
import java.util.*; public class Main { public static void main(String[] args) { List < String > list = new ArrayList < > (Arrays.asList("Apple", "Banana", "Cherry")); // 컬렉션 정렬 Collections.sort(list); System.out.println("Sorted List: " + list); // 요소 섞기 Collections.shuffle(list); System.out.println("Shuffled List: " + list); // 요소 빈도수 계산 int frequency = Collections.frequency(list, "Apple"); System.out.println("Frequency of Apple: " + frequency); // 요소 교체 Collections.replaceAll(list, "Apple", "Orange"); System.out.println("List after replacement: " + list); } }
- 컬렉션 조작을 위한 유틸리티 메서드를 제공합니다.
5.3 java.io 패키지
java.io 패키지는 입출력 스트림을 통해 데이터의 읽기와 쓰기를 처리하는 클래스를 제공합니다.
5.3.1 입출력 스트림의 개념과 종류
- 입출력 스트림: 데이터의 흐름을 나타내며, 입력 스트림과 출력 스트림으로 나뉩니다.
- 입력 스트림: 데이터를 읽어들이는 스트림 (InputStream, Reader)
- 출력 스트림: 데이터를 쓰는 스트림 (OutputStream, Writer)
5.3.2 파일 입출력 예제
- 파일 읽기
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class Main { public static void main(String[] args) { try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) { String line; while ((line = br.readLine()) != null) { // 파일의 각 줄을 읽어서 출력 System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } }
- 파일 쓰기
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class Main { public static void main(String[] args) { try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) { // 파일에 문자열 쓰기 bw.write("Hello, World!"); bw.newLine(); bw.write("This is a new line."); } catch (IOException e) { e.printStackTrace(); } } }
- 바이트 스트림을 사용한 파일 복사
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class Main { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("source.txt"); FileOutputStream fos = new FileOutputStream("destination.txt")) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } } catch (IOException e) { e.printStackTrace(); } } }
5.3.3 객체 직렬화
- 객체 직렬화: 객체를 스트림으로 변환하여 저장하거나 전송할 수 있게 하는 과정입니다. 클래스는 Serializable 인터페이스를 구현해야 합니다.
import java.io.*; // Person 클래스는 Serializable 인터페이스를 구현하여 직렬화 가능 public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } } public class Main { public static void main(String[] args) { Person person = new Person("Alice", 30); // 객체 직렬화 try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.ser"))) { oos.writeObject(person); } catch (IOException e) { e.printStackTrace(); } // 객체 역직렬화 try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.ser"))) { Person deserializedPerson = (Person) ois.readObject(); System.out.println("Deserialized Person: " + deserializedPerson); } catch (IOException | ClassNotFoundException e) { e.printStackTrace(); } } }
이로써 Java의 주요 API를 활용하는 방법에 대해 자세히 설명하고, 각 개념을 코드와 예시를 통해 설명했습니다. 다음 챕터에서는 Java의 고급 객체 지향 기법에 대해 다루겠습니다.
반응형
'IT 강좌(IT Lectures) > Java' 카테고리의 다른 글
7강. 동시성 프로그래밍 (0) | 2024.06.24 |
---|---|
6강. 고급 객체 지향 기법 (0) | 2024.06.23 |
4강. 기본 클래스 사용 (0) | 2024.06.21 |
3강. 객체 지향 프로그래밍 (0) | 2024.06.20 |
2강. Java 기본문법 (0) | 2024.06.19 |