📌 https://www.acmicpc.net/problem/2438
✅ Pre-Refactor Code
import java.io.*;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int a = Integer.parseInt(br.readLine());
for (int i = 0; i<a; i++){
for (int j = 0; j<=i; j++){
bw.write("*");
}
bw.write("\n");
}
bw.flush();
}
}
🔄️ Refactored Code
💡 StringBuilder 적용
import java.io.*;
import java.util.*;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int a = Integer.parseInt(br.readLine());
for (int i = 1; i<=a; i++){
for (int j = 1; j<=i; j++){
sb.append("*");
}
sb.append("\n");
}
System.out.println(sb);
}
}
이 코드에서 System.out.println(sb);는 최종적으로 화면에 출력을 하기 위해 사용되었습니다.
실제 출력은 System.out.println(sb);을 통해 이루어집니다.
이 명령을 통해 StringBuilder에 쌓인 모든 문자열(별과 줄바꿈)이 한 번에 출력됩니다.
이 방식은 루프 내에서 매번 출력하는 것보다 효율적입니다. 즉, 반복문마다 System.out.println을 호출하면 성능상 부담이 커지기 때문에, StringBuilder에 출력할 내용을 모두 저장해 두었다가 한 번에 출력하는 것입니다.
따라서, System.out.println(sb);을 사용하는 이유는 최종적으로 별 모양을 화면에 출력하기 위해서이고, 효율적인 출력을 위해 StringBuilder를 사용한 것입니다.
✏️ StringBuilder를 적용한 이유와 개선된 점
메모리 효율성
BufferedWriter는 파일이나 네트워크에 출력할 때 주로 사용되는 클래스입니다. 메모리에 의존하는 간단한 작업에는 과할 수 있습니다. 반면, StringBuilder는 문자열을 계속해서 수정하고 덧붙이는 작업에 적합하여 메모리를 더 효율적으로 사용할 수 있습니다.
성능 향상
BufferedWriter는 매번 write 호출할 때마다 버퍼에 데이터를 기록하고 필요에 따라 출력하는 작업을 수행합니다. 이 과정에서 상대적으로 부하가 클 수 있습니다. StringBuilder는 문자열을 한 번에 다 모은 후 출력하므로 불필요한 I/O 작업을 줄여 성능이 향상됩니다.
가독성 및 유지보수성
StringBuilder를 사용하면 코드가 더 직관적이고 관리하기 쉬워집니다. 반복적으로 출력을 호출하는 대신, 모든 문자열을 StringBuilder에 저장한 후 한 번에 출력하므로 코드가 간결해집니다.
유연성
이후 추가적으로 다른 문자열을 덧붙이거나 조작하는 작업에서 StringBuilder는 더 유연합니다.
🙏🏻 gmltjd8002
'코딩 테스트 일지 📒' 카테고리의 다른 글
[코테/JAVA] 배열 & 리스트 완벽 가이드: 이 글 하나로 한번에 끝내자 🔥 (1) | 2024.09.21 |
---|---|
[백준] 2439 별 찍기 - 2 | 구현 | 브론즈 Ⅳ | JAVA 💡조건문 대체 (1) | 2024.09.16 |
[코드업/JAVA] 기초 100제 완료 후기! 🎉 (0) | 2024.08.26 |
[코드업/JAVA] 기초 100제 8. 1차원배열&2차원배열 1093-1099 🐘 (2) | 2024.08.26 |
[코드업/JAVA] 기초 100제 7. 종합 1078-1092 🐘 (0) | 2024.08.24 |