본문 바로가기
Computer Science/Algorithm

[JAVA] Hello World

by soro.k 2022. 2. 9.

 

https://st-lab.tistory.com/2

 

[백준] 2557번 : Hello World - JAVA [자바]

https://www.acmicpc.net/problem/2557 2557번: Hello World Hello World!를 출력하시오. www.acmicpc.net 문제 첫 글로 백준 알고리즘 사이트의 문제를 포스팅했다. 앞으로도 쭉 이 사이트의 단계별 문제들을 풀..

st-lab.tistory.com

 

마침 단계 별로 풀고 있었는데 좋은 분의 블로그를 발견했다. 간단히 출력만 하고 넘어갈 수 있는 문제라고 생각했는데 출력 속도 비교 링크까지 걸어두신 걸 보고 보면서 정리하고 따라하면 더 공부가 될 것 같아서 기록으로 남겨두려고 한다.

 


불변 클래스(immutable class)와 가변 클래스(mutable class)

String클래스와 같이 인스턴스가 한 번 생성되면 그 값을 변경할 수 없는 클래스를 불변 클래스라고 하며, 자유롭게 인스턴스의 값을 변경할 수 있는 클래스를 가변 클래스라고 한다. 불변 클래스는 append()나 insert()와 같은 값을 변경하는 set 메소드를 포함하지 않는다.

 

💡 불변 클래스를 사용하는 이유

멀티 스레드 환경에서 객체가 변화되는 상황이라면 불변 인스턴스를 사용하는 것이 좀 더 신뢰할 수 있는 코드를 작성할 수 있다.

 

 

Buffer
데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 임시 메모리 영역

 

버퍼링 없이 입력된 문자를 바로 전송하는 것보다 메모리 버퍼를 통해 데이터를 한 번에 전송하는 것이 훨씬 효율적이다.

 

 

BufferedWriter
버퍼를 이용해 문자를 출력하는 클래스
public class Main {
	public static void main(String[] args) throws IOException {
    	BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        bw.write("Hello World!");
        bw.flush();
        bw.close();
    }
}

 

 

StringBuilder
문자열을 변경할 때 효율적으로 쓰일 수 있는 클래스

자바에서 String객체는 한 번 생성되면 내용을 변경할 수 없다. 따라서 두 개의 문자열을 연결해서 새로운 문자열을 생성하면 이전 문자열은 가비지 컬렉터로 들어간다. 문자열을 연결하는 과정 중에 여러 작업이 발생하고 메모리 할당과 해제가 반복적으로 발생한다. 이러한 성능과 속도 저하를 위한 대안으로 StringBuilder를 사용한다.

public class Main {
	public static void main(String[] args) {
    	StringBuilder sb = new StringBuilder();
        sb.append("Hello World!");
        
        System.out.pirntln(sb);
    }
}

 

NOTE. StrungBuffer는 StringBuilder와는 달리 동기화를 지원한다.

 

 

출력 속도 비교
BufferedWiter(0.9581) > StringBuilder(1.1881) > StringBuffer > String(30.013)

 


ref.

 

'Computer Science > Algorithm' 카테고리의 다른 글

[JAVA] 곱셈  (0) 2022.02.22
[JAVA] 나머지  (0) 2022.02.22
[JAVA] A + B  (0) 2022.02.14
[JAVA] 고양이  (0) 2022.02.12
[JAVA] We love kriii  (0) 2022.02.09