[BaekJoon] 자바로 첫 걸음

곽동현·2022년 2월 4일
post-thumbnail

백준 입문 단계


Java 언어로 백준 단계별 풀어보기로 시작. ( Java 8, Java 11)

  • Java에 대한 이해와 응용력이 부족했고 언어 학습과 동시에 알고리즘 및 취업 대비 코딩 테스트에 필요한 능력을 기르고자 시작하게 되었다.

Static 키워드 역할?

public class HelloWorld {
		public static void main(String[] args) {
		System.out.println( "Hello World~" );
	}
}
  • static으로 선언된 함수(메서드)나 변수는 자바 버추얼 머신에서 인스턴스 객체의 생성 없이 호출을 할 수 있다.
  • 쉽게 말해서, 객체 생성없이 해당 함수(메서드)를 호출해서 사용할 수 있다.
  • 자바 프로그램을 실행하면 static으로 지정된 메서드를 찾아서 먼저 메모리에 할당 시킨다.
  • static으로 지정된 메서드가 여러개인 경우에는 객체를 생성하는 것과 상관없이 모두 메모리에 할당시킨다.
  • 그런 후에, "main"으로 이름이 만들어진 메서드가 있는지를 찾아서 그 메서드를 가장 먼저 시작점의 메서드로써 호출을 하게 되는 것이다.

Scanner vs BufferReader


자바는 내부적으로 (메모리 상에서) 문자열이 UTF-16 으로 인코딩되어 처리된다. 문자열 송/수신을 위해 직렬화가 필요할 때에는 변형된 UTF-8을 사용하게 되는데,
UTF-8과 UTF-16의 차이는 Byte 구성 방식에서 차이가 있다고 한다.
여기서 UTF-16은 거의 모든 문자가 2Byte로 구성된다. ( 몇몇 케이스의 경우에는 4Byte로 구성된다. )

  • InputStream 은 가장 기본적인 입력스트림이다.
  • InputStream 은 바이트 단위로 데이터를 처리한다. 또한 System.in 의 타입도 InputStream 이다.
  • InputStreamReader 은 문자(character) 단위로 데이터를 처리할 수 있도록 돕는다.
  • InputStream 의 데이터를 문자로 변환하는 중개 역할을 한다.
  • BufferedReader 은 스트림에 버퍼를 두어 문자를 버퍼에 일정 정도 저장해둔 뒤 한 번에 보낸다.

하나하나 문자를 보내는 것이 아닌 한 번에 모아둔 다음 보내며 별다른 정규식을 검사하지 않으니 훨씬 속도가 빠르다.

정리하자면 바이트 단위 [InputStream]로 문자를 입력받아 문자(character) [InputStreamReader]로 처리한 뒤
버퍼(buffer) [BufferedReader]에 담아두었다가 일정 조건이 되면 버퍼를 비우면서 데이터를 보내는 것이다.

BufferedReader 을 통해 문자열을 받아온 뒤, Integer.ParseInt() 같은 파싱 함수들을 통해 타입을 변환해주는 것이, 성능(시간) 경쟁인 알고리즘에서는 훨씬 선호 될 수밖에 없다.

  • readLine() 은 한 행을 읽어오고, read() 는 한 문자만 읽어온다.
  • close() Method를 사용하여 닫는 것은, 사용하지 않는 입력 또는 출력 스트림이 열리지 않도록 하기 위함이다.

+

public static void main(String args[]) throws IOException{ 
...
} //익셉션(예외)가 발생하면 해당 클래스에서 벗어나게 된다는 것.
profile
읽고 쓰며 생각합니다 💡

0개의 댓글