44일차 (1) - java (자바 표준 API)

Yohan·2024년 4월 23일
0

코딩기록

목록 보기
63/156
post-custom-banner

자바 표준 API

기본적인 자바 프로그래밍을 위해 제공되는 라이브러리 집합

  • 대표적인 예시
    • java.lang 패키지의 Object, String 클래스
    • java.util 패키지의 List, Set, Map 인터페이스
  • java.lang 패키지는 생략가능

Object 클래스

  • 자바의 최상위 클래스
  • Object 클래스의 메서드는 오버라이딩해서 클래스에 맞게 사용한다.

주요 메서드

  1. equals(Object obj)
  • 두 객체가 같은지 비교
  1. hashCode()
  • 객체의 해시 주소값을 반환
  • 보통 equals() & hashCode()는 같이 쓰임

// Pen
    // equals를 오버라이딩 할 때는 반드시 hashcode도 같이 오버라이딩하여
    // 두 객체가 같을 경우 주소값도 같게 만든다.
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Pen pen = (Pen) o;
        // 펜의 시리얼 번호가 같으면 같은 펜으로 취급하게 한다.
        return serial == pen.serial;
    }

    @Override
    public int hashCode() {
        return Objects.hash(serial);
    }

// main
// 만약에 펜의 시리얼 넘버가 같다면 같은 펜으로 취급하겠다.
        Pen redPen1 = new Pen(150L, "빨강", 1000, company);
        Pen redPen2 = new Pen(150L, "빨강", 1500, company);

        System.out.println(redPen1 == redPen2); // false
        System.out.println(redPen1.equals(redPen2)); // true

        System.out.println("redPen1 = " + redPen1.hashCode());
        System.out.println("redPen2 = " + redPen2.hashCode());
  1. toString()
  • 객체를 문자열로 변환하여 반환
  • 기본 toString()은 단순 패키지 경로 및 클래스 이름과 16진수의 주소값이 나타나기 때문에 해당 객체의 속성들을 출력하는 것으로 오버라이딩해서 사용
class Pen {

    long serial; // 일련번호
    String color; // 색상
    int price; // 가격
    Company company; // 펜 제조사정보

    public Pen(long serial, String color, int price, Company company) {
        this.serial = serial;
        this.color = color;
        this.price = price;
        this.company = company;
    }

    @Override
    public String toString() {
        return "Pen{" +
                "serial=" + serial +
                ", color='" + color + '\'' +
                ", price=" + price +
                ", company=" + company +
                '}';
    }
}


class Company {

    String companyName; // 회사명
    String address; // 회사 주소

    public Company(String companyName, String address) {
        this.companyName = companyName;
        this.address = address;
    }

    // Object 에서 제공하는 메서드인 toString을 오버라이딩해서 사용 가능
    @Override
    public String toString() {
        return "Company{" +
                "companyName='" + companyName + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

// main

public static void main(String[] args) {

Company company = new Company("모나미", "서울");

        Pen yellowPen = new Pen(100L,"노랑",1000, company);

        System.out.println("yellowPen = " + yellowPen);
        // yellowPen = Pen{serial=100, color='노랑', price=1000, company=Company{companyName='모나미', address='서울'}}
  • 오버라이딩 했던 대로 출력되는 것을 볼 수 있음

System 클래스

  • 프로그램 종료, 키보드로 입력, 모니터로 출력, 메모리 정리, 현재 시간 읽기 등이 가능

주요 메서드

  1. exit()
  • 현재 실행하고 있는 프로세스를 강제 종료시킨다.
    정상 종료일경우 매개값으로 0을 주고, 비정상 종료인경우 0 이외에 다른 값을 준다.
  1. currentTimeMillis()
  • 1970년 1월 1일 자정을 기준으로 현재까지 흐른 유닉스 시간을 밀리세컨드(1/1000초) 단위의 long값으로 리턴
    -> 성능을 테스트할 때 사용
    public static void main(String[] args) {

        // 프로그램의 실행시간 체크
        long start = System.currentTimeMillis();
        System.out.println(start);

        String s = "";
        for (int i = 0; i < 100000; i++) {
            s += "abc";
        }

        long end = System.currentTimeMillis();
        long time = end - start;
        System.out.println("time = " + time / 1000.0 + "초");
    }

String 클래스

  • 문자열을 표현할 때 사용하는 클래스
    • new String(); 형식으로 객체 생성 가능
    • String name = "홍길동" 처럼 타입으로도 가능

주요 메서드

  1. length()
  • 문자열의 길이를 반환
  1. charAt()
  • 지정된 위치의 문자를 반환
String str = "Hello World!";
char ch = str.charAt(1); // ch에는 'e'가 저장됨
  1. substring()
  • 지정된 시작 위치에서부터 지정된 끝 위치까지의 문자열 반환
  1. toUpperCase()
  • 모든 문자를 대문자로 변환
  1. toLowerCase()
  • 모든 문자를 소문자로 변환
  1. indexOf()
  • 지정된 문자나 문자열이 처음으로 나타나는 위치를 반환
  1. replace()
  • 지정된 문자나 문자열을 다른 문자나 문자열로 바꾼다.
  1. split()
  • 지정된 문자열을 기준으로 문자열을 나눈다.
String str = "Hello,Java,World!";
String[] tokens = str.split(","); // tokens에는 ["Hello", "Java", "World!"]가 저장됨

StringBuffer, StringBuilder

  • String클래스의 메모리 과소비 문제를 극복하기 위해 출시된 클래스들
  • 속도가 String 클래스보다 빠르다.
package day11.api.lang;

public class StringBuilderTest {

    private static void makeString() {

        long start = System.currentTimeMillis();
        String s = "";
        for (int i = 0; i < 200000; i++) {
            s += "A";
        }
        long end = System.currentTimeMillis();

        System.out.println("스트링 총 소요 시간: " + (end - start) + "밀리초");
    }

    private static void makeStringBuilder() {

        long start = System.currentTimeMillis();
        StringBuilder s = new StringBuilder("");
        for (int i = 0; i < 200000; i++) {
            s.append("A");
        }
        long end = System.currentTimeMillis();

        System.out.println("빌더 총 소요 시간: " + (end - start) + "밀리초");
    }

    public static void main(String[] args) {

        makeStringBuilder();
        makeString();
    }
}

  • 많은 차이를 보이는 것을 볼 수 있다.

주요 메서드

  1. append()
  • 기존 문자열의 뒤에 문자열을 추가한
  1. insert()
  • 특정 위치에 문자열을 추가
  1. delete()
  • 문자열을 삭제
  1. deleteCharAt()
  • 특정 인덱스의 문자 하나를 삭제
  1. replace()
  • 문자열의 일부분을 다른 문자열로 대체
  1. setCharAt()
  • 문자열에서 주어진 index의 문자를 다른 문자로 대체
  1. toString()
  • StringBuilder 객체의 값을 문자열로 반환
  1. reverse()
  • 문자열을 거꾸로 뒤집는다.

Math 클래스

  • 수학 계산에 사용할 수 있는 메서드 제공
  • 모든 메서드가 static이기 때문에 따로 객체 생성 없이 접근 가능

주요 메서드

  1. abs(): 절대값을 구함.
  2. ceil(): 올림값을 구함.
  3. floor(): 내림값을 구함.
  4. max(): 수를 비교하여 최대값을 구함.
  5. min(): 수를 비교하여 최소값을 구함.
  6. random(): 랜덤값을 구함(0.0 <= 값 < 1.0)
  7. rint(): 현재 수에서 가까운 정수를 실수형태로 구함.
  8. round(): 반올림값을 구함.

Wrapper 클래스

  • 자바의 자료형은 크게 기본 타입(primitive type), 참조 타입(reference type)으로 나누어짐
  • 기본 자료 타입을 객체로 표현하기 위해 사용하는 클래스
package day11.api.lang;

public class Wrapper {

    // 기본값 차이 유의하기
    private int number1; // 기본값 0
    private Integer number2; // 기본값 null

    // 객체인 number2를 생성자를 통해 기본값을 0으로 초기화 시킬 수 있다.
    public Wrapper(Integer number2) {
        this.number2 = 0;
    }

    public static void main(String[] args) {

        // Wrapper type (기본 타입을 객체로 포장함)
        // Byte, Short, Integer, Long, Boolean, Float, Double, Character
        Integer a = 10; // int a = 10; 과 동일함
        Double b = 3.3;
    }
}
  • 기본 타입과 참조 타입의 차이점은 기본갑의 차이다. 참조 타입의 기본값이 null 인 것에 주의
    -> 단, 생성자를 통해 기본값을 원하는 값으로 초기화 가능

LocalDate, LocalTime, LocalDateTime 클래스

  • 날짜와 시간 정보를 제공하는 클래스

주요 메서드

  1. now()
  • 현재 날짜와 시간 정보를 가지는 LocalDateTime 객체를 반환
  1. of()
  • 지정한 날짜와 시간 정보를 가지는 LocalDateTime 객체를 생성
  1. getXXX()
  • LocalDateTime 객체에서 지정한 필드의 값을 반환 (예: getYear(), getMonth(), getDayOfMonth(), getHour(), getMinute(), getSecond())
  1. plusXXX()
  • LocalDateTime 객체에 지정한 시간을 더한 새로운 LocalDateTime 객체를 생성 (예: plusDays(), plusHours(), plusMinutes(), plusSeconds())
  1. minusXXX()
  • LocalDateTime 객체에서 지정한 시간을 뺀 새로운 LocalDateTime 객체를 생성 (예: minusDays(), minusHours(), minusMinutes(), minusSeconds())
  1. format()
  • LocalDateTime 객체를 지정한 형식으로 변환하여 문자열로 반환 (예: "yyyy-MM-dd HH:mm:ss")
package day11.api.time;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.Calendar;
import java.util.Date;

public class DateTime {

    public static void main(String[] args) {

        // 자바8 이전
        Date date = new Date();
        System.out.println("date = " + date.getYear());

        Calendar calendar = Calendar.getInstance();

        // 자바8 이후
        LocalDate nowDate = LocalDate.now();
        System.out.println("nowDate = " + nowDate);

        System.out.println(nowDate.getYear());

        LocalTime nowTime = LocalTime.now();

        LocalDateTime nowDateTime = LocalDateTime.now();
        System.out.println("nowDateTime = " + nowDateTime);

        // 특정 날짜 정보 생성하기
        LocalDate targetDate = LocalDate.of(2022, 4, 15);
        System.out.println("targetDate = " + targetDate);

        // 날짜 연산
        // 도서 대여시스템에서 빌린날짜로부터 3일 뒤가 반납일
        LocalDate rentalDate = LocalDate.now();
        LocalDate returnDate = rentalDate.plusDays(3);
        System.out.println("returnDate = " + returnDate);

        LocalDate targetDateTime = returnDate
                .plusYears(2)
                .plusMonths(3)
                .plusDays(5);

        System.out.println("targetDateTime = " + targetDateTime);

        // 사이 날짜 구하기
        LocalDate hireDate = LocalDate.of(2018, 3, 6);
        LocalDate retireDate = LocalDate.of(2022, 12, 27);

        long between = ChronoUnit.DAYS.between(hireDate, retireDate);
        System.out.println("between = " + between);

        // 날짜 포맷 바꾸기
        System.out.println("nowDateTime = " + nowDateTime);

        DateTimeFormatter pattern
                = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 a hh시 mm분 ss초");

        String dateString = nowDateTime.format(pattern);
        System.out.println("dateString = " + dateString);

    }
}
profile
백엔드 개발자
post-custom-banner

0개의 댓글