> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/base-language/java/beginner/standard-io/standard-error-output.md).

# 표준 오류 출력

## 표준 오류 출력 스트림

이 문서에서는 표준 에러 출력(Standard Error Stream)에 대해서 살펴본다.

### 표준 오류란

표준 오류(Standard Output)이란 프로그램에서 외부 환경으로 오류 메세지를 출력하는 것을 말한다. 외부 환경은 표준 출력과 동일하게 운영체제(OS)라고 볼 수 있으며, 이러한 연결은 형태와 개수 등이 정해져 있기 때문에 자바에서 임의로 만들거나, 지울 수 없도록 되어 있다. 자바에서 표준 오류 출력 스트림을 이용하기 위해서는 `System.err`을 사용하도록 되어 있으며, `System.err` 이란 **System 도구 안에 있는 err란 이름의 요소**를 의미한다고 볼 수 있다

### 표준 오류 출력 명령

표준 오류 출력 명령 중 자주 사용되는 것들을 정리하면 다음과 같다.

* `System.err.print(내용)` : 표준 오류 출력 통로로 내용을 형태 그대로 출력한다.
* `System.err.println(내용)` : 표준 오류 출력 통로로 내용을 형태 그대로 출력한 뒤 개행문자를 출력한다.
* `System.err.printf(형식, 값...)` : 표준 오류 출력 통로로 형식과 값을 결합한 뒤 출력한다. C언어의 `printf` 명령과 유사하다.

결론적으로 [표준 출력(System.out)](http://www.sysout.co.kr/home/webbook/page/read/1318)과 동일한 명령을 가지고 있다.

### 표준 출력과의 차이점 및 주의 사항

표준 출력과 동일한 듯 보이지만 이용 상의 차이점이나 주의 사항에 대해서 살펴본다.

#### 출력 색상

실행 중인 IDE에 따라 다르지만 대부분의 IDE에서는 일반 출력과 오류 출력을 구분하여 보여준다. 디자인 적인 측면이 아니라 오류 메세지를 강조하여 표현하기 위함이다. 윈도우 커맨드 라인이나 리눅스 쉘, JUnit 등 적용되지 않는 경우도 상당하기 때문에 색상을 이용하여 무언가를 하는 것은 올바르지 않은 사용법이다.

#### 표준 출력과 혼용하는 경우

표준 오류 출력은 표준 출력과 혼용하여 사용하지 말아야 한다. 표준 출력과 표준 오류 출력은 각각 다른 통로를 이용하기 때문에 실행 순서와 출력 순서가 동일하다고 보장할 수 없다. 따라서 실행할 때마다 결과가 다른 순서로 나오는 것을 확인할 수 있다.

```java
System.err.println("오류 메세지");
System.out.println("일반 메세지");
System.err.println("오류 메세지");
System.out.println("일반 메세지");
```

위의 코드를 여러 번 실행하면 문제점을 파악할 수 있다.
