โ๏ธ ์ฒ์ Java๋ฅผ ๊ณต๋ถ ํ ๋, "Hello World" ๋ผ๋ ๋ฌธ์์ด์ ์ฝ์์ฐฝ์ ์ถ๋ ฅํ๋ ๊ฒ ๋ถํฐ ์์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ต๊ทผ๊น์ง ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ฉด์ ์ฌ๋ฌ ์ ๋ณด๋ฅผ ํ์ธํ๊ธฐ ์ํด System.out.println() ๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ค.
ํ์ง๋ง CTO๋๊ป์ System.out.println()๋ฅผ ์ง์ํ๊ณ Log ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์จ์ ํ์ธํ๋ผ๊ณ ํ์ ์ ๋ฌป์ง๋ ๋ฐ์ง์ง๋ ์๊ณ Log ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
์ด๋ฒ ์๊ฐ์๋ ์ต๊ทผ ๋ฉํ ๋ง ์ค์ ๋ฉํ ๋๊ป์ ์ ์ค์ ๊ฐ๋ฐ ์์ System.out.println()์ ์ฌ์ฉํ๋ฉด ์๋๋์ง, ์ Log ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด์ผ ํ๋์ง ์ง๋ฌธํด์ฃผ์ จ๋๋ฐ ์ ๊ทธ๋ฐ์ง ์์๋ณด์!
System.out.println()
ํด๋น ๋ช ๋ น์ด๋ java.lang ํจํค์ง์ ์ํ System ํด๋์ค์ ํด๋์ค ํ๋๋ก ์ ์ธ๋์ด ์๋ PrintStream ํด๋์ค์ ๋ฉ์๋์ด๋ค.
System.class
ํ์ค ์ ๋ ฅ๊ณผ ํ์ค ์ถ๋ ฅ ๊ทธ๋ฆฌ๊ณ ์ค๋ฅ ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ ๊ณตํ๋ ํด๋์ค๋ก ์ธ์คํด์คํ๊ฐ ๋ถ๊ฐ๋ฅํ ํด๋์ค์ด๋ค. ๋ํ, ์ธ๋ถ์ ์ผ๋ก ์ ์๋ ์์คํ ์ ๊ด๋ จํ ์์ฑ์ด๋ ํ๊ฒฝ ๋ณ์ ๋ฑ์ ์์ธ์ค ํ ์ ์๊ณ , ํ์ผ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๋ ์๋จ ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด์ ๋ณต์ฌํ๋ ์๋จ์ผ๋ก ์ฌ์ฉ ํ ์ ์๋ ํด๋์ค์ด๋ค.
ํด๋์ค ํ๋๋ก PrintStream, InputStream ํด๋์ค๋ฅผ ์ฐธ์กฐํ๊ณ ์์ผ๋ฉฐ, PrintStream ํด๋์ค๋ error, out ๋ ๊ฐ์ ํด๋์ค ๋ณ์๋ก ์ ์ธํ๋ค.
๋ํ์ ์ธ ๋ฉ์๋ ์ดํด๋ณด๊ธฐ
๐ Syetem.gc() → GC๋ฅผ ์คํํ๋ค.
๐ System.out.println() → PrintStream ํด๋์ค๋ฅผ ์ด์ฉํด ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ค.
๐ System.nanoTime() → ์คํ ์ค์ธ JVM์ ํ์ฌ ๊ฐ์ ๋๋ ธ์ด๋ก ๋ฆฌํดํ๋ค.
PrintStream.class
FilterOutputStream ํด๋์ค๋ฅผ ์์ ๋ฐ๋ ํด๋์ค๋ก ๋ค์ํ ์ ๋ ฅ๊ฐ์ ์ฝ์์ฐฝ์ ์ถ๋ ฅ ํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ๋ค๋ฅธ ์ถ๋ ฅ ์คํธ๋ฆผ๊ณผ ๋ฌ๋ฆฌ IOException ์์ธ๋ฅผ ๋ฐ์ํ์ง ์๋๋ค. ํด๋น ํด๋์ค๋ก ์ถ๋ ฅ๋ ๋ชจ๋ ๋ฌธ์์ด๋ค์ ํ๋ซํผ์ ์ธ์ฝ๋ฉ์ ์ด์ฉํด byte๋ก ๋ณํ๋๋ค.
์ ์ฌ์ฉ์ ์ง์ํ๋๊ฑธ๊น?
์ง๊ธ๊น์ง ์ด๋ค ์ํฉ์์ System.out.println()์ ์ฌ์ฉํ์๊น? ์ฃผ๋ก ๋ฐ์ดํฐ๊ฐ ํ์ฌ ์ด๋ค ๊ฐ์ ๊ฐ์ง๊ณ ์๋์ง, ๋ด๊ฐ ์๋ํ๋๋ก ์กฐ๊ฑด๋ฌธ์ด ์์ฑ๋์๋์ง, for ๊ตฌ๋ฌธ์์ ๋ช ๋ฒ์งธ ๋ฃจํ์ ๋ฐ์ดํฐ๊ฐ์ด ๋ฌด์์ธ์ง ๋ฑ์ ์ํฉ์์ ์ฌ์ฉํ์๋ค. (๋๋ถ๋ถ ๋๋ฒ๊น
์ ํตํด ํ์ธ ๊ฐ๋ฅํ๋ค. ๋ค๋ง, ๋ด๊ฒ ์์ง ์ต์ํ์ง ์์ ๋ฟ๐ฆ)
๊ทธ๋ ๋ค๋ฉด ๋ค์ Java๋ฅผ ์ฒ์ ๋ฐฐ์ธ ๋๋ก ๋์๊ฐ์, "Hello Wolrd" ๋ผ๋ ๋ฌธ์์ด์ System.out.println() ์ผ๋ก ์ฝ์์ ์ถ๋ ฅ ํ์ ๋ ํ์ฌ ์์คํ ์ ๋ํ ๊ธฐ๋ณธ ์ ๋ณด๊ฐ ํจ๊ป ์ถ๋ ฅ๋์๋๊ฐ? ์ค์ง "Hello Wolrd" ๋ผ๋ ๋ฌธ์์ด๋ง ์ถ๋ ฅ๋์๋ค.
์ฆ, System.out.println()์ ์ค์ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ์ ๋๋ ํ์ฌ ์์คํ
์ ๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ์ ์ ์๋ค. ๋ ๋์๊ฐ ์์ธ ๋ฐ์ ์, ์ฝ์ ์ฐฝ์ ์ถ๋ ฅ๋ง ํ๊ธฐ ๋๋ฌธ์ ํด๋น ๋ฉ์ธ์ง๋ฅผ ๋์ค์ ๋ค์ ํ์ธ ํ ์๊ฐ ์๋ค.
(๋ฌผ๋ก ๊ฐ๋ฐ์๊ฐ ์ง์ ํ์ฌ ์ํ ๋ฑ์ ๋ด์ ํ์ผ๋ก ์ ์ฅํ๊ฒ๋ ํ ์๋ ์๋ค. ๋ฒ๊ฑฐ๋ก์ธ ๋ฟ!)
์ด๋ฌํ ๋ฌธ์ ์ ์ผ๋ก ์ธํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ๋ถ์ํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ์ ํฐ ์ด๋ ค์์ด ์๋ค. ๋๋ฌธ์ ์กฐ๊ธ ๋ ์์ํ๊ฒ ๊ฐ๋ฐ ํ ์ ์๋๋ก Log ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
Logger
Log4j, Slf4j ๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์กด์ฌํ์ง๋ง Java์์๋ Logger๋ผ๋ ์์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ํ๋ค. Java์ Logger๋ ์ด 7๋จ๊ณ์ ๋ ๋ฒจ๋ก ๋๋์ด ๋ก๊น ์ ํ ์ ์๋๋ก ์ ๊ณตํ๋ค.
- SEVERE (High Level)
- WARNING
- INFO
- CONFIG
- FINE
- FINER
- FINEST (Low Level)
Logger ํด๋์ค์ ์์ฑ์๋ protected๊ฐ ์ ์ธ๋์ด ์๊ธฐ ๋๋ฌธ์ new ์์ฑ์๋ฅผ ์ด์ฉํด์ ๋ณ์ ์ ์ธ์ ์ผ๋ฐ์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ๋ค. ํ์ง๋ง Logger.getLogger() ๋ฉ์๋๋ฅผ ์ด์ฉํด ๊ฐ์ฒด ์์ฑ์ด ๊ฐ๋ฅํ๋ฐ ํด๋์ค์ ์ด๋ฆ๊ณผ ํ์ํ๋ค๋ฉด ๋ฆฌ์์ค ์ด๋ฆ์ ๋งค๊ฐ ๋ณ์ ์ธ์๋ก ๋ฃ์ด์ผ ์์ฑ ํ ์ ์๋ค.
๋ณดํต ๋ฉ์๋ ๋ด์์ ํธ์ถํ๊ธฐ๋ณด๋ค๋ ํด๋์ค ๋ณ์๋ก ๋ง๋ค์ด ์ฌ์ฉํ๋๋ฐ, ์์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ ํด๋์ค์ ์ด๋ฆ์ ๋ฃ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ๋ฉ์๋ ๋ณ๋ก ์ง์ญ ๋ณ์๋ก ๋ง๋ค์ด ์ฌ์ฉํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
private static final Logger logger = Logger.getLogger(LoggerTest.class.getName());
์์ ์ฝ๋์ฒ๋ผ private, statitc, final ์ ์ด์์ ํจ๊ป ์ ์ธํ๋ฉด ํด๋น ํด๋์ค๋ฅผ ์์๋ฐ๋ ์์ ํด๋์ค์์๋ ๋ถ๋ชจ ํด๋์ค์ logger๋ฅผ ํธ์ถ ํ ์ ์๊ณ , ์ฌ์ ์๋ ๋ถ๊ฐ๋ฅํ๋ฉฐ, ํด๋น ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋ ํ JVM์ด ์ข ๋ฃ๋ ๋๊น์ง ๋ฉ๋ชจ๋ฆฌ์ ๋จ์์๊ฒ ๋๋ค.
logger.info("Hello");
logger.log(Level.WARNING, "์ํํ ์ํ!");
/*
May 19, 2021 4:29:36 PM composition.interfaceComposition.InterfaceTest main
์ ๋ณด: hello
May 19, 2021 4:29:36 PM composition.interfaceComposition.InterfaceTest main
๊ฒฝ๊ณ : ์ํํ ์ํ!
*/
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ฏ, ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ๋ฌ ๋ ๋ฒจ์ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅ ํ ์ ์๋ค.
์ ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์๊น?
๋จผ์ JDK 1.4๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ log4j๊ฐ ์์ฉํํ์ด ์์๊ธฐ์ ๊ตณ์ด Logger๋ฅผ ์ฐพ์ ์ธ ํ์๊ฐ ์์๋ค๊ณ ํ๋ค. ์ด๋ ๋จํธ์ ์ธ ์ด์ ์ด๊ณ , ๋ ํฐ ์ด์ ๋ ๋ค๋ฅธ Log ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋นํด ์ฑ๋ฅ ์ ์ด์๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋นํด ํผํฌ๋จผ์ค๊ฐ ๋๋ฆฌ๋ค.
๐ FINE, FINER, FINEST ๋ก๊ทธ๊ฐ ์๋ฏธํ๋ ๊ฒ์ ํ์ ํ๊ธฐ ํ๋ค๋ค.
๐ ๊ฐ๋ฐ์๊ฐ Custome Level์ ๊ตฌํ ํ ์ ์๋๋ฐ, Custom Level์ ์ด์ฉํด ๋ก๊ทธ ์ถ๋ ฅ ์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ๋ค.
๐ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋นํด ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด ์ ๋ค.
๐ค ์ต๊ทผ๋ถํฐ ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด์ ์๋ฌด ์๋ฏธ๋ ๋ชจ๋ฅธ ์ฑ ์ฌ์ฉํ๊ณ , ์ ์ ๊ฐ๋ฐ์๋๋ค๊ป์ ์๋ฒ์ ์์ธ ๋ก๊ทธ ํ์ธํด๋ณด๋ผ๊ณ ํ์ค ๋ ๊ทธ ์ด์ ๋ฅผ ์ ํํ ํ์ ํ์ง ๋ชปํ๋๋ฐ, ์ด๋ฒ ์๊ฐ์ ํตํด์ ์ ๋ก๊ทธ๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง ํ์ ํ ์ ์๊ฒ ๋์๋ค.
๋ํ, ์ด๋ฒ ์๊ฐ์ ํตํด ๊ทธ์ ๋ก๊ทธ๋ฅผ ์ฐ์ด๋ณด๋ฉฐ ์ํ๋ฅผ ํ์ธํ๊ธฐ๋ณด๋จ ๋๋ฒ๊น ๊ณผ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์๋ ์ญ๋์ ํค์์ผ๊ฒ ๋ค๊ณ ๋๊ผ๋ค.
'Programming > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
F012 - Annotation (0) | 2021.05.24 |
---|---|
F011 - java.lang.ref (0) | 2021.05.19 |
F009 - Inheritance, Composition (0) | 2021.05.18 |
F008 - Garbage Collector (2) | 2021.05.16 |
F007 - JVM : Memory Architecture (0) | 2021.05.14 |