JavaRush /Java Blog /Random-KO /์‹œ๊ฐ„ ๋ฐ ๋‚ ์งœ ์ž‘์—…์„ ์œ„ํ•œ ์ง๊ด€์ ์ด๊ณ  ๊ฐ•๋ ฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งˆ์นจ๋‚ด Java(1๋ถ€)์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค...
theGrass
๋ ˆ๋ฒจ 24
ะกะฐั€ะฐั‚ะพะฒ

์‹œ๊ฐ„ ๋ฐ ๋‚ ์งœ ์ž‘์—…์„ ์œ„ํ•œ ์ง๊ด€์ ์ด๊ณ  ๊ฐ•๋ ฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งˆ์นจ๋‚ด Java(1๋ถ€)์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
Java๋Š”     ๋งˆ์นจ๋‚ด ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ง๊ด€์ ์ด๊ณ  ์•ˆ์ •์ ์ธ ๋ฐฉ๋ฒ•์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ ์งœ์™€ ์‹œ๊ฐ„์˜ ์›์น™์€ ๋งŽ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ธฐ๋ณธ์ž…๋‹ˆ๋‹ค. ์ƒ๋…„์›”์ผ, ๋Œ€์—ฌ ๋‚ ์งœ, ์ด๋ฒคํŠธ ์‹œ๊ฐ„, ๋งค์žฅ ์˜์—… ์‹œ๊ฐ„ ๋“ฑ ๋‹ค์–‘ํ•œ ์‚ฌํ•ญ์€ ๋ชจ๋‘ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜์ง€๋งŒ Java SE๋Š” ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Java SE 8 ๋ถ€ํ„ฐ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ์ž‘์—…์„ ์œ„ํ•œ ์ž˜ ๊ตฌ์กฐํ™”๋œ API๋ฅผ ์ œ๊ณตํ•˜๋Š” java.time ํŒจํ‚ค์ง€ ์„ธํŠธ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
๋ฐฐ๊ฒฝ
Java๊ฐ€ ์ฒ˜์Œ ์ถœ์‹œ๋˜์—ˆ์„     ๋•Œ ๋ฒ„์ „ 1.0 ์—์„œ๋Š” ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ์ž‘์—…์„ ์œ„ํ•œ ์œ ์ผํ•œ ํด๋ž˜์Šค๋Š” java.util.Date ์˜€์Šต๋‹ˆ๋‹ค . ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์•Œ์•„์ฐจ๋ฆฐ ๊ฒƒ์€ "๋‚ ์งœ"๋ฅผ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด๋Š” 1970๋…„ 1์›” 1์ผ๋ถ€ํ„ฐ ์ธก์ •๋œ ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์˜ ์ •ํ™•ํ•œ ์ˆœ๊ฐ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Date ์˜ toString() ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹œ์Šคํ…œ์˜ Java ์„ค์ • ์— ์ง€์ •๋œ ์‹œ๊ฐ„๋Œ€์˜ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ผ๋ถ€ ๊ฐœ๋ฐœ์ž๋Š” Date๊ฐ€ ์‹œ๊ฐ„๋Œ€์™€ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ž˜๋ชป ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ์–ด๋ ค์šด(๋˜๋Š” ๋„ˆ๋ฌด ๊ฒŒ์œผ๋ฅธ) ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋˜์–ด ๋ฒ„์ „ 1.1 ์—์„œ๋Š” ์ƒˆ๋กœ์šด ํด๋ž˜์Šค์ธ java.util.Calendar ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค . ๋ถˆํ–‰ํ•˜๊ฒŒ๋„ Calendar ํด๋ž˜์Šค๋Š” Date ํด๋ž˜์Šค ๋ณด๋‹ค ๋ณ„๋กœ ์ข‹์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค . ๋‹ค์Œ์€ ๊ตฌํ˜„ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์˜ ์ž‘์€ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
  • ๋ณ€ํ•˜๊ธฐ ์‰ฌ์šด. ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„๊ณผ ๊ฐ™์€ ํด๋ž˜์Šค๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜คํ”„์…‹. ๋‚ ์งœ์˜ ์—ฐ๋„๋Š” 1900๋…„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ  ๋‘ ํด๋ž˜์Šค์˜ ์›”์€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฆ„. Date๋Š” ์‹ค์ œ๋กœ "๋‚ ์งœ"๊ฐ€ ์•„๋‹ˆ๋ฉฐ Calendar๋Š” ๋‹ฌ๋ ฅ์ด ์•„๋‹™๋‹ˆ๋‹ค.
  • ํฌ๋งท. ํ˜•์‹ ์ง€์ •์€ ๋‹ฌ๋ ฅ์ด ์•„๋‹Œ ๋‚ ์งœ์—์„œ๋งŒ ์ž‘๋™ํ•˜๋ฉฐ ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    2001๋…„์— Joda-Time ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค . ๊ทธ์˜ ๋ชฉํ‘œ๋Š” ๊ฐ„๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. Java ์—์„œ ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ์ž‘์—…์„ ์œ„ํ•œ ๊ณ ํ’ˆ์งˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค . ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ ธ์ง€๋งŒ ๊ฒฐ๊ตญ ๋ฒ„์ „ 1.0 ์ด ์ถœ์‹œ๋˜์—ˆ๊ณ  ๋น ๋ฅด๊ฒŒ ํฐ ์ธ๊ธฐ๋ฅผ ์–ป๊ณ  ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ฐœ๋ฐœ์ž๋“ค์€ ์œ ์‚ฌํ•œ ํŽธ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ JDK ์˜ ์ผ๋ถ€๋กœ ์ œ๊ณตํ•  ๊ฒƒ์„ ์ ์  ๋” ์š”๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค . ๋ธŒ๋ผ์งˆ์˜ Michael Nascimento Santos์˜ ์ฐธ์—ฌ๋กœ JSR-310 ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค . ์ด๋Š” JDK ์—์„œ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ์ž‘์—…์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด API๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ†ตํ•ฉํ•˜๋Š” ๊ณต์‹ ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค .
๊ฒ€ํ† 
์ƒˆ๋กœ์šด java.time API์—๋Š” 5๊ฐœ์˜ ํŒจํ‚ค์ง€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • java.time - ๊ฐ’์„ ์ €์žฅํ•  ๊ฐ์ฒด๊ฐ€ ํฌํ•จ๋œ ๊ธฐ๋ณธ ํŒจํ‚ค์ง€
  • java.time.chrono - ๋‹ค์–‘ํ•œ ๋‹ฌ๋ ฅ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์ œ๊ณต
  • java.time.format - ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ํ˜•์‹ ์ง€์ • ๋ฐ ์ธ์‹
  • java.time.temporal - ํ•˜์œ„ ์ˆ˜์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ
  • java.time.zone - ์‹œ๊ฐ„๋Œ€ ์ž‘์—…์„ ์œ„ํ•œ ํด๋ž˜์Šค
    ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋Š” ๊ธฐ๋ณธ ํŒจํ‚ค์ง€์™€ ํ˜•์‹์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ์•„๋งˆ๋„ java.time.temporal ๋„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค . ๋”ฐ๋ผ์„œ 68๊ฐœ์˜ ์ƒˆ๋กœ์šด ์œ ํ˜•์ด ์ถ”๊ฐ€๋˜์—ˆ๋”๋ผ๋„ ๊ฐœ๋ฐœ์ž๋Š” ๊ทธ ์ค‘ ์•ฝ 1/3๋งŒ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
๋‚ ์งœ
LocalDate     ํด๋ž˜์Šค๋Š” ์ƒˆ API ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค . ์—ฌ๊ธฐ์—๋Š” ๋‚ ์งœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด๋‚˜ ์‹œ๊ฐ„๋Œ€๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. "local"์ด๋ผ๋Š” ์ด๋ฆ„์€ Joda-Time ์—์„œ ์ต์ˆ™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์›๋ž˜๋Š” ISO-8601 ํ‘œ์ค€ ์—์„œ ์œ ๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค . ์ด๋Š” ์ •ํ™•ํžˆ ์‹œ๊ฐ„๋Œ€๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ LocalDate๋Š” "2014๋…„ 4์›” 5์ผ"๊ณผ ๊ฐ™์€ ๋‚ ์งœ์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. ์ด ๋‚ ์งœ์˜ ์‹ค์ œ ์‹œ๊ฐ„์€ ์‹œ๊ฐ„๋Œ€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ˜ธ์ฃผ์—์„œ๋Š” ์ด ๋‚ ์งœ๊ฐ€ ๋Ÿฐ๋˜๋ณด๋‹ค 10์‹œ๊ฐ„ ๋น ๋ฅด๋ฉฐ ์ƒŒํ”„๋ž€์‹œ์Šค์ฝ”๋ณด๋‹ค 18์‹œ๊ฐ„ ๋น ๋ฆ…๋‹ˆ๋‹ค. LocalDate ํด๋ž˜์Šค ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. LocalDate date = LocalDate.of(2014, Month.JUNE, 10); int year = date.getYear(); // 2014 Month month = date.getMonth(); // ะ˜ัŽะฝัŒ int dom = date.getDayOfMonth(); // 10 DayOfWeek dow = date.getDayOfWeek(); // ะ’ั‚ะพั€ะฝะธะบ int len = date.lengthOfMonth(); // 30 (ะดะฝะตะน ะฒ ะ˜ัŽะฝะต) boolean leap = date.isLeapYear(); // false (ะฝะต ะฒะธัะพะบะพัะฝั‹ะน ะณะพะด)     ์ด ์˜ˆ์—์„œ๋Š” ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ๋‚ ์งœ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋ชจ๋“  ์ƒ์„ฑ์ž๋Š” ๋น„๊ณต๊ฐœ์ž…๋‹ˆ๋‹ค). ๋‹ค์Œ์œผ๋กœ ๊ฐ์ฒด์— ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. Month ๋ฐ DayOfWeek ์—ด๊ฑฐํ˜•์€ ์ฝ”๋“œ๋ฅผ ๋” ์ฝ๊ธฐ ์‰ฝ๊ณ  ์•ˆ์ •์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค . ๋‹ค์Œ ์˜ˆ์—์„œ๋Š” ๋‚ ์งœ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค๋Š” ๋ถˆ๋ณ€์ด๋ฏ€๋กœ ๊ฒฐ๊ณผ๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ๋˜์ง€๋งŒ ์›๋ณธ ๊ฐ์ฒด๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. LocalDate date = LocalDate.of(2014, Month.JUNE, 10); date = date.withYear(2015); // 2015-06-10 date = date.plusMonths(2); // 2015-08-10 date = date.minusDays(1); // 2015-08-09     ์ด๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ„๋‹จํ•œ ๋ณ€๊ฒฝ์ด์ง€๋งŒ ๋” ๋ณต์žกํ•œ ๋‚ ์งœ ์ˆ˜์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. java.time API ์—๋Š” ์ด๋ฅผ ์œ„ํ•œ ํŠน๋ณ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ธ TemporalAdjuster๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค . ๊ทธ ๋ชฉ์ ์€ ๋‚ ์งœ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์žฅ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•ด๋‹น ์›”์˜ ๋งˆ์ง€๋ง‰ ๋‚ ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ์ผ๋ถ€๋Š” API ์— ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ์ง์ ‘ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ •์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฝ์ง€๋งŒ ์ •์  ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. import static java.time.DayOfWeek.* import static java.time.temporal.TemporalAdjusters.* LocalDate date = LocalDate.of(2014, Month.JUNE, 10); date = date.with(lastDayOfMonth()); date = date.with(nextOrSame(WEDNESDAY));     ์ˆ˜์ •์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”๋ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ ๋‚ ์งœ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์–ดํ•˜๋Š” ์‚ฌ๋žŒ์€ ์•„๋ฌด๋„ ์—†์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ ์ผ์ข…์˜ ๋‚ ์งœ ์กฐ์ž‘์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ๊ณ ์œ ํ•œ ์ˆ˜์ •์ž๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ํŒ€์—์„œ ์ด๋ฅผ ์ด๋ฏธ ์ž‘์„ฑ๋˜๊ณ  ํ…Œ์ŠคํŠธ๋œ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์‹œ๊ฐ„ ๋ฐ ๋‚ ์งœ๋ฅผ โ€‹โ€‹๊ฐ’์œผ๋กœ ์‚ฌ์šฉ
LocalDate๋ฅผ ๊ฐ€์น˜ ์žˆ๊ฒŒ     ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ์‹œ๊ฐ„์„ ํ• ์• ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค . ๊ฐ’์€ ์™„์ „ํžˆ ์ƒํ˜ธ ๊ตํ™˜ ๊ฐ€๋Šฅํ•œ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด๋ฏ€๋กœ ๋™์ผํ•˜๋ฉด ๊ฐ์ฒด์˜ ์ •์ฒด์„ฑ์ด ์˜๋ฏธ๊ฐ€ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ฐ’ ํด๋ž˜์Šค์˜ ์ „ํ˜•์ ์ธ ์˜ˆ๋Š” String ์ž…๋‹ˆ๋‹ค . ์šฐ๋ฆฌ๋Š” equals()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•˜๊ณ  == ์—ฐ์‚ฐ์ž ์™€ ๋น„๊ตํ•  ๋•Œ ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•œ์ง€ ์—ฌ๋ถ€๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค . ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ์ž‘์—…์„ ์œ„ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ํด๋ž˜์Šค๋„ ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์„œ์— ๋ช…์‹œ๋œ ๋Œ€๋กœ == ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์œ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด VALJO์— ๋Œ€ํ•œ ๋‚˜์˜ ์ตœ๊ทผ ์ •์˜๋ฅผ ํ™•์ธํ•˜์„ธ์š” . ์ด ์ •์˜๋Š” ๋ถˆ๋ณ€์„ฑ, ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ, equals () , hashCode , toString() , ๊ทธ๋ฆฌ๊ณ  CompareTo .() .
๋Œ€์ฒด ๋‹ฌ๋ ฅ
java.time ์˜ ๋ชจ๋“  ๊ธฐ๋ณธ ํด๋ž˜์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ LocalDate     ํด๋ž˜์Šค๋Š” ISO-8601 ํ‘œ์ค€ ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ๋‹จ์ผ ๋‹ฌ๋ ฅ์— ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค . ํ‘œ์ค€ 8601์€ ๊ทธ๋ ˆ๊ณ ๋ฆฌ๋ ฅ์ด๋ผ๊ณ ๋„ ์•Œ๋ ค์ง„ ์„ธ๊ณ„ ํ‘œ์ค€ ๋‹ฌ๋ ฅ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์ค€ ์—ฐ๋„์—๋Š” 365์ผ, ์œค๋…„ - 366์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋งค 4๋ฒˆ์งธ ํ•ด๋Š” 100์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€๊ฑฐ๋‚˜ 400์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง€์ง€ ์•Š๋Š” ํ•œ ์œค๋…„์ž…๋‹ˆ๋‹ค. ๊ณ„์‚ฐ์˜ ์šฉ์ด์„ฑ์„ ์œ„ํ•ด ์ƒˆ ์—ฐ๋„์˜ ์ฒซ ํ•ด ์ด์ „ ์—ฐ๋„๋Š” 0์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ธฐ๋ณธ ์‹œ์Šคํ…œ์ด๋ผ๋Š” ์ฒซ ๋ฒˆ์งธ ๊ฒฐ๊ณผ๋Š” ๊ฒฐ๊ณผ๊ฐ€ GregorianCalendar๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ์™€ ํ•ญ์ƒ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค . GregorianCalendar ํด๋ž˜์Šค์—๋Š” 1582๋…„ 10์›” 15์ผ ์ด์ „์˜ ๋ชจ๋“  ๋‚ ์งœ์— ๋Œ€ํ•ด ์œจ๋ฆฌ์šฐ์Šค๋ ฅ ์ฒด๊ณ„๋กœ์˜ ์ „ํ™˜์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œจ๋ฆฌ์šฐ์Šค๋ ฅ ์ฒด๊ณ„์—์„œ๋Š” 4๋…„๋งˆ๋‹ค ์˜ˆ์™ธ ์—†์ด ์œค๋…„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ํ•œ ์‹œ์Šคํ…œ์—์„œ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ๋กœ์˜ ์ „ํ™˜์ด ์—ญ์‚ฌ์  ์‚ฌ์‹ค์ธ๋ฐ ์™œ java.time์ด ์ด๋ฅผ ๋ชจ๋ธ๋งํ•˜์ง€ ์•Š๋Š”๊ฐ€์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋‚˜๋ผ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ๊ธฐ์— ๊ทธ๋ ˆ๊ณ ๋ฆฌ๋ ฅ ์ฒด๊ณ„๋กœ ์ „ํ™˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”ํ‹ฐ์นธ ์ „ํ™˜ ๋‚ ์งœ๋งŒ ๊ณ ๋ คํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ๋‹ค๋ฅธ ๊ตญ๊ฐ€์— ๋Œ€ํ•ด ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ถ๋ฏธ ์‹๋ฏผ์ง€๋ฅผ ํฌํ•จํ•œ ๋Œ€์˜์ œ๊ตญ์€ ๊ฑฐ์˜ 200๋…„ ํ›„์ธ 1752๋…„ 9์›” 14์ผ์— ๊ทธ๋ ˆ๊ณ ๋ฆฌ๋ ฅ์œผ๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋Ÿฌ์‹œ์•„๋Š” 1918๋…„ 2์›” 14์ผ๊นŒ์ง€ ๋‹ฌ๋ ฅ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ์Šค์›จ๋ด์˜ ์ „ํ™˜์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถˆ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 1918๋…„ ์ด์ „ ๋‚ ์งœ์˜ ์‹ค์ œ ์˜๋ฏธ๋Š” ์ƒํ™ฉ์— ๋”ฐ๋ผ ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. LocalDate ์ฝ”๋“œ ์ž‘์„ฑ์ž๋Š” ๋ถˆ์ผ์น˜๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์œจ๋ฆฌ์šฐ์Šค๋ ฅ์—์„œ ๊ทธ๋ ˆ๊ณ ๋ฆฌ๋ ฅ์œผ๋กœ์˜ ์ „ํ™˜์„ ์ „ํ˜€ ๋ชจ๋ธ๋งํ•˜์ง€ ์•Š๊ธฐ๋กœ ์™„์ „ํžˆ ํ•ฉ๋ฆฌ์ ์ธ ๊ฒฐ์ •์„ ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํ•ต์‹ฌ ํด๋ž˜์Šค์—์„œ ISO-8601์„ ๊ธฐ๋ณธ ๋‹ฌ๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋‘ ๋ฒˆ์งธ ๊ฒฐ๊ณผ๋Š” ๋‚˜๋จธ์ง€ ๋‹ฌ๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ํด๋ž˜์Šค ์„ธํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฐ๋Œ€๊ธฐ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋Œ€์ฒด ๋‹ฌ๋ ฅ ์ž‘์—…์„ ์œ„ํ•œ ๊ธฐ๋ฐ˜์œผ๋กœ, ๋กœ์ผ€์ผ ์ด๋ฆ„์œผ๋กœ ์›ํ•˜๋Š” ๋‹ฌ๋ ฅ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Java 8 ์—๋Š” ํƒœ๊ตญ ๋ถˆ๊ต ๋‹ฌ๋ ฅ, Mingguo(๋Œ€๋งŒ ๋‹ฌ๋ ฅ), ์ผ๋ณธ ๋‹ฌ๋ ฅ, ์ด์Šฌ๋žŒ ๋‹ฌ๋ ฅ ๋“ฑ 4๊ฐœ์˜ ์ถ”๊ฐ€ ๋‹ฌ๋ ฅ์ด ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค . ๋‹ค๋ฅธ ๋‹ฌ๋ ฅ์—๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ํ•จ๊ป˜ ์ œ๊ณต๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋‹ฌ๋ ฅ์—๋Š” ThaiBuddhistDate , MinguoDate , JapaneseDate ๋ฐ HijrahDate ์™€ ๊ฐ™์€ ํŠน๋ณ„ํ•œ ๋‚ ์งœ ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค . ์ผ๋ณธ ์ •๋ถ€์™€ ๊ฐ™์ด ๊ณ ๋„๋กœ ์ง€์—ญํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค์ธ ChronoLocalDate๋Š” LocalDate ์™€ ํ•จ๊ป˜ ์œ„ 4๊ฐœ ํด๋ž˜์Šค์˜ ํ•ต์‹ฌ ์ถ”์ƒํ™”๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. , ์‚ฌ์šฉ๋œ ๋‹ฌ๋ ฅ ์œ ํ˜•์— ๊ด€๊ณ„์—†์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ถ”์ƒํ™”๊ฐ€ ์กด์žฌํ•˜๋”๋ผ๋„ ์‚ฌ์šฉ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ถ”์ƒํ™”๊ฐ€ ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ์ „์ฒด java.time API๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค . ๊ฒฐ๋ก ์€ ํŠน์ • ๋‹ฌ๋ ฅ์„ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ  ์ž‘์„ฑ๋œ ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ํŒ๋ช…๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 1๋…„์ด 12๊ฐœ์›”์ธ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์ง€๋งŒ ์ผ๋ถ€ ๊ฐœ๋ฐœ์ž๋Š” 12๊ฐœ์›”์„ ์ถ”๊ฐ€ํ•˜์—ฌ 1๋…„์„ ๋ชจ๋‘ ์ถ”๊ฐ€ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋‹ฌ์— ๋Œ€๋žต ๋™์ผํ•œ ์ผ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฝฅํŠธ ๋‹ฌ๋ ฅ์—๋Š” 30์ผ๋กœ ๊ตฌ์„ฑ๋œ 12๊ฐœ์›”๊ณผ 5~6์ผ๋กœ ๊ตฌ์„ฑ๋œ 1๊ฐœ์›”์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ผ๋ณธ ๋‹ฌ๋ ฅ์—์„œ๋Š” ๋‹ค์Œ ์ฒœํ™ฉ์„ ํฌ๊ณ ํ•œ ๋‚ ๋ถ€ํ„ฐ ์—ฐ๋„๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ ํ•ด๊ฐ€ ํ˜„์žฌ๋ณด๋‹ค 1์ด ๋” ๋งŽ์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์ด ๊ฒฝ์šฐ ๊ฐ™์€ ๋‹ฌ์˜ 2์ผ๊นŒ์ง€) ๋‹ค๋ฅธ ์—ฐ๋„์— ์†ํ•  ์ˆ˜ ์žˆ์Œ). ์—ฌ๋Ÿฌ ๋‹ฌ๋ ฅ์—์„œ ๋™์‹œ์— ์ž‘๋™ํ•˜๋Š” ๊ณ ํ’ˆ์งˆ์˜ ์ž‘์—… ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋‚ ์งœ์™€ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ์˜ ํ•ต์‹ฌ์„ ํ‘œ์ค€ ๋‹ฌ๋ ฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‚ ์งœ๋ฅผ ์ž…๋ ฅ/์ถœ๋ ฅํ•  ๋•Œ๋งŒ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋‹ฌ๋ ฅ ์‹œ์Šคํ…œ์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ฆ‰, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ €์žฅ ๋ฐ ๋ชจ๋“  ๋‚ ์งœ ์กฐ์ž‘์— LocalDate๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ ๋‚ ์งœ๋ฅผ ์ง€์—ญํ™”ํ•  ๋•Œ๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„์— ์ €์žฅ๋œ ๋‹ฌ๋ ฅ ํด๋ž˜์Šค์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ChronoLocalDate ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . ์‚ฌ์‹ค, ๋Œ€๋ถ€๋ถ„์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ๊ทธ๋ ‡๊ฒŒ ์‹ฌ๊ฐํ•œ ํ˜„์ง€ํ™”๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์žฅ์— ์„ค๋ช…๋œ ๋ชจ๋“  ๋‚ด์šฉ์— ๋Œ€ํ•ด ๋” ์ž์„ธํ•œ ์„ค๋ช…์ด ํ•„์š”ํ•˜๋ฉด ChronoLocalDate ํด๋ž˜์Šค ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š” .      ๊ธฐ์‚ฌ ๊ณ„์† ์›๋ณธ ๊ธฐ์‚ฌ     
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION