본문 바로가기
공부기록

4월 24일 Java - StringBuffer, 날짜, 시간처리

by project100 2023. 4. 24.

StringBuffer

문자열 임시 저장소. 문자열 내의 문자를 변경하거나 문장을 추가/삭제 등의 작업을 효율성 높이는 보조 객체

 

1) append(str) :  버퍼에 새 문자열을 추가(뒤에 붙임)

2) capacity() : 용량. 버퍼의 크기

3) length() : 문자열의 길이

4) delete(st, ed) : 지정된 범위의 문자열 삭제

5) insert(idx, str) : 지정된 위치(idx)에 문자열(str) 삽입

6) replace(st, ed, str) : 지정된 범위의 문자열을 str로 변경

7) reverse() : 문자열의 순서를 역순으로 변경

8) charAt(idx) : 지정된 위치의 문자를 가져오기

9) setCharAt(idx, char) : 지정된 위치에 '문자'를 변경

10) toString() : 완성된 임시 문자열을 문자열로 고정

 

생성자로 버퍼의 크기(용량)를 지정할 수 있다.

 

특정 문자열을 역순으로 만드는 단계 

1. 문자열을 기본값으로 하는 StringBuffer 생성

2. StringBuffer에 reverse() 사용

3. reverse 한 StringBuffer의 ToStiring 메소드를 사용하여 문자열로 변환 

 

날짜와 시간 처리

활용할 클래스 

java.util 패키지 : Date, Calendar

java.text 패키지 : SimpleDateFormat

 

Date Class :  인스천스 생성 시점의 시스템 날짜와 시간을 초기값으로 저장하고 활용할 수 있는 클래스

 

SimpleDateFormat의 날짜와 시간 표기 기호

G : AD/BD 등 연호

y : 연도

M : 월

d :  일

E :  요일

a : 오전/오후

h : 시

m :  분

s : 초

S : 밀리초

k/H : 24시간 주기 시

w : week of year

W : week of month

D : day of year

F : day of week in month(1~5)

 

package datetime;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTest {
    public static void main(String[] args) {
        Date today = new Date();
        System.out.println(today);
        System.out.println(today.getTime()); // 1970.1.1부터의 시간 값

        // SimpleDateFormat 원하는 형태로 지정
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd (E)");
        // 형식을 넣을 공간 만들기
        String dayStr = sdf1.format(today);
        System.out.println(dayStr);

        SimpleDateFormat sdf2 = new SimpleDateFormat("[a] hh:mm:ss");
        String timeStr = sdf2.format(today);
        System.out.println(timeStr);

        SimpleDateFormat sdf3 = new SimpleDateFormat("F w W D");
        String str = sdf3.format(today);
        System.out.println(str);

    }
}

 

Calendar Class : 달력 클래스. Date 클래스의 보편화, Date 클래스보다 쓰기 쉽다.

 

Singleton 패턴을 사용하는 형태 : 인스턴스를 하나만 사용하도록 강제하는 패턴, 인스턴스를 사용하는 다른 클래스에서 new를 통해 인스턴스를 생성하지 못하게 하고, 스스로 인스턴스를 하나 생성하여 제공하는 방식.

인스턴스 생성 코스트를 줄일 수 있고, 메모리 낭비를 방지할 수 있으며, 하나의 인스턴스로 데이터를 공유할 수 있다.

 

작성요령

1. 생성자를 private로 작성

2. 인스턴스 저장 필드를 static으로 작성 // 자체적으로 만듦.

3. 인스턴스를 제공하는 메소드를 static으로 작성

4. 인스턴스 제공 메소드에서 인스턴스가 없을 때 인스턴스를 생성하도록 처리

 

 

package singletonpkg;

public class SingletonClass {
    // 자신의 인스턴스를 저장하는 클래스 변수
    private static SingletonClass instance = null;

    // 생성자는 private로 선언
    private SingletonClass(){
        //다른 클래스에서 이 클래스의 인스턴스 생성 불가
    }

    // 인스턴스를 제공하는 메소드
    public static SingletonClass getinstance(){
        if(instance == null){ // 없을 때만 생성
            instance = new SingletonClass();
        }
        return instance;
    }
    // 나머지 필드나 메소드 등은 일반 클래스와 같이 작성
    private int num1;
    public int getNum1() {
        return num1;
    }

    public void setNum1(int num1) {
        this.num1 = num1;
    }
}


package singletonpkg;

public class SingletonUse {
    public static void main(String[] args) {
      // 사용불가  SingletonClass sc = new SingletonClass();
       // static 메소드
        SingletonClass sc = SingletonClass.getinstance();
        sc.setNum1(10);
        System.out.println(sc.getNum1());

        // 같은 인스턴스를 사용
        SingletonClass sc2 = SingletonClass.getinstance();
        System.out.println(sc2.getNum1());
    }
}

Calendar 날짜 상수
static int YEAR 현재 년도
static int MONTH 현재 월 (1월 - 0)
static int DATE 현재 날짜
static int WEEK_OF_YEAR 현재 년도 기준 몇째 주
static int WEEK_OF_MONTH 현재 월 기준 몇째 주
static int DAY_OF_YEAR 현재 년도 기준 몇 일
static int DAY_OF_MONTH 현재 월 기준 몇 일
static int DAY_OF_WEEK 현재 요일 (일요일 - 1, 토요일 - 7)
static int HOUR 현재 시간 (12시간)
static int HOUT_OF_DAY 현재 시간 (24시간)
static int MINUTE 현재 분
static int SECOND 현재 초

 

package datetime;

import java.util.Calendar;

public class MyCalendar {
    public static void main(String[] args) {
        Calendar cal = Calendar.getInstance();
        System.out.println(cal);

        // 연, 월, 일 구하기
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH) + 1; // 배열 값이어서 + 1
        int date = cal.get(5);

        System.out.println(year + "-" + month + "-" + date);
        System.out.printf("%d-%02d-%02d\n", year, month, date);

        // 24시간 형식
        int hour = cal.get(Calendar.HOUR_OF_DAY);

        // 12시간 형식
        //int hour = cal.get(Calendar.HOUR);
        int minute = cal.get(Calendar.MINUTE);
        int second = cal.get(Calendar.SECOND);
        System.out.println(hour + ":" + minute + ":" + second);
        System.out.printf("%02d:%02d:%02d\n", hour, minute, second);
    }
}