IT 강좌(IT Lectures)/Java

5강. Java API 활용

소울입니다 2024. 6. 22. 08:30
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());   // 객체의 문자열 표현
          }
      }
  • 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
          }
      }
     

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