정의 및 사용 방법
- PHP 버전
- 4+
printf() 함수는 지정한 특정 포맷(format, 형식)에 맞춰 구성된 문자열을 출력합니다.
이 함수는 템플릿처럼 특정 포맷으로 규격화된 문자열을 출력할 때 유용합니다.
printf(특정 포맷, 포맷 지정 데이터_1, 포맷 지정 데이터_2, ..., 포맷 지정 데이터_N)
기본 예제
/*
* 템플릿처럼 포맷화할 문자열: "XX에는 XX권의 책이 있습니다."
*/
printf('%s에는 %u권의 책이 있습니다.', '도서관', 15);
// 출력: '도서관에는 15권의 책이 있습니다.'
/*
* printf() 자체가 직접 문자열을 출력하는 함수입니다.
* %s는 문자열 포맷 => '도서관'
* %u는 10진수 포맷 => 15
* 매개변수의 순서대로 각각 매칭됩니다.
*/
printf() 함수는 포맷에 맞게 문자열을 구성하여 화면에 직접 출력합니다.
알아두세요!
sprintf() 함수는 printf() 함수와 동일하게 포맷에 맞게 문자열을 구성하지만, 화면에 직접 출력하지 않고 구성된 문자열을 반환합니다.
구문
printf(string $format, mixed ...$values): int
매개변수
$format
포맷화할 문자열입니다.
이 문자열에는 0개 이상의 포맷 지정자(format specifiers)가 포함되어 있으며, 이 포맷 지정자에 맞게 뒤에 오는 값들이 변환됩니다.
포맷 지정자는 %로 시작하며, 그 뒤에 데이터 유형을 나타내는 특별한 의미의 문자가 따라옵니다.
포맷 지정자
다음은 많이 사용되는 포맷 지정자입니다.
| 포맷 지정자 | 설명 | 예제 | 출력 결과 |
|---|---|---|---|
%s |
문자열(string) | printf('이름: %s', 'Alice') |
'이름: Alice' |
%d |
정수(10진수, decimal) | printf('나이: %d', 30) |
'나이: 30' |
%f |
부동소수점 숫자(float) |
printf('가격: %.2f', 19.99) |
'가격: 19.99' |
%u |
부호 없는 10진수(unsigned decimal number, 0보다 크거나 같은 수를 사용할 때) | printf('수량: %u', 10) |
'수량: 10' |
%e |
지수 표기법(소문자) | printf('지수 표기법: %e', 1234.56) |
'지수 표기법: 1.234560e+03' |
%E |
지수 표기법(대문자) | printf('지수 표기법: %E', 1234.56) |
'지수 표기법: 1.234560E+03' |
%c |
ASCII 값에 따른 문자(character) | printf('문자: %c', 65) |
'문자: A' |
%p |
포인터(PHP 7.0.0 이상) | printf('포인터: %p', $variable) |
'포인터: 0x...' |
위 표에서 언급된 것 이외에도 다른 포맷 지정자가 존재합니다. php.net - printf#Parameters를 참조하세요!
...$values
$format의 포맷 문자열 내의 포맷 지정자와 순서대로 일치하는 값들입니다.
반환 값
포맷 문자열과 매개변수로 전달된 값들에 따라 포맷화된 문자열의 길이를 정수로 반환합니다.
변경 이력
| 버전 | 설명 |
|---|---|
| 8.0.0 | 실패 시 더 이상 false를 반환하지 않습니다. 이전 버전에서는 실패 시 false를 반환했습니다. |
| 8.0.0 | 전달된 인자(매개변수)의 개수가 0개이면 ValueError 예외를 발생시킵니다. (이전 버전에서는 E_WARNING 경고가 발생했습니다.) |
| 8.0.0 | 필수 인자보다 적은 개수의 인자가 전달되면 ArgumentCountError 예외를 발생시킵니다. (이전 버전에서는 E_WARNING 경고가 발생했습니다.) |
활용 예제
printf() 함수는 문자열을 포맷화하여 출력하는 데 매우 유용한 함수입니다. 여러 데이터를 특정 포맷으로 변환해 문자열로 출력할 때 활용할 수 있으며, 특히 반복적인 작업이나 다국어 지원, 템플릿 문자열 출력에 매우 적합합니다. 아래에 실전에서 사용할 수 있는 몇 가지 printf() 활용 예제를 소개합니다.
배열을 이용한 템플릿 활용 예제(간단한 버전)
이 예제에서는 printf() 함수를 활용하여 문자열의 포맷을 템플릿으로 사용하고,
배열의 데이터를 반복적으로 처리하여 여러 항목의 정보를 포맷화된 문자열로 출력하는 방법을 보여줍니다.
// 데이터 배열
$items = [
['quantity' => 10, 'city' => '서울'],
['quantity' => 5, 'city' => '부산'],
['quantity' => 12, 'city' => '인천']
];
// 템플릿 문자열 정의
$template = '%s 도서관에는 %u권의 책이 있습니다.';
// 배열의 각 항목을 포맷화하여 출력
foreach ($items as $item) {
printf($template, $item['city'], $item['quantity']);
}
// 출력 결과:
// '서울 도서관에는 10권의 책이 있습니다.'
// '부산 도서관에는 5권의 책이 있습니다.'
// '인천 도서관에는 12권의 책이 있습니다.'
코드 부연설명
foreach() 반복문은 배열이나 객체를 순회해서 반복으로 처리할 때 사용하는 대표적인 구문입니다.
배열을 이용한 템플릿 활용 예제(복잡한 버전)
배열의 데이터를 반복 처리하면서 printf()를 활용해 각 항목의 정보를 포맷화된 문자열로 출력하는 예제입니다. 이 예제는 도서 정보가 담긴 배열을 순회하면서 각 도서의 제목, 저자, 남은 수량을 지정된 포맷으로 출력합니다.
// 데이터 배열
$books = [
['title' => 'PHP 프로그래밍', 'author' => '김철수', 'copies' => 3],
['title' => 'JavaScript 고급', 'author' => '이영희', 'copies' => 5],
['title' => '데이터베이스 설계', 'author' => '박지훈', 'copies' => 2]
];
// 템플릿 문자열 정의
$template = '도서 제목: %s, 저자: %s, 남은 수량: %u권';
// 배열의 각 항목을 포맷화하여 출력
foreach ($books as $book) {
printf($template, $book['title'], $book['author'], $book['copies']);
}
// 출력 결과:
// '도서 제목: PHP 프로그래밍, 저자: 김철수, 남은 수량: 3권'
// '도서 제목: JavaScript 고급, 저자: 이영희, 남은 수량: 5권'
// '도서 제목: 데이터베이스 설계, 저자: 박지훈, 남은 수량: 2권'
JSON 데이터를 이용한 포맷화
JSON 데이터를 받아와 printf()로 포맷화하여 출력하는 예제입니다. API 응답 등을 처리할 때 유용합니다. 이 예제에서는 JSON 데이터를 받아와 포맷 지정자를 사용해 사람이 읽기 쉬운 포맷으로 데이터를 출력합니다.
// JSON 데이터
$jsonData = '{
"name": "김철수",
"age": 30,
"city": "서울"
}';
// JSON 데이터를 배열로 변환
$user = json_decode($jsonData, true);
// 포맷화된 문자열을 생성해서 출력
printf('이름: %s, 나이: %u, 도시: %s', $user['name'], $user['age'], $user['city']);
// 출력 결과: '이름: 김철수, 나이: 30, 도시: 서울'
다국어 번역에 이용하는 예제
다국어 지원 시, printf()를 사용해 텍스트를 동적으로 변환해 출력하는 데 활용할 수 있습니다.
하나의 코드로 여러 언어에 맞춰 문자열을 생성하는 것이 실전에서 유용하게 사용될 수 있습니다.
그러면 영어와 한글 두 가지 템플릿을 사용하는 예제 코드를 보여드리겠습니다.
// 다국어 번역 템플릿
$templates = [
'en' => 'Hello %s, welcome to %s!',
'ko' => '%s님, %s에 오신 것을 환영합니다!'
];
// 다국어 국가 이름
$countries = [
'en' => 'South Korea',
'ko' => '한국'
];
// 사용자 데이터
$name = 'Alice';
// 언어 설정(예: 영어와 한글)
$language = 'ko'; // 'en' 또는 'ko'
// 선택된 언어의 템플릿과 국가명을 사용해 포맷화된 문자열 생성
printf($templates[$language], $name, $countries[$language]);
// 출력 결과 (ko): 'Alice님, 한국에 오신 것을 환영합니다!'
$language = 'en';
printf($templates[$language], $name, $countries[$language]);
// 출력 결과 (en): 'Hello Alice, welcome to South Korea!'
이렇게 하면 동일한 코드로 여러 언어를 지원할 수 있고, 각 언어에 맞는 템플릿을 손쉽게 관리할 수 있습니다.
참고문헌
같이 보기
- PHP sprintf() 함수 – 특정 포맷으로 문자열 만들기
- PHP preg_replace() 함수
- PHP number_format() 함수 – 숫자의 천 단위 콤마 기호 포맷
- PHP date() 함수 – 날짜와 시간을 원하는 형식의 문자열로 만들기
- PHP date format – 날짜와 시간 형식 깔끔 정리
- PHP echo – 화면에 출력하는 가장 기본 방법
- PHP print – 화면에 출력하는 또 다른 기본 방법
- PHP의 echo와 print 비교 – 차이점과 사용법 알아보기
- PHP var_dump() 함수 – 변수의 타입·길이·값까지 출력
- PHP print_r() 함수 – 변수의 정보를 사람이 읽기 쉽게 출력