본문 바로가기

STUDY/국비과정

[JAVA 웹 개발 공부] 국비지원 14일차 - toString(), StringBuilder, StringJoiner, StringTokenizer, LocalDate, Calendar 클래스, 달력 만들기, 디데이 구하기

toString()

 

자바에서는 객체의 문자 값이 필요한 경우 toString()이 호출되게 설계되어 있다.

toString()은 인스턴스에 대한 정보를 문자열(String)로 제공할 목적으로 정의한 것이며, 객체가 문자로 취급될 때 사용되는 메서드로 객체가 자신의 정체성을 드러내는 하나의 수단이다. 

인스턴스의 정보를 제공한다는 것은 대부분의 경우 인스턴스 변수에 저장된 값들을 문자열로 표현한다는 뜻이다.

클래스를 작성할 때 toString()을 오버라이딩하지 않고 호출하면 클래스이름에 16진수의 해시코드를 얻게 될 것이다.

toString()은 일반적으로 인스턴스나 클래스에 대한 정보 또는 인스턴스 변수들의 값을 문자열로 변환하여 반환하도록 오버라이딩되는 것이 보통이다. 

 

 

가비지 컬렉션

 

1. 히프 메모리(heap memory)

자바에서 객체들은 new 연산자에 의하여 히프 메모리에서 할당된다. 히프 메모리는 JVM이 가지고 있는 가용 메모리를 가리킨다. 

 

2. 가비지 컬렉션(garbage collection)

가비지 컬렉터(Garbage Collector)는 히프 메모리에서 더 이상 필요 없는 객체를 찾아 지우는 작업을 한다. 아무리 메모리 용량이 큰 컴퓨터라고 하여도 한계가 있기 때문에 히프 메모리가 부족해지면 자바 가상 기계는 가비지 컬렉터를 수행하게 된다. 가비지 컬렉터가 작업을 완료한 이후에 중단한 작업을 다시 시작한다.

 

3. 가비지 컬렉션 요청

개발자는 System 객체의 gc() 메소드를 호출하여서 가비지 컬렉션을 요청할 수 있다. 하지만 가비지 컬렉터가 수행되면 모든 다른 애플리케이션이 멈추기 때문에 가비지 컬렉터의 실행 여부는 전적으로 JVM이 판단한다.

System.gc(); // 가비지 컬렉션 요청

 

 

StringJoiner

 

java.util.StringJoiner 클래스를 사용해서 문자열을 결합할 수 있다.

 

 

StringBuffer 클래스와 StringBuilder 클래스

 

StringBuilder클래스는 문자열을 변경하거나 이어붙이는 경우 추가 메모리 생성 없이 기존 문자열이 확장되는 클래스이다.

String과 다르게 문자열이 빈번하게 변경될 때 사용하면 성능이 좋다.

StringBuffer 클래스는 StringBuilder와 마찬가지로 문자열을 이어붙이는 경우 추가 메모리 생성 없이 기존 문자열이 확장되는 클래스이다. 

실행흐름이 여러개가 되는경우, 하나가 되는 경우 동작이 정확하게 되느냐 안되느냐 차이가 있어서 존재하며, 둘중 아무거나 써도 된다.

 

*append( )

매개변수로 입력된 값을 문자열로 변환하여 StringBuffer인스턴스가 저장하고 있는 문자열의 뒤에 덧붙인다.

*delete(int start, int end)

시작 위치부터 끝 위치 사이에 있는 문자를 제거한다. 단, 끝 위치의 문자는 제외한다.

*insert( , )

두 번째 매개변수로 받은 값을 문자열로 변환하여 지정된 위치(0부터 시작)에 추가한다. 

*setCharAt(int index, char ch)

지정된 위치의 문자를 주어진 문자(ch)로 바꾼다.

 

 

StringTokenizer

 

StringTokenizer는 긴 문자열을 지정된 구분자(delimiter)를 기준으로 토큰(Token)이라는 여러 개의 문자열로 잘라준다.

예를 들어 "100,200,300,400"이라는 문자열이 있을 때 ','를 구분자로 잘라내면 "100", "200", "300", "400"이라는 4개의 문자열(토큰)을 얻을 수 있다.

import java.util.StringTokenizer;

public class StringTokenizerEx1 {
    public static void main(String[] args) {
        String source = "100,200,300,400";
        StringTokenizer st = new StringTokenizer(source, ",");
        while(st.hasMoreTokens()) {
            System.out.println(st.nextToken());
        }
    }
}
100
200
300
400

 

*StringTokenizer의 생성자와 메서드

생성자 / 메서드 설명
StringTokenizer(String str, String delim) 문자열(str)을 지정된 구분자(delim)로 나누는 StringTokenizer를 생성한다.
(구분자는 토큰으로 간주되지 않음)
StringTokenizer(String str, String delim, boolean returnDelims) 문자열(str)을 지정된 구분자(delim)로 나누는 StringTokenizer를 생성한다. returnDelims의 값을 true로 하면 구분자도 토큰으로 간주된다.
int countTokens() 전체 토큰의 수를 반환한다.
boolean hasMoreTokens() 토큰이 남아있는지 알려준다.
String nextToken() 다음 토큰을 반환한다.

 

*StringTokenizer 활용

 

*iterator

프로그래밍에서 반복기는 개발자가 컨테이너, 특히 리스트를 순회할 수 있게 해주는 객체다.

반복자는 객체 지향적 프로그래밍에서 배열이나 그와 유사한 자료구조의 내부요소를 순회하는 객체다.

iterator는 ArrayList, HashSet과 같은 컬렉션을 반복하는 데 사용할 수 있는 객체다. iterator는 반복의 기술 용어기 때문에 반복자라고 한다

 

 

LocalDate

 

LocalDate는 java.time패키지의 가장 기본이 되는 클래스이다.

객체를 생성하는 방법은 현재의 날짜를 LocalDate로 각각 반환하는 now()와 지정된 날짜와 시간으로 LocalDate 객체를 생성하는 of()가 있다. 둘 다 static메서드이다.

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(2022, 09, 10);

 

 

 

Calendar 클래스

 

Calendar 클래스는 Date 클래스와 마찬가지로 날짜와 시간을 다루는 클래스이다. 
추상 클래스이기 때문에 직접 new 하여 객체 생성이 불가하고, Calendar.getInstance() 메소드를 이용하거나 Calendar 클래스를 상속받는 GregorianCalendar 클래스를 이용하여 객체를 생성할 수 있다.

 

*Calendar 클래스의 주요 메소드

메서드 설명 반환 결과
getInstance() 시스템의 현재 날짜와 시간으로 Calendar 인스턴스를 생성하여 반환한다. Calendar
get(int field) 현재 객체의 주어진 값의 필드에 해당하는 상수 값을 반환한다.이 상수값은 Calendar 클래스의 상수중에 가진다.   int
set(int field, int value)  현재 객체의 특정 필드를 다른 값으로 설정한다. void
set(int year, int month, int date) 현재 객체의 년, 월, 일 값을 다른 값으로 설정한다.  void
set(int year, int month, int date, int hour, int minute, int second)  현재 객체의 년, 월, 일, 시, 분, 초 값을 다른 값으로 설정한다.  void
getTime() 현재의 객체를 Date 객체로 변환한다. Date
setTime(Date date)  현재 객체의 특정 필드를 다른 값으로 설정한다.  void
getTimeInMillis() 1/1000초 단위로 값을 반환한다.
일단위로 얻기 위해서는 24(시간)*60(분)*60(초)*1000 으로 나누어준다.
long
setTimeInMills(long mills)  현재 객체를 1/1000초 단위의 주어진 매개변수 시간으로 설정한다.  void
add(int field, int amount) 지정한 필드의 값을 원하는 만큼 증가 또는 감소시킨다. void
roll(int field, int amount) 지정한 필드의 값을 증가 또는 감소 시킬 수 있다. 
add메서드와의 차이점은 다른 필드에 영향을 미치지 않는다.
void
after(Object when) 현재 객체가 when 이후이면 true 아니면 false를 리턴한다 boolean
before(Object when) 현재 객체가 when 이전이면 true 아니면 false를 리턴한다. boolean 
equals(Object obj) 같은 날짜값인지 비교하여 true, false를 반환한다.  boolean
getActualMaximum(int field) 현재 객체의 특정 필드의 최대 값을 반환한다. int
getActualMinimum(int field) 현재 객체의 특정 필드의 최소 값을 반환한다. int
clear(int field) Calendar객체의 특정 필드를 초기화한다. void
toString() Calendar 인스턴스에 저장된 날짜와 시간정보를 문자열로 변환하여 반환하는 메소드다. String

 

*Calendar 클래스의 int형 상수

Field(static int)
사용방법
설명
YEAR
Calendar.YEAR
현재 년도
MONTH
Calendar.MONTH
현재 월 (1월:0)
DATE
Calendar.DATE
현재 월의 날짜
WEEK_OF_YEAR
Calendar.WEEK_OF_YEAR
이 해의 몇 째 주
WEEK_OF_MONTH
Calendar.WEEK_OF_MONTH
이 달의 몇  째 주
DAY_OF_YEAR
Calendar.DAY_OF_YEAR
이 해의 몇 일
DAY_OF_MONTH
Calendar.DAY_OF_MONTH
이 달의 몇 일
DAY_OF_WEEK
Calendar.DAY_OF_WEEK
요일(1~7, 일요일:1)
DAY_OF_WEEK_IN_MONTH
Calendar.DAY_OF_WEEK_IN_MONTH
이 달의 몇 째 요일
AM_PM
Calendar.AM_PM
오전 오후(오전:0, 오후:1)
HOUR
Calendar.HOUR
현재 시간 (12시간제)
HOUR_OF_DAY
Calendar.HOUR_OF_DAY
현재 시간 (24시간제)
MINUTE
Calendar.MINUTE
현재 분
SECOND
Calendar.SECOND
현재 초
MILLISECOND
Calendar.MILLISECOND
1000분의 1초(0~999)

 

 

달력 만들기

 

설정한 날짜가 포함된 캘린더 출력하기

(다른풀이법)

현재 날짜가 포함된 캘린더 출력하기

https://ej-development-note.tistory.com/28

 

[JAVA] 연습문제 - 이번 달 달력(calendar) 만들기

문제 아래와 같이 오늘 날짜와 이번 달 달력을 출력하기 2022-11-19 토 SU MO TU WE TH FR SA 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 풀이순서 1. 현재 날짜 구하기 2. 이번 달

ej-development-note.tistory.com

 

 

생일 디데이 구하기

 

다음 생일까지 몇 일이 남았는지를 알아볼 수 있는 프로그램

https://ej-development-note.tistory.com/29

 

[JAVA] 연습문제 - 생일 D-Day 계산하기

문제 다음 내 생일까지 몇 일이 남았는지를 구하기 오늘: 2022-11-20 생일: 2023-09-10 D-294 풀이순서 1. Calendar 클래스의 인스턴스 2개 생성 2. 한 개는 생일날짜로 설정 3. 올 해 생일이 지났는지 확인 4.

ej-development-note.tistory.com