TIL 10-24

거북·2023년 10월 24일

TIL

목록 보기
1/22

StringBuilder

String 변수에 값을 추가하며 출력 형식을 작성해야 하는 경우가 많은데 이를 String객체로 생성하면 값을 추가할 때 마다 새로운 객체가 생성되고 기존 데이터는 GarbageCollector로 들어간다.

이러한 데이터가 쌓일수록 메모리를 비효율적으로 사용하는 것이기 때문에 문자열을 더해서 출력 형식을 만드는 경우 StringBuilder를 사용해 주어야 한다.

StringBuilder 의 사용법은 다음과 같다.

public class stringbuilder_ex {
    public static void main(String[] args) {
    StringBuilder sb = new StringBuilder();
    for(int i=1;i<11;i++){
        sb.append(String.format("%d 번째 줄입니다.\n",i));
    }
    System.out.print(sb.toString());
    }
}
//출력결과
1 번째 줄입니다.
2 번째 줄입니다.
.
.
.
10 번째 줄입니다.

이렇게 StringBuilder를 사용하면 메모리 공간을 보다 효율적으로 사용할 수 있다.

Reflection

자바에서는 클래스의 정보를 불러올 수 있는 패키지가 있다. 이를 통해 클래스의 이름과 선언된 변수 목록 등을 불러올 수 있다.

다음은 Reflection을 활용하여 클래스의 정보를 읽어오는 간단한 예제이다.

ReflectionUtility class

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class ReflectionUtility {
    public static List<String> getAttributes(Object obj){
        List<String> list = new ArrayList<>();
        Field[] fields = obj.getClass().getDeclaredFields();
        for(Field field: fields){
            list.add(field.getName());
        }
        return list;
    }

    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
        Book book = new Book("스카치가 있어 즐거운 세상","조승원",2023);
        StringBuilder sb = new StringBuilder();
        List<String> list = getAttributes(book);
        for(String fieldvalues : list){
            Field field = book.getClass().getDeclaredField(fieldvalues);
            field.setAccessible(true);
            Object value = field.get(book);
            sb.append(String.format("%s : %s\n",fieldvalues,value));
        }
        System.out.println(sb);
    }
}

Book class

public class Book {
    private String title;
    private String author;
    private int yearPublished;
    public Book(String title, String author, int yearPublished) {
        this.title = title;
        this.author = author;
        this.yearPublished = yearPublished;
    }
}

출력값

title : 스카치가 있어 즐거운 세상
author : 조승원
yearPublished : 2023

클래스가 한두개일때에는 직접 getter,setter 등을 통해서 불러올 수 있다. 하지만 수많은 클래스를 다루어야할 상황에서는 형식만 갖춰두면 여러 클래스의 정보를 매소드를 통해 읽어올 수 있는 Reflection을 사용하도록 연습해 보아야 겠다.

0개의 댓글