본문 바로가기
Java/Java

콘솔 출력 메서드 (println, print, printf)

by 박채니 2022. 2. 25.

안녕하세요, 코린이의 코딩 학습기 채니 입니다.

 

개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.


콘솔 창에 내용을 출력하기 위하여 System.out.println( ~ )을 계속해서 사용해왔습니다.

System.out.println(); ?

- jdk에서 제공하는 콘솔 출력 메소드

 

콘솔 출력 메소드는 3가지의 종류가 있습니다.

 

① 줄 바꾸며(개행) 출력하기 - System.out.println()

소괄호 안의 내용을 출력하고 자동으로 줄을 바꿉니다.

 

package kh.java.print;

public class PrintStudy1 {
	public static void main(String[] args) {
		PrintStudy1 study1 = new PrintStudy1();
		study1.test1();
	}
	
	public void test1() {
		System.out.println("가나다");
		System.out.println("라마바사");
	}
}

@콘솔출력값
가나다
라마바사

 

② 개행 없이 출력하기 - System.out.print()

package kh.java.print;

public class PrintStudy1 {
	public static void main(String[] args) {
		PrintStudy1 study1 = new PrintStudy1();
		study1.test1();
	}
	
	public void test1() {
		System.out.print("가나다");
		System.out.print("라마바사");
	}
}

@콘솔출력값
가나다라마바사

동일한 코드이지만 출력 값은 완전히 다르게 나온 것을 확인할 수 있습니다.

package kh.java.print;

public class PrintStudy1 {
	public static void main(String[] args) {
		PrintStudy1 study1 = new PrintStudy1();
		study1.test1();
	}
	
	public void test1() {
		System.out.println("가나다");
		System.out.println("라마바사");
		
		System.out.print("아");
		System.out.print("자");
		System.out.print("차");
		
	}
}

@콘솔출력값
가나다
라마바사
아자차

아무리 print 메소드를 따로따로 적었다고 하더라도, print는 값 출력 후 커서가 개행 되지 않고 출력값 바로 옆에 위치하기 때문에 위처럼 '아자차' 연달아서 나오게 됩니다.

 

print 메소드를 사용하고 개행을 하고 싶다면..?

\n 개행문자를 사용하면 됩니다.

 

package kh.java.print;

public class PrintStudy1 {
	public static void main(String[] args) {
		PrintStudy1 study1 = new PrintStudy1();
		study1.test1();
	}
	
	public void test1() {
		System.out.println("가나다");
		System.out.println("라마바사");
		
		// \n 개행문자 사용
		System.out.print("아\n");
		System.out.print("자\n");
		System.out.print("차\n");
		
	}
}

@콘솔출력값
가나다
라마바사
아
자
차

\n 을 여러번 쓰면 사용한 수만큼 개행됩니다.

package kh.java.print;

public class PrintStudy1 {
	public static void main(String[] args) {
		PrintStudy1 study1 = new PrintStudy1();
		study1.test1();
	}
	
	public void test1() {
		System.out.println("가나다");
		System.out.println("라마바사");
		
		// \n 개행문자 사용
		System.out.print("아\n\n\n");
		System.out.print("자\n");
		System.out.print("차\n");
		
	}
}

@콘솔출력값
가나다
라마바사
아


자
차

방금 사용한 \n는 Escape 문자라고 합니다.

 

※ Escape 문자

- 인쇄할 수 없거나 키보드 출력 불가한 문자를 표현할 때 사용 (\ + 문자)

\n : 개행문자

\t : 탭

\" : 문자 그대로의 " (문자열의 시작/끝을 의미하는 "가 아님)

\\ : 문자 그대로의 \ (Escape 문자의 시작을 의미하는 \가 아님)

 

public void test2() {
	System.out.println("안\t녕\t하\t세\t요");
  	//System.out.println("안	녕	하	세	요"); 와 동일
	System.out.println("그는 말했다. \"잘가\"");
	System.out.println("C:\\Workspaces\\java_workspace\\01_HelloWorld");
  	//System.out.println("C:\Workspaces\java_workspace\01_HelloWorld"); -> Escape \로 인식하여 에러발생

}
    
@콘솔출력값
안	녕	하	세	요
그는 말했다. "잘가"
C:\Workspaces\java_workspace\01_HelloWorld

 

③ 형식대로 출력하기 - System.out.printf()

System.out.printf("출력포맷", 인자, 인자 ...) 의 형태

- 출력 포맷을 지정하는 메소드로 " " 안에 출력하고자 하는 형식을 지정합니다.

- %d, %o, %x : 각각 정수로 넘겨받아 10진수, 8진수, 16진수로 출력

- %f : 실수 (소수점 자리수 지정 : %.원하는 자리수f - 반올림 처리)- %b : 논리형- %c : 문자- %s : 문자열

 

- %n, \n : 개행문자 (printf는 개행처리가 자동으로 안되어서 입력해줘야함)- %% : %를 문자로 표현 (Escaping 처리)

 

public void test1() {
	//10 == 10.0의 결과는 true입니다.
	int a = 10;
	double b = 10.0;
		
	System.out.printf("%d == %f의 결과는 %b입니다.\n", a, b, a == b); //소수점 자리 지정 X
	System.out.printf("%d == %.1f의 결과는 %b입니다.\n", a, b, a == b); //소수점 자리 지정 O
}

@콘솔출력값
10 == 10.000000의 결과는 true입니다.
10 == 10.0의 결과는 true입니다.

double 형의 경우 소수점 자리를 지정해주지 않으면 소수점 6자리까지 자동으로 출력 되기 때문에 소수점 아래 1자리까지만 나오게끔 하기 위하여 %.1f로 소수점 자리를 지정해주었습니다.

 

public void test1() {
	// 'a' == 97의 결과는 true입니다.
	char ch = 'a';
	int inum = 97;
		
	System.out.printf("'%c' == %d의 결과는 %b입니다.\n", ch, inum, ch == inum);
    
    //println으로 출력시
    //System.out.println("'" + ch + "'" + " == " + inum + "의 결과는 " + (ch == inum) + "입니다.");
}

@콘솔출력값
'a' == 97의 결과는 true입니다.

char와 int의 비교도 위와 같이 할 수 있습니다.

println으로 하면 " ~ " + " ~ " 로 묶어줘야하는데, 코드가 훨씬 간결해졌죠?

 

이 외에도 %에는 너비와 정렬 기능이 있는데요!

코드를 먼저 살펴 보겠습니다.

public void test1() {
	//이름	나이	성별
	System.out.printf("%s	%s	%s\n", "이름", "나이", "성별");	//tab 사용
	System.out.printf("%10s%10s%10s\n", "이름", "나이", "성별");	//% 사용
	System.out.printf("%-10s%10s%10s\n", "이름", "나이", "성별");
}

@콘솔출력값
이름	나이	성별
        이름        나이        성별
이름                나이        성별

tab으로 간격을 벌려줘도 되지만 (%원하는 간격너비)로 간격을 원하는 대로 조절해줄 수 있습니다.

너비 : %10s → 10byte 공간의 값을 대입 (우측 정렬)

정렬 : - (flag문자) 추가 시 좌측 정렬

 

↓ printf 참고자료