ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바의 정석 Chapter 2.3/2.4 - 형식화된 출력 및 입력
    IT 공부 독서 정리/Java의 정석 2025. 3. 16. 19:42

    Chapter 2.3과 2.4는 데이터를 화면에 출력하는 방법과 입력하는 방법에 대한 짧은 내용을 담고 있다.

    따라서, 두 파트의 내용은 함께 정리하려고 한다.

    Chapter 2.3 형식화된 출력

    기본 데이터를 출력하는 방식에는 println메서드와 printf메서드가 있다.

    이 둘의 차이는 'string만 출력을 할 것인가', '정해진 특정 형식에 따라 출력을 할것인가'의 차이다.

     

    데이터를 출력을 하다보면, 원하는 형태나 형식에 맞게 출력을 해야 할 때가 있다.

    숫자를 표현하는데 자릿수 맞춰서 출력하는 경우 (0001 / 0010 / 0100 / 1005)

    동일한 위치에 값이 들어가 가독성을 높이는 경우 (     1 /     10 /   100 / 1000) 등등 

    소수점을 표현할 때 원하는 자리수까지만 출력을 하는 경우 등등이 있다.

     

    이러한 규칙이나 형식을 println이라는 메서드를 통해 출력을 하기 위해서 복잡한 과정을 거친다.

    따라서, 이러한 불편함을 줄이고자 printf라는 메서드로 형식에 따른 출력 메서드를 만들었다.

    이 방식은 기존 C언어에서 이미 사용되어온 가장 기본적인 방식이다.

    자바 언어의 방식은 객체지향성을 가진 C++에서 유래되었고, C++은 C언어에서 유래되었다.

    따라서, C언어의 기본 형태를 자바도 기본적으로는 가지고 있다고 한다.

    메서드의 기본형태는 아래와 같다.

     

    System.out.printf()

    • 기본 출력 메서드 소개
      • println(): 데이터와 함께 개행을 출력
      • printf(): 데이터만 출력, 개행하지 않음
    • 형식화된 출력의 필요성
      • 기본 출력 메서드는 데이터를 String 형태로만 출력
      • 복잡한 데이터 형식을 원하는 경우 추가 작업 필요
    • printf() 메서드 도입
      • C언어에서 사용된 출력 형식을 자바에 적용
      • 데이터를 다양한 형식으로 출력 가능
    • printf()의 매개변수
      • 첫 번째 매개변수: 지시자(specifier) 또는 포맷 문자열
      • 두 번째 매개변수: 가변인자(Arguments), 출력할 데이터
    • 형식 지정자 사용 예제
      • 정수 출력: %d 사용
        int age = 15; System.out.printf("age: %d", age);
      • 복수 데이터 출력: 지시자 숫자와 순서 맞춤 필요
        int year = 2025; System.out.printf("age: %d year: %d", age, year);
    • 개행 문자의 필요성
      • printf()는 기본적으로 개행하지 않음
      • 개행이 필요한 경우 \n을 포맷 문자열에 포함
    • 주요 형식 지정자 
    지시자 설명
    %b 불리언 값 출력 (true / false)
    %d 정수를 십진수로 출력
    %o 정수를 8진수로 출력
    %x, %X 정수를 16진수로 출력 (소문자 / 대문자)
    %f 부동 소수점 숫자 출력
    %e 지수 형식으로 부동 솟수점 숫자 출력
    %c 단일 문자 출력
    %s 문자열 출력
    %% % 기호 자체 출력실수 형식 지정자
    • 실수 형식 지정자
    class PrintEx2 {
    	public static void main(String[] args) {
    		String url = "www.codechobo.com";
    		float f1 = .10f;   // 0.10, 1.0e-1
    		float f2 = 1e1f;   // 10.0, 1.0e1, 1.0e+1
    		float f3 = 3.14e3f;
    		double d = 1.23456789;
    		System.out.printf("f1=%f, %e, %g%n", f1, f1, f1); 
    		System.out.printf("f2=%f, %e, %g%n", f2, f2, f2); 
    		System.out.printf("f3=%f, %e, %g%n", f3, f3, f3);
    		System.out.printf("d=%f%n", d);
    		System.out.printf("d=%14.10f%n", d);
    		System.out.printf("[12345678901234567890]%n");
    		System.out.printf("[%s]%n", url);
    		System.out.printf("[%20s]%n", url);
    		System.out.printf("[%-20s]%n", url); 
    		System.out.printf("[%.8s]%n", url);  
    	}
    }

    예제 코드 결과

    • 실수형 값의 출력에 따라 사용되는 지시자는 '%f', '%e', '%g'가 있다.
      • %f : 주로 사용되는 형태, 기본적으로 소수점 6자리까지 출력
      • %e : 지수 형태 출력
      • %g : 간략하게 출력할 때 사용
    • %f는 기본적으로 6자리만 출력되기 때문에 7번째 자리에서 반올림을 한다.
    • 따라서, 1.234568로 출력 됨.
    • 다만 전체 자릿수를 직접 지정할 수도 있다.
      • System.out.printf("%14.10f\n", d);
      • 이 방식은 정수 소수 포함 전체 14자리 중 소수점 10자리까지 표현하라는 뜻이다.
      • 또한 전체 자릿수보다 자릿수가 작으면 0으로 채우게 된다.
    • 지시자 '%s'에도 숫자를 추가하면 원하는 만큼의 출력을 확보하거나 일부만 출력할 수 있다.
    System.out.printf(“[%s]\n”, url);		// 문자열의 길이만큼 출력공간 확보
    System.out.printf(“[%20s]\n”, url);		// 최소 20글자 출력공간 확보 (우측정렬)
    System.out.printf(“[%-20s]\n”, url);	// 최소 20글자 출력공간 확보 (좌측정렬)
    System.out.printf(“[%.8s]\n”, url);		// 왼쪽에서 8글자만 출력

    Chapter 2.4 화면에서 입력받기

    • 2.3에서는 출력 메서드에 대해서 형식에 따른 출력을 어떻게 사용하는지에 대해 알아보았다.
    • 이번 장은 사용자에게 데이터를 키보드로 입력받는 방법에 대해서 설명한다.
    • 데이터 입력 방법은 Scanner 클래스 / InputStream 클래스 등 여러 가능한 클래스들이 있다.
    • 여기서 배우는 것은 가장 기본적이고 사용이 다루기 쉬운 Scanner클래스에 대해서 설명한다.

    아래는 Scanner를 사용하기 위한 예제 코드이다. 해당 코드로 내용을 설명하고자 한다.

    import java.util.Scanner;    // Scanner를 사용하기 위해 추가
    
    class ScannerEx { 
    	public static void main(String[] args) { 
    		Scanner scanner = new Scanner(System.in);
    
    		System.out.print(“두자리 정수를 하나 입력해주세요.>);
    		String input = scanner.nextLine();
    		int num = Integer.parseInt(input); // 입력받은 문자열을 숫자로 변환
    
    		System.out.println(“입력내용 :”+input);
    		System.out.printf("num=%d%n", num);
    	} 
    }

    실행 결과

    • 위 예제 코드를 보면 Scanner클래스 참조변수를 선언하는 것으로 시작한다.
    • 멤버변수 System.in은 키보드로부터 데이터 입력을 받겠다는 의미다.
    • 이로써, 멤버변수 System.in을 받는 scanner 객체가 생성되었다.
    • 멤버 메서드인 nextLine();를 통해 데이터 하나를 입력받도록 한다.
    • nextLine는 데이터를 문자열로 입력받기 위한 멤버 메서드 중 하나이다.
    • 매개변수로 String값을 입력받는다.
    • next()라는 메서드도 있는데, 차이는 개행문자의 포함여부이다. next()는 개행을 포함하지 않는다.
    • 이외 nextInt, nextDouble 등 각 데이터형에 따라 입력받는 메서드들이 존재한다.
    • 다만, 위 메서드들을 사용하여 입력할 경우 연속적으로 데이터를 입력받아 사용하기 까다롭다.
    • 그래서 모든 값을 String으로 받아 변환하여 처리하는 게 조금 더 수월하다고 책에서는 설명한다.

    위 코드에선 숫자가 아닌 문자 또는 기호를 입력하면 숫자로 변환하는 과정에서 오류가 발생한다.

    특히, 공백 또한 문자로 인식하기에 각별히 유의해야 한다.

     

    2.3장에서는, 출력과 입력에 대한 내용으로 printf()메서드와 Scanner클래스의 기초를 공부하였다.

    이 외, 다양한 입력 방법이 있지만, 입문 단계의 코딩에서는 Scanner 사용이 매우 유용하다.

    따라서, Stream의 개념을 배우기 전까진 Scanner 사용을 할 것으로 보인다.

     

    2.5장에서는, 데이터를 입력 출력하며 다루기 위해 사용되는 데이터형식에 대해 배우게 된다.

    논리형, 정수형, 실수형, 등등에 대한 개념이다.

     

    요즘, 조금 나태해져서 기본기를 다시 공부하는 것을 소홀히 하고 있다.

    다시 성실하게 할 수 있도록 마음을 다잡아야겠다는 생각이 든다.

     

    생 기초부터 시작한 이유가 태도를 바꾸기 위함이었으니...

Designed by Tistory.