코딩 테스트를 하거나 자바로 프로그램을 만들 때, 출력을 잘하는 것이 아주 중요해요. 예를 들어, 게임에서 점수를 보여줄 때나, 프로그램의 결과를 화면에 출력할 때 제대로 나와야 해요. 우리가 자바를 처음 배울 때 사용했던 System.out.print()은 가장 기본적인 방법이에요. 하지만 데이터를 많이 출력할 때는 다른 방법이 더 빠르고 좋아요.
그래서 이번에는 자바의 여러 출력 방식 중에서 System.out.print()와 BufferedWriter를 비교해 보기로 했어요. 택배를 보내는 방법처럼 이해해 보자구요!
저번시간에는 뷔페에서 음식을 가져오는 접시에 비유했었는데 오늘은 택배 상자로 이야기 해볼게요
자, 이제 출력 방식을 택배 배송으로 생각해볼게요. 택배를 보낼 때, 작은 상자를 여러 번 보내는 것과, 큰 상자에 여러 물건을 한꺼번에 담아서 보내는 것, 어떤 게 더 빠를까요?
System.out.print("Hello World!");
이처럼 작은 데이터를 바로 화면에 출력하는데, 큰 데이터를 여러 번 보내야 할 때는 시간이 걸릴 수 있어요.
BufferedWriter는 큰 상자에 물건을 많이 담아 한꺼번에 보내는 것과 같아요. 한 번에 많은 양을 보내기 때문에 시간이 절약되고 더 효율적이에요. 그래서 데이터를 많이 출력해야 할 때는 BufferedWriter가 더 빨라요.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("Hello World!"); // 데이터를 버퍼에 담아 두어요.
bw.flush(); // 버퍼에 있는 데이터를 한꺼번에 출력해요.
bw.close(); // 스트림을 닫아요.
BufferedWriter는 데이터를 버퍼라는 큰 통에 미리 담아두었다가 한꺼번에 꺼내서 출력해요. 그래서 데이터를 여러 번 출력하지 않아도 되니까 더 빠르고 효율적이에요. 마치 큰 상자에 물건을 많이 담아 택배를 한 번에 보내는 것처럼요!
자바에서는 문자열을 다루는 방법도 여러 가지가 있어요. String, StringBuffer, StringBuilder 세 가지 방법이 있는데, 어떤 게 어떤 상황에 좋을지 비교해볼게요.
StringBuilder sb = new StringBuilder("Hello ");
sb.append("World!");
System.out.println(sb);
StringBuilder는 큰 상자에 물건을 계속 넣고 빼는 것처럼, 문자열을 빠르게 만들고 수정할 수 있어요!
BufferedWriter는 큰 데이터를 출력할 때 아주 효율적이에요. 많은 데이터를 한꺼번에 보내니까 시간을 절약할 수 있거든요. StringBuilder는 문자열을 자주 수정해야 할 때 빠르게 사용할 수 있는 좋은 방법이에요. 이처럼 상황에 맞는 방법을 잘 선택하면, 코딩 테스트에서도 더 빠르고 좋은 프로그램을 만들 수 있어요!
쓰레드를 쉽게 설명하면, 한 팀의 일꾼들이 동시에 여러 일을 나누어 하는 것이라고 생각하면 돼요. 예를 들어, 우리가 하나의 프로그램이라고 상상해보자구요. 그런데 이 프로그램 안에서 할 일이 너무 많아서 한 사람이 다 처리하면 시간이 오래 걸릴 거예요. 그래서 여러 명의 일꾼들이 동시에 일을 나누어 처리할 수 있도록 도와주는 게 바로 쓰레드예요.
피자 가게에서 피자를 만들고, 배달하고, 주문을 받는 일을 한다고 생각해봐요. 만약 피자 가게에 일꾼이 한 명만 있다면, 그 사람은 피자도 만들고, 배달도 하고, 주문도 받아야 할 거예요. 그래서 시간이 오래 걸리겠죠?
그런데 피자 가게에 일꾼이 세 명 있다면 어떻게 될까요? 한 사람은 피자를 만들고, 한 사람은 배달을 하고, 다른 한 사람은 주문을 받아요. 이렇게 되면 세 명이 동시에 일을 나누어 하니까, 피자가 더 빨리 만들어지고, 손님들도 빨리 피자를 받을 수 있겠죠?
쓰레드는 피자 가게의 일꾼들처럼, 프로그램 안에서 동시에 여러 가지 일을 처리할 수 있게 도와줘요. 하나의 쓰레드는 피자를 만드는 일처럼, 하나의 일을 처리해요. 그래서 프로그램이 더 빨리 동작하고, 여러 작업을 한꺼번에 할 수 있게 도와준답니다.
쓰레드가 여러 개 있다 보면, 서로 동시에 일을 하다가 충돌이 일어날 수 있어요. 마치 피자 가게에서 피자를 만드는 일꾼과 배달을 하는 일꾼이 서로 부딪혀서 피자를 떨어뜨리는 것처럼요. 이런 충돌이 생기지 않도록 하는 것이 바로 쓰레드 안전성(Thread Safety)이에요.
예를 들어, 쓰레드가 여러 개 있을 때, 각자 맡은 일이 잘 나누어져 있어야 안전해요. 피자 가게에서 일꾼들이 서로 맡은 일을 잘 나누어 처리해야 가게가 문제 없이 운영될 수 있는 것처럼요!
자바 공식 문서 - https://docs.oracle.com/en/java/javase/17/docs/api/index.html