콘솔 출력

자바에서 표준 출력을 위해 사용하는 주요 메서드는 다음과 같다

  • System.out.println
  • System.out.print
  • System.out.printf

System.out.println

콘솔 출력을 위한 가장 기본적인 메서드이다

Systme.out: 자바 언어의 일부인 객체이다

println: System.out 객체에 의해 호출되는 메서드로, 콘솔 출력을 수행한다

  • 출력할 데이터는 괄호 안에 인자(argument)로 전달된다
  • 둘 이상의 항목을 연결하여 출력할 때는 더하기 기호(+)를 사용한다
  • println은 호출될 때마다 출력 끝에 줄 바꿈(new line)을 추가한다
  • 예시: System.out.println("The answer is " + 42);

print와 차이점은 줄 바꿈 여부에서 차이가 난다

printf를 이용한 형식화된 출력(Formatting Output)

특정 형식에 맞춰 출력할 수 있는 메서드이다

특징:

  • printfprint 메서드와 유사하게 출력 후 줄 바꿈을 하지 않는다
  • C 언어의 printf 함수와 매우 유사한 동작 방식을 가진다. 즉, 여러 인자를 받을 수 있다
  • 인자 구성:
    • 형식 문자열(format string): 첫 번째 인자는 항상 형식 문자열이며, 여기에는 나머지 인자들을 위한 하나 이상의 형식 지정자(format specifiers)가 포함된다
    • 출력 값: 첫 번째 인자를 제외한 나머지 모든 인자들은 실제로 화면에 출력될 값들이다

형식 지정자의 구성

형식 지정자 %6.2f를 예로 들어 각 부분의 의미를 분석해본다

  • %: 형식 지정자의 시작을 알린다
  • 6(전체 너비): 출력될 전체 칸수를 지정한다. 예시에서는 6칸을 확보하며, 데이터가 이보다 적으면 왼쪽에 공백이 생겨 칸수를 맞춘다(우측 정렬)
  • .2(소수점 자릿수): 소수점 아래로 정확히 2자리까지 표시하도록 지정한다
  • f(변환 문자): 데이터의 타입을 지정한다. f는 부동 소수점(Floating point) 숫자를 의미하며 지정자의 끝을 나타낸다
double price = 19.8;
System.out.printf("%6.2f", price);

price = 19.8일 때, "%6.2f"19.80 (앞에 공백 포함 총 6칸)으로 출력된다

우측 정렬 및 좌측 정렬

printf 내에서 데이터가 정렬되는 방향을 제어할 수 있다

우측 정렬

  • 기본값이다. %8.2f와 같이 작성하면 전체 8칸 중 오른쪽에 데이터가 붙고, 왼쪽에 공백이 생겨 칸수를 맞춘다

좌측 정렬

  • 숫자 앞에 마이너스 기호(-)를 붙여 %-8.2f와 같이 작성한다. 이 경우 데이터가 왼쪽에 붙고, 오른쪽에 공백이 채워진다

printf에서 여러 개의 인자 사용하기

printf문을 사용하면 여러 개의 변수를 지정된 서식에 맞춰 한 번에 출력할 수 있다

코드 예시

double price = 19.8;
String name = "magic apple";
 
// 세 개의 인자를 가진 printf 문
System.out.printf("$%6.2f for each %s.", price, name);
System.out.println();
System.out.println("Wow");
  • 출력 결과:
$ 19.80 for each magic apple.
Wow
  • 첫 번째 인자: 출력 형식을 결정하는 형식 문자열(Format String)이다. 여기에는 두 개의 서식 지정자(%6.2f, %s)가 포함되어 있다
  • 서식 지정자의 매칭: 서식 지정자는 뒤따라오는 인자들과 순서대로 대응된다
    • %6.2f price (실수형)
    • %s name (문자열)
  • %6.2f의 의미: 전체 6자리를 차지하며, 소수점 아래 2자리까지 표시하라는 의미이다(앞부분의 빈 공간은 공백으로 채워짐)

System.out.prinf 서식 지정자 정리

출력하려는 데이터의 타입에 따라 적절한 변환 문자를 사용해야 한다

변환 문자출력 타입예시
d10진수 정수 (Decimal integer)%5d, %d
f고정 소수점 부동 소수점 (Fixed-point floating point)%6.2f, %f
e지수 표기법 부동 소수점 (E-notation floating point)%8.3e, %e
g일반 부동 소수점 (Java가 상황에 따라 f 또는 e 선택)%8.3g, %g
s문자열 (String)%12s, %s
c문자 (Character)%2c, %c

콘솔 입력

자바에서 표준 입력을 위해 사용하는 주요 방법는 다음과 같다

  • 패키지 및 클래스
  • Scanner 클래스
  • 주요 메서드
    • nextInt(): 정수(int)를 입력받을 때 사용
    • nextDouble(): 실수(double)를 입력받을 때 사용
    • next(): 공백 전까지의 단어(String) 하나를 입력받을 때 사용
    • nextLine(): 한 줄 전체(String)를 입력받을 때 사용

패키지와 클래스 임포트(Importing Packages and Classes)

자바 라이브러리를 활용하기 위해 클래스를 가져오는 방법이다

패키지(Packages)

자바에서는 라이브러리를 패키지라고 부른다. 패키지는 어떤 프로그램에서든 쉽게 접근할 수 있도록 정리되어 저장된 클래스들의 집합이다

import 문 사용법 특정 패키지에 속한 클래스를 사용하려면 import문을 사용하여 해당 클래스를 프로그램으로 불러와야 한다

  • 특정 클래스만 가져오기:
    • import pakageName.pakageClass;
  • 패키지 내의 모든 클래스 가져오기
    • import pakageName.*;

자동 임포트(javaa.lang) java.lang 패키지에 포함된 클래스들은 모든 자바 프로그램에 자동으로 임포트된다. 따라서 System이나 String 같은 클래스들은 별도의 import문 없이도 바로 사용할 수 있다

Scanner 클래스

자바에서 키보드 입력을 가장 간단하게 처리하는 방법은 Scanner 클래스를 사용하는 것이다. 스캐너 클래스를 사용하려면 소스 코드 파일 시작 부분에 다음 문자을 반드시 포함해야 한다 import java.util.Scanner;

Scanner 객체 생성 클래스를 사용하기 위해서는 먼저 해당 클래스의 객체를 생성해야 한다 Scanner Keyboard = new Scanner(System.in);

  • 객체 이름: 위 코드에서 객체 이름을 keyboard로 지었지만, 사용자가 원하는 어떤 이름으로도 지을 수 있다
  • 일단 객체가 생성되면, 프로그램은 Scanner 클래스에서 제공하는 다양한 메서드들을 호출하여 키보드 입력을 수행할 수 있다

숫자 입력 메서드: nextInt()와 nextDouble()

사용자가 입력한 숫자 데이터를 읽어올 때 사용한다

nextInt(): 키보드로 입력된 값을 읽어 정수 타입 변수에 할당한다

  • 예: int numberOfPods = keyboard.nextInt();

nextDouble(): 키보드로 입력된 값을 읽어 실수 타입 변수에 할당한다

  • 예: double d1 = keyboard.nextDouble();

공백의 중요성: 여러 개의 입력을 받을 때는 반드시 공백으로 구분해야 한다. 공백이란 빈칸, 탭, 줄바꿈 등을 의미한다

문자열 입력 메서드: next()

단어 단위의 문자열을 읽어올 때 사용한다

next(): 공백으로 구분된 단어 하나를 읽어온다(공백이 나타나면 읽기를 멈춘다)

작동 예시:

String word1 = keyboard.next();
String word2 = keyboard.next();
  • 입력창에 **“jelly beans”**라고 입력할 경우:
    • word1에는 **“jelly”**가 저장된다
    • word2에는 **“beans”**가 저장된다

Scanner 클래스를 이용한 콘솔 입력 메서드: nextLine()

nextLine() 메서드는 앞서 배운 next()와 달리 사용자가 입력한 한 줄 전체를 읽어올 때 사용한다

기본 기능:

  • 한 줄 읽기: 키보드로 입력한 문자열 중 엔터 키를 누르기 전까지의 모든 내용을 한 번에 읽는다
  • 코드 예시: String line = keyboard.nextLine();
    • 위 코드는 입려된 한 줄 전체를 읽어 line이라는 변수에 저장한다

줄바꿈 문자와 엔터 키

  • 입력의 끝: 자바에서 한 줄의 끝은 이스케이프 시퀀스인 '\n'으로 표시된다
  • 엔터 키의 역할: 사용자가 Enter 키를 누르면 시스템 이를 '\n' 문자로 인식하며, 이는 화면에서 현재 줄이 끝나고 다음 줄이 시작됨을 의미한다

nextLine()의 상세 작동 원리

  • 읽기 방식: nextLine() 메서드는 텍스트를 읽을 때 마지막에 있는 '\n' 문자까지 모두 읽어 들인다
  • 다음 입력에 미치는 영향: \n까지 읽어서 처리하기 때문에, 다음에 오는 입력 메서드는 자연스럽게 다음 줄의 시작점부터 데이터를 읽을 수 있게 된다
  • 반환 값의 특징: nextLine()이 줄바꿈 문자(\n)를 읽기는 하지만, 실제로 반환하는 문자열 값에는 \n을 포함하지 않는디
    • 예: 사용자가 “Hello”라고 치고 엔터를 눌렀다면, nextLine()은 “Hello\n”을 읽어 들이지만 변수 line에 저장되는 값은 딱 “Hello”이다

Scanner 클래스 메서드

숫자 데이터 입력 메서드

메서드반환 자료형설명
nextInt()int다음 정수 값을 읽음
nextLong()long더 큰 범위의 정수 값을 읽음
nextByte()bytebyte 범위의 정수 값을 읽음
nextShort()shortshort 범위의 정수 값을 읽음
nextDouble()double배정밀도 실수(소수) 값을 읽음
nextFloat()float단정밀도 실수(소수) 값을 읽음

문자열 및 논리형 입력 메서드

next(): 다음 구분자(공백) 전까지의 문자열을 읽어 반환한다. 즉, 단어 하나를 읽을 때 적합하다

nextBoolean(): true 또는 false 문자열을 읽어 boolean 값으로 반환한다(대소문자 구분 없음)

nextLIne(): 현재 줄의 나머지 전체를 읽어 반환한다

useDelimiter(New_Delimiter): 기본값인 공백 문자 대신 사용자가 원하는 문자열을 새로운 구분자로 설정할 수 있다

  • 예를 들어, 쉼표(,)를 기준으로 데이터를 분리하고 싶을 때 유용하다