Java¿¡¼ Optional Ŭ·¡½º¸¦ ÀÌÇØÇÏ°í È¿°úÀûÀ¸·Î »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ Æ÷°ýÀûÀÎ °¡À̵åÀÎ "ÀÚ¹Ù ¿É¼Å³Î"¿¡ ¿À½Å °ÍÀ» ȯ¿µÇÕ´Ï´Ù. Ãʺ¸ÀÚ¿Í ¼÷·ÃµÈ °³¹ßÀÚ ¸ðµÎ¸¦ À§ÇØ ¼³°èµÈ ÀÌ Ã¥Àº Java 8¿¡¼ µµÀÔµÈ °·ÂÇÑ ±â´ÉÀÎ Optional¿¡ ´ëÇÑ ½ÉÃþÀûÀΠŽ±¸¸¦ Á¦°øÇϸç, ÀÌ ±â´ÉÀº º¸´Ù ¿ì¾ÆÇÏ°í Ç¥Çö·Â ÀÖ´Â ¹æ½ÄÀ¸·Î °ªÀÇ Á¸Àç ¶Ç´Â ºÎÀ縦 °ü¸®ÇÏ´Â µ¥ µµ¿òÀÌ µË´Ï´Ù. ÀÌ Ã¥À» ±íÀÌ ÆÄ°íµé¸é OptionalÀ» È°¿ëÇÏ¿© ´õ ±ò²ûÇÏ°í Àб⠽¬¿î Äڵ带 ÀÛ¼ºÇÏ°í, ÀϹÝÀûÀÎ ÇÔÁ¤À» ÇÇÇÏ°í, Àü¹ÝÀûÀÎ ÇÁ·Î±×·¡¹Ö °üÇàÀ» °³¼±ÇÏ´Â ¹æ¹ýÀ» ¹è¿ï ¼ö ÀÖ½À´Ï´Ù.
1Àå "Java Optional ¼Ò°³"´Â OptionalÀÇ °³³äÀ» ¼Ò°³ÇÏ´Â °ÍÀ¸·Î ½ÃÀÛÇÕ´Ï´Ù. OptionalÀÌ ¹«¾ùÀÎÁö, Java ¾ð¾î¿¡¼ÀÇ ¸ñÀû, ±×¸®°í ½Ã°£¿¡ µû¸¥ Áøȸ¦ »ìÆ캸°Ú½À´Ï´Ù. ÀÌ Àå¿¡¼´Â Optional¿¡ ´ëÇÑ ´Ù¾çÇÑ »ç¿ë »ç·Êµµ ´Ù·ç¸ç, ÀÌ Å¬·¡½º°¡ Çö´ë Java ÇÁ·Î±×·¡¹Ö¿¡¼ ¾î¶»°Ô À¯ÀÍÇÒ ¼ö ÀÖ´ÂÁö ÀÌÇØÇÏ´Â µ¥ °ß°íÇÑ ±â¹ÝÀ» Á¦°øÇÕ´Ï´Ù.
2Àå "Optional ÀνºÅϽº ¸¸µé±â"´Â Optional ÀνºÅϽº¸¦ ¸¸µå´Â ´Ù¾çÇÑ ¹æ¹ýÀ» »ìÆ캾´Ï´Ù. Optional.of(), Optional.ofNullable(), Optional.empty() ÆÑÅ丮 ¸Þ¼µå¿¡ ´ëÇØ ¾Ë¾Æº¸°í °¢ ¸Þ¼µå¸¦ »ç¿ëÇÏ´Â µ¥ ÀûÇÕÇÑ ½Ã³ª¸®¿À¸¦ ÀÌÇØÇÕ´Ï´Ù. ÀÌ Àå¿¡¼´Â ¶ÇÇÑ Optional ÀνºÅϽº¸¦ ¸¸µå´Â ÀϹÝÀûÀÎ ÆÐÅÏÀ» ´Ù·ç°í ÇÊ¿ä¿¡ ¸Â´Â ¿Ã¹Ù¸¥ Á¢±Ù ¹æ½ÄÀ» ¼±ÅÃÇÏ´Â µ¥ ´ëÇÑ ½Ç¿ëÀûÀÎ ÁöħÀ» Á¦°øÇÕ´Ï´Ù.
3Àå "Optional ÀÛ¾÷"Àº Äڵ忡¼ OptionalÀ» È¿°úÀûÀ¸·Î »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ÁßÁ¡À» µÓ´Ï´Ù. Optional¿¡ ÀúÀåµÈ °ª¿¡ ¾×¼¼½ºÇÏ°í º¯È¯ÇÏ´Â ¹æ¹ý, °ªÀÌ ¾ø´Â °æ¿ì¸¦ ó¸®ÇÏ´Â ¹æ¹ý, Äڵ带 °£¼ÒÈÇϱâ À§ÇÑ Ã¼ÀÎ ÀÛ¾÷À» ¾Ë¾Æº¾´Ï´Ù. ÀÌ Àå¿¡¼´Â Äڵ尡 ±ò²ûÇÏ°í °ß°íÇÏ°Ô À¯ÁöµÇµµ·Ï OptionalÀ» »ç¿ëÇÏ´Â ¸ð¹ü »ç·Ê¸¦ °Á¶ÇÕ´Ï´Ù.
4Àå "¸ð¹ü »ç·Ê ¹× ÀϹÝÀûÀÎ ½Ç¼ö"´Â OptionalÀÇ È¿°úÀûÀÎ »ç¿ë¿¡ ´ëÇÑ ÅëÂû·ÂÀ» Á¦°øÇÕ´Ï´Ù. OptionalÀ» »ç¿ëÇϱ⿡ ÀûÀýÇÑ ½Ã±â, °úµµÇÑ Áßø°ú °°Àº ÀϹÝÀûÀÎ ½Ç¼ö¸¦ ÇÇÇÏ´Â ¹æ¹ý, ¼º´É¿¡ ´ëÇÑ °í·Á »çÇ×À» ¾Ë¾Æº¾´Ï´Ù. ÀÌ Àå¿¡¼´Â ¶ÇÇÑ OptionalÀÇ ´ë¾ÈÀ» »ìÆ캸°í Java¿¡¼ null °¡´É¼ºÀ» ó¸®ÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ Æ÷°ýÀûÀÎ °üÁ¡À» Á¦°øÇÕ´Ï´Ù.
5Àå "°í±Þ ÁÖÁ¦"¿¡¼´Â OptionalÀÇ º¸´Ù Á¤±³ÇÑ Ãø¸éÀ» »ìÆ캾´Ï´Ù. OptionalÀÌ ÇÔ¼öÇü ÇÁ·Î±×·¡¹Ö Æз¯´ÙÀÓ¿¡ ¾î¶»°Ô µé¾î¸Â´ÂÁö, Java Streams¿Í ÅëÇյǴÂÁö, Á¦³×¸¯ ŸÀÔ°ú ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ´ÂÁö »ìÆ캸°Ú½À´Ï´Ù. ¶ÇÇÑ ÀÌ Àå¿¡¼´Â API ¼³°è¿¡¼ OptionalÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀ» ´Ù·ç¸ç, OptionalÀ» ¾ÖÇø®ÄÉÀ̼ǿ¡ ÅëÇÕÇϱâ À§ÇÑ °í±Þ ±â¼úÀ» Á¦°øÇÕ´Ï´Ù.
6Àå "OptionalÀÇ ½ÇÁ¦ Àû¿ë"¿¡¼´Â »ç·Ê ¿¬±¸¿Í ½ÇÁ¦ »ç·Ê¸¦ ÅëÇØ ÀÌ·ÐÀ» ½Çõ¿¡ ¿Å±é´Ï´Ù. OptionalÀ» Àû¿ëÇÏ¿© ·¹°Å½Ã Äڵ带 º¯È¯ÇÏ°í, ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡¼ ¸ð¹ü »ç·Ê¸¦ ±¸ÇöÇÏ°í, ½ÇÁ¦ ½Ã³ª¸®¿À¿¡¼ ¹ß»ýÇÏ´Â ÀϹÝÀûÀÎ °úÁ¦¸¦ ÇØ°áÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¾´Ï´Ù. ÀÌ Àå¿¡¼´Â ÀÚ½ÅÀÇ ÇÁ·ÎÁ§Æ®¿¡¼ OptionalÀ» È¿°úÀûÀ¸·Î È°¿ëÇϱâ À§ÇÑ ½Ç¿ëÀûÀÎ ÅëÂû·Â°ú Àü·«À» Á¦°øÇÏ´Â °ÍÀ» ¸ñÇ¥·Î ÇÕ´Ï´Ù.
ÀÌ Ã¥À» ¸¶Ä¡¸é Optional Ŭ·¡½º¸¦ »ç¿ëÇÏ¿© ¼±ÅÃÀû °ªÀ» º¸´Ù È¿°úÀûÀ¸·Î °ü¸®ÇÏ°í, ÄÚµå °¡µ¶¼ºÀ» °³¼±ÇÏ°í, Àü¹ÝÀûÀÎ Java ÇÁ·Î±×·¡¹Ö ±â¼úÀ» Çâ»ó½ÃÅ°´Â ¹æ¹ýÀ» öÀúÈ÷ ÀÌÇØÇÏ°Ô µË´Ï´Ù. ÀÌ Ã¥Àº ½Ç¿ëÀûÀÎ Âü°í ÀÚ·áÀÌÀÚ ¸ð¹ü »ç·Ê¿¡ ´ëÇÑ °¡À̵å·Î¼, Java °³¹ß °úÁ¤¿¡¼ ÀÌ °·ÂÇÑ ±â´ÉÀ» ÃÖ´ëÇÑ È°¿ëÇÏ´Â µ¥ ÇÊ¿äÇÑ Áö½ÄÀ» Á¦°øÇÕ´Ï´Ù.
1Àå : Java Optional ¼Ò°³
___1. OptionalÀ̶õ?
___2. ÀÚ¹Ù¿¡¼ OptionalÀÇ ¸ñÀû
___3. OptionalÀÇ ¿ª»ç¿Í ÁøÈ
___4. Optional »ç¿ë »ç·Ê
2Àå : Optional ÀνºÅϽº ¸¸µé±â
___1. Optional.of() »ç¿ë
___2. Optional.ofNullable() »ç¿ë
___3. Optional.empty() »ç¿ë
___4. OptionalÀÇ ÆÑÅ丮 ¸Þ¼µå
___5. Optional ¸¸µé±âÀÇ ÀϹÝÀûÀÎ ÆÐÅÏ
3Àå : Optional ÀÛ¾÷
___1. °ª ¾×¼¼½º
___2. °ª º¯È¯
___3. °ª ºÎÀç ó¸®
___4. ¿¬»ê üÀÌ´×
4Àå : ¸ð¹ü »ç·Ê¿Í ÀϹÝÀûÀÎ ½Ç¼ö
___1. OptionalÀ» »ç¿ëÇÏ´Â °æ¿ì
___2. Optional Áßø ÇÇÇϱâ
___3. ¼º´É °í·Á »çÇ×
___4. OptionalÀÇ ´ë¾È
5Àå : °í±Þ ÁÖÁ¦
___1. ÇÔ¼öÇü ÇÁ·Î±×·¡¹Ö¿¡¼ÀÇ Optional
___2. ÀÚ¹Ù ½ºÆ®¸²°úÀÇ ÅëÇÕ
___3. Á¦³×¸¯ ŸÀÔÀÌ ÀÖ´Â Optional
___4. API¿¡¼ Optional »ç¿ë
6Àå : OptionalÀÇ ½ÇÁ¦ Àû¿ë »ç·Ê
___1. »ç·Ê ¿¬±¸
___2. ·¹°Å½Ã ÄÚµå º¯È¯
___3. ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀÇ ¸ð¹ü »ç·Ê