<์ถœ์ฒ˜ ์ธํ”„๋Ÿฐ>

 

 

SpringMVC์— ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋“ค์–ด๊ฐ€๊ธฐ์ „ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•Œ์•„์•ผํ•  ๊ฐœ๋…๋“ค์„ ์„น์…˜ 2 ๊ฐ•์˜์—์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ–ˆ๋‹ค. ๊ฐ•์˜๋ฅผ ๋“ค์„ ๋• ๊ฐœ๋…์— ๋Œ€ํ•œ ๋ฐฐ๊ฒฝ์ง€์‹์ด ํ๋ฆฟํ•ด์„œ ์ˆ˜์—…์„ ๋“ฃ๊ณ  ์žˆ์–ด๋„ ์ˆ˜์—…์˜ ํ๋ฆ„์ด ์ดํ•ด๋˜์งˆ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋ธ”๋กœ๊ทธ์— WAS - ์„œ๋ธ”๋ฆฟ - ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ - ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ - ์“ฐ๋ ˆ๋“œ ํ’€์ด ์–ด๋–ค ์‹์œผ๋กœ ์—ฐ๊ด€์„ ๊ฐ–๋Š”์ง€๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ณต๋ถ€ํ•˜๊ณ ์ž ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ดํ•ดํ•˜๋Š”๋ฐ ๋ณด์ถฉ์ด ๋˜๋Š” ๊ฐœ๋…๊ณผ ์„ค๋ช…์ด ์žˆ์œผ๋ฉด ํ•จ๊ป˜ ์ ๊ณ , ๋„์ค‘์— ์งˆ๋ฌธ๋“ค์ด ์ƒ๊ธฐ๋ฉด ๊ทธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€๋„ ์ฐพ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

 

โ˜˜๏ธ 

์ž˜๋ชป๋œ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค 


 

โœ”๏ธ  ์›น - HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘

  • ์„œ๋ฒ„ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ ๋Œ€๋ถ€๋ถ„ HTTP๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊ฑฐ์˜ ๋ชจ๋“  ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

HTTP

: ์›น ์ƒ์—์„œ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์— ์ด๋ฃจ์–ด์ง€๋Š” ์š”์ฒญ ์‘๋‹ต ํ”„๋กœํ† ์ฝœ์ด๋ฉฐ, ์ฃผ๋กœ HTML ๋ฌธ์„œ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

 

์›น ์„œ๋ฒ„ (Web Server)

: HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ (Web Application Server) 

: HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ •์  ๋ฆฌ์†Œ์Šค ์ œ๊ณต๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

Q. ์›น ์„œ๋ฒ„๋Š” ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ์›น ํŽ˜์ด์ง€๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค๋ฉด ์–ด๋–ค๊ฒŒ ์žˆ์„๊นŒ?

A. ์ •์  ๋ฆฌ์†Œ์Šค๋Š” ์ด๋ฏธ์ง€, ๋™์˜์ƒ, CSS, HTML ๋“ฑ ์ด๋‹ค. ์›น ํŽ˜์ด์ง€์— ๋กœ๊ณ ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋กœ๊ณ ๋Š” ์ด๋ฏธ์ง€์— ํ•ด๋‹นํ•˜๋‹ˆ ์›น ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฆฌ์†Œ์Šค๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์€ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋กœ๊ทธ์ธ์ด ๋œ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๋Š” ์ด๋Ÿฐ ์ผ๋ จ์˜ ๊ณผ์ •์ด๋ผ๊ณ  ๋ณด๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ๋‹จ์ˆœํžˆ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์— ๋๋‚˜์ง€ ์•Š๊ณ  ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ํ–‰ํ•˜๋Š” ์ผ์ด๋‹ค.

 

 

Q. ๊ทธ๋Ÿฐ๋ฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ๋™์ ์ธ ๋กœ์ง ๋ฟ ์•„๋‹ˆ๋ผ, ์ •์  ๋ฆฌ์†Œ์Šค๋„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ์›น ์„œ๋ฒ„๊ฐ€ ํ•˜๋Š” ์ผ๋„ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?

A. WAS๋Š” ๋น„์‹ผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์˜ˆ๋กœ ๊ธˆ์ „ ๊ฑฐ๋ž˜, ๊ฐœ์ธ์ •๋ณด๊ด€๋ฆฌ, ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ๋“ฑ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋กœ์ง์€ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„๊ณผ ์ž์› ์†Œ๋ชจ๊ฐ€ ํฌ๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์„œ๋น„์Šค ์ „์ฒด์— ์‹ฌ๊ฐํ•œ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๋ณต์žกํ•œ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” WAS์—๊ฒŒ ์ •์ ์ธ ๋ฆฌ์†Œ์Šค๊นŒ์ง€ ์ œ๊ณตํ•˜๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ์ •์ ์ธ ๋ฆฌ์†Œ์Šค ์ œ๊ณต์„ ์ฒ˜๋ฆฌํ•˜๋А๋ผ ์ค‘์š”ํ•œ ๋กœ์ง์˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฏธ๋ค„์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์š”์ฒญ์„ ๋ฐ›๋Š” ๊ฒƒ ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์„ ํ™€๋กœ ํ•ด์•ผํ•˜๋Š” WAS์˜ ์„œ๋ฒ„์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์›น ์„œ๋ฒ„๋ฅผ WAS์˜ ์•ž์— ๋ฐฐ์น˜์‹œ์ผœ ์š”์ฒญ์ด ์˜ค๋ฉด ์›น ์„œ๋ฒ„์—์„œ ๋ฐ›๊ฒŒ ํ•œ ํ›„ ๋™์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๋ถ€๋ถ„๋งŒ WAS์—๊ฒŒ ์š”์ฒญ์„ ์œ„์ž„ํ•œ๋‹ค.

 

 

 


 

 

 

 

โœ”๏ธ  ์„œ๋ธ”๋ฆฟ๊ณผ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ

  • ์ž๋ฐ”์—์„œ๋Š” ์„œ๋ธ”๋ฆฟ ์ปจ๋„ค์ดํ„ฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉด WAS๋ผ๊ณ  ํ•œ๋‹ค.

 

์„œ๋ธ”๋ฆฟ (Servlet)

: ์›น ์ƒ์—์„œ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํ† ์ฝœ๋กœ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์— ์ด๋ฃจ์–ด์ง€๋Š” ์š”์ฒญ ์‘๋‹ต ํ”„๋กœํ† ์ฝœ์ด๋ฉฐ, ์ฃผ๋กœ HTML ๋ฌธ์„œ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค

 

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ (Servlet Container)

: ์„œ๋ธ”๋ฆฟ๋“ค์„ ๋ชจ์•„์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์›น์„œ๋ฒ„์™€ ์†Œ์ผ“์„ ํ†ต์‹ ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ํ†ฐ์บฃ์ด ์žˆ๋‹ค.

 

@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) {
    }
}
/hello๋กœ URL์ด ํ˜ธ์ถœ๋˜๋ฉด ๊ทธ๋•Œ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ์„œ๋ธ”๋ฆฟ์ด ์ฃผ๋กœ ํ•˜๋Š” ๊ฒƒ์€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ์— ๋งž๋Š” ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด HttpServletRequest์™€ HttpServletResponse๊ฐ€ ์žˆ๋‹ค. ์ด๋Š” ๊ฐ๊ฐ HTTP ์š”์ฒญ ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ , HTTP ์‘๋‹ต ์ •๋ณด๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ด์˜จ ์š”์ฒญ ๊ฐ์ฒด์™€ ์‘๋‹ต ๊ฐ์ฒด๋งŒ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•œ ํ›„ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”์‹œํ‚จ๋‹ค. 

 

 

Q. ์™œ ์š”์ฒญ ๊ฐ์ฒด์™€ ์‘๋‹ต ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•˜๋Š”๊ฑธ๊นŒ?

A. ์‚ฌ์šฉ์ž๋งˆ๋‹ค ์š”์ฒญํ•˜๋Š” ๋‚ด์šฉ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌํ•˜๋Š” ์‘๋‹ต๋„ ๋‹ฌ๋ผ์งˆ ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, 3๋งŒ์›์„ ๊ฒฐ์ œํ•œ ์‚ฌ์šฉ์ž A์™€ 1๋งŒ์› ๊ฒฐ์ œํ•œ ์‚ฌ์šฉ์ž B์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์‘๋‹ต์ด ์„ž์ผ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์š”์ฒญ ๊ฐ์ฒด์™€ ์‘๋‹ต ๊ฐ์ฒด๋Š” ์žฌ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฐ˜๋“œ์‹œ ์š”์ฒญ, ์‘๋‹ต ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋Š” HttpServletRequest์™€ HttpServletResponse ๊ฐ์ฒด์— ์ €์žฅํ•˜๊ณ  ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

Q. ์™œ ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์žฌ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š”๊ฑธ๊นŒ?

A. ์ด ๊ฐœ๋…์„ ์‹๋‹น์œผ๋กœ ๋น„์œ ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ์„œ๋ธ”๋ฆฟ์€ ์š”๋ฆฌ์‚ฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ , ์š”์ฒญ ๊ฐ์ฒด์™€ ์‘๋‹ต ๊ฐ์ฒด๋Š” ์ข…์—…์›์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฌ์šธ ๊ฒƒ ๊ฐ™๋‹ค. ์š”๋ฆฌ์‚ฌ(์„œ๋ธ”๋ฆฟ)๋Š” ์ข…์—…์›(์“ฐ๋ ˆ๋“œ)์ด ๋“ค๊ณ ์˜จ ์ฃผ๋ฌธ์„œ(์š”์ฒญ ๊ฐ์ฒด)๋งŒ ๋ณด๊ณ  ์š”๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์ข…์—…์›์—๊ฒŒ ๋‚ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ์š”๋ฆฌ์‚ฌ๋Š” ์–ด๋–ค ์Œ์‹์„ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š”์ง€๋งŒ ํ™•์ธํ•˜๊ณ , ์ด ์Œ์‹์„ ๋ช‡ ๋ฒˆ ํ…Œ์ด๋ธ”์—์„œ ์ฃผ๋ฌธํ–ˆ๊ณ  ์ด ์Œ์‹์„ ์š”์ฒญํ•œ ํ…Œ์ด๋ธ”์ด ์ด์ „์— ์–ด๋–ค ์Œ์‹์„ ์ฃผ๋ฌธํ–ˆ๋Š”์ง€๋Š” ๋ชฐ๋ผ๋„ ๋œ๋‹ค. ์š”๋ฆฌ๊ฐ€ ์™„์„ฑ๋˜์–ด ๋‚˜์˜ค๋ฉด ์ข…์—…์›์€ ์ ‘์‹œ(์‘๋‹ต ๊ฐ์ฒด)๋ฅผ ๋“ค๊ณ  ๊ณ ๊ฐ์—๊ฒŒ ์ค„ ๊ฒƒ์ด๋‹ค. ์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๋Š” ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ , ๊ทธ์ € ์ฒ˜๋ฆฌ์—๋งŒ ์ง‘์ค‘ํ•˜๋ฉด ๋˜๊ธฐ์— ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.(์–ด์ฐจํ”ผ ์ข…์—…์›์ด ์˜ฎ๊ธฐ๋Š” ๊ฑฐ๋ผ ์ข…์—…์›์ด ๋ช‡ ๋ฒˆ ํ…Œ์ด๋ธ”์—์„œ ์ฃผ๋ฌธํ•œ ์Œ์‹์ธ์ง€ ๊ธฐ์–ตํ•œ๋‹ค. ํ…Œ์ด๋ธ”์˜ ์ฃผ๋ฌธ์ด ์„ž์ด์ง€ ์•Š๋Š”๋‹ค.) ํ•œ๋ช…์˜ ์š”๋ฆฌ์‚ฌ๋กœ ์ถฉ๋ถ„ํžˆ ๊ณ ๊ฐ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ตณ์ด ์‚ฌ์žฅ์€ ๋‹ค๋ฅธ ์š”๋ฆฌ์‚ฌ๋ฅผ ๊ณ ์šฉํ•  ์ด์œ ๊ฐ€ ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•œ ๋ช…์˜ ์š”๋ฆฌ์‚ฌ๊ฐ€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์š”๋ฆฌ๋งŒ ํ•˜์ง€ ์•Š๊ณ  ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์—์„œ ์˜ค๋Š” ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ์ข…์—…์›๊ธ€์ด ์ฃผ๋ฌธ์„œ๋ฅผ ๋“ค๊ณ  ์˜ค๋Š” ๊ฒƒ์„ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๋กœ ๋น„์œ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. 

 

 

 


 

 

 

 

โœ”๏ธ  ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ์™€ ์“ฐ๋ ˆ๋“œ ํ’€

 

๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ (Multi thread)

: ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋‘˜ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

์“ฐ๋ ˆ๋“œ ํ’€ (Thread pool)

: ๋ฏธ๋ฆฌ ์ผ์ • ๊ฐœ์ˆ˜์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

 

 

 

์š”์ฒญ ๋งˆ๋‹ค ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ ๊ฒฝ์šฐ๋‹ค. CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ—ˆ์šฉ๋  ๋•Œ ๊นŒ์ง€ ๋™์‹œ์— ์š”์ฒญ๋œ ๊ฒƒ๋“ค์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ์“ฐ๋ ˆ๋“œ์˜ ์ƒ์„ฑ ๋น„์šฉ์€ ๋งค์šฐ ๋น„์‹ธ๋‹ค. ๊ณ ๊ฐ์ด ์š”์ฒญํ•  ๋•Œ ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์‘๋‹ต ์†๋„๊ฐ€ ๋Šฆ์–ด์งˆ ๊ฒƒ์ด๋‹ค. ๋˜ ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ์—๋Š” ์ œํ•œ์ด ์—†๋‹ค. ๋งŒ์•ฝ ๊ณ ๊ฐ์˜ ์š”์ฒญ์ด ๋„ˆ๋ฌด ๋งŽ์ด ์˜ค๊ฒŒ ๋˜๋ฉด, CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์ž„๊ณ„์ ์ด ๋„˜์–ด์„œ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋  ์ˆ˜ ์žˆ๋‹ค.

 

์š”์ฒญ์ด ์˜ฌ ๋•Œ๋งˆ๋‹ค ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ํšจ์œจ์ด ๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋‘”๋‹ค. ๊ทธ๊ฑธ ์“ฐ๋ ˆ๋“œ ํ’€์ด๋ผ๊ณ  ํ•œ๋‹ค. ํ†ฐ์บฃ์€ ์ฃผ๋กœ 200๊ฐœ๋ฅผ ๊ธฐ๋ณธ ์„ค์ •ํ•œ๋‹ค. ๊ทธ๋Ÿผ 200๊ฐœ๊ฐ€ ๋ชจ๋‘ ๋‹ค ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ๋‚จ์€ ์š”์ฒญ์€ ํ์—์„œ ๋Œ€๊ธฐํ•˜๋„๋ก ํ•œ๋‹ค. ์“ฐ๋ ˆ๋“œ๋ฅผ ํ•„์š”ํ•  ๋•Œ ๋งŒ๋“ค์–ด์„œ ์“ด ๊ฒฝ์šฐ๋Š” ์ƒ์„ฑ์— ์ œํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ž„๊ณ„์ ์ด ๋„˜์–ด๋ฒ„๋ ค ์„œ๋ฒ„๊ฐ€ ์ฃฝ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์“ฐ๋ ˆ๋“œ ํ’€๋กœ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด ๊ณผ๋„ํ•œ ์š”์ฒญ๋“ค์€ ๋Œ€๊ธฐํ•˜๋„๋ก ๋งŒ๋“ค์–ด ์„œ๋ฒ„ ํญ์ฃผ๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.

 

 

Q. ์š”์ฒญ์ด ๋“ค์–ด์™”์„ ๋•Œ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๋ฏธ๋ฆฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๊ฒฐ๊ตญ ๋‘˜ ๋‹ค ์“ฐ๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ธ๋ฐ ์™œ ์„ฑ๋Šฅ์— ์ฐจ์ด๊ฐ€ ๋‚˜๋Š”๊ฑธ๊นŒ?

A. ์“ฐ๋ ˆ๋“œ๋Š” ์‹๋‹น์—์„œ ์ผํ•˜๋Š” ์ข…์—…์›์— ๋น„์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๋Ÿฌ ์ข…์—…์›์ด ์ฃผ๋ฌธ์„œ์™€ ์š”๋ฆฌ ์„œ๋น™์„ ๋™์‹œ๋‹ค๋ฐœ๋กœ ํ•˜๋ฉด ๊ทธ ํ–‰์œ„๊ฐ€ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋œ๋‹ค. ์‚ฌ์žฅ์ด ์ข…์—…์›์„ ์—ฌ๋Ÿฌ๋ช… ๊ณ ์šฉํ•œ ํ›„ ์†๋‹˜์˜ ์š”์ฒญ์ด ๋งŽ์•„์ง€๋ฉด ์ข…์—…์›์„ ๋‚ด๋ณด๋‚ด๊ณ  ์š”์ฒญ์ด ์ ์–ด์ง€๋ฉด ๋‹ค์‹œ ํ’€๋กœ ๋“ค์–ด์™€ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์ข…์—…์›์„ ๊ณ ์šฉํ•˜๊ณ  ํ•ด๊ณ ํ•˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ด๋ฏธ ์—ฌ๋Ÿฌ๋ช…์„ ๊ณ ์šฉํ•ด๋‘” ๋’ค ํ’€์ด๋ผ๋Š” ๋Œ€๊ธฐ์‹ค์—์„œ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ํ•œ ํ›„ ์š”์ฒญ์˜ ์ˆ˜๋งŒํผ ๋Œ๋ฆฐ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ์ข…์—…์›์„ ๊ณ ์šฉํ•˜๊ณ  ํ•ด๊ณ ํ•˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด ๋‹น์—ฐํžˆ ๋” ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋น„์šฉ์ด ๋“ค ๊ฒƒ์ด๋‹ค. ์ด๋ฏธ ๊ณ ์šฉํ•œ ํ›„ ํ•„์š”ํ•œ ๋งŒํผ ์ข…์—…์›์„ ๋Œ๋ฆฌ๊ณ  ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋Œ€๊ธฐํ•˜๊ฒŒ ํ•œ ํ›„ ์š”์ฒญ์ด ์ƒˆ๋กญ๊ฒŒ ๋“ค์–ด์˜ค๋ฉด ๊ฐ™์€ ์ข…์—…์›์ด ๋‚˜๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์‘๋Œ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ์— ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.

 

 

๊ฐœ๋ฐœ์ž๋Š” ์“ฐ๋ ˆ๋“œ ํ’€์˜ ์ˆซ์ž๋ฅผ ์ ์ •ํ•˜๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. ์“ฐ๋ ˆ๋“œ ํ’€์˜ ์ˆ˜๋ฅผ ๋„ˆ๋ฌด ๋‚ฎ๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์š”์ฒญ์€ ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋˜๊ณ  ๊ณ ๊ฐ์˜ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์€ ์ง€์—ฐ๋œ๋‹ค. ์“ฐ๋ ˆ๋“œ ํ’€์˜ ์ˆ˜๋ฅผ ๋„ˆ๋ฌด ๋†’๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋™์‹œ ์š”์ฒญ์ด ๋งŽ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ž„๊ณ„์ ์„ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜์–ด ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋  ๊ฒƒ์ด๋‹ค. ์ ์ • ์ˆซ์ž๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์€ ๋กœ์ง์ด ์–ผ๋งˆ๋‚˜ ๋ณต์žกํ•œ์ง€, CPU์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ทธ๋ฆฌ๊ณ  IO ๋ฆฌ์†Œ์Šค ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์•„ํŒŒ์น˜ab, ์ œ์ด๋ฏธํ„ฐ, nGrinder ํˆด๋กœ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

 

 


 

 

 

โœ”๏ธ  HTML ํŽ˜์ด์ง€์™€ HTML API ๊ทธ๋ฆฌ๊ณ  WAS๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑ๋˜๋Š”์ง€

 

HTML ํŽ˜์ด์ง€

: ๋™์ ์œผ๋กœ ํ•„์š”ํ•œ HTML ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์„œ ์ „๋‹ฌํ•œ๋‹ค. ์ฃผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” ํ™ˆํŽ˜์ด์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋กœ๊ทธ์ธ ํ™”๋ฉด ์˜ˆ์‹œ

<form action="/login" method="post">
  <input name="username">
  <input name="password" type="password">
  <button type="submit">๋กœ๊ทธ์ธ</button>
</form>
์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์ด๋Š” ํŽ˜์ด์ง€์ด๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด /login ๊ฒฝ๋กœ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ post ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ด์งˆ ๊ฒƒ์ด๋‹ค.

 

 

HTML API

: HTML์ด ์•„๋‹Œ JSON์ด๋‚˜ XML ํ˜•์‹์œผ๋กœ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋กœ๊ทธ์ธ API

fetch('/api/login', {
  method: 'POST',
  body: JSON.stringify({ username: 'sori', password: '1234' }),
  headers: { 'Content-Type': 'application/json' }
})
.then(response => response.json())
.then(data => console.log(data));
๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ธ์„ ๋•Œ ํ™”๋ฉด์— ์ ํžŒ ๋ฐ์ดํ„ฐ๋ฅผ Controller๊นŒ์ง€ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด HTML API(์›น API ํ˜น์€ REST API)๊ฐ€ ํ•˜๋Š” ์ผ์ด๋‹ค. fetch ํ•จ์ˆ˜์˜ ์ธ์ž์—๋Š” ๋“ค์–ด์˜จ ๊ฒฝ๋กœ์™€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ด๋Š”์ง€ ์–ด๋–ค ๋‚ด์šฉ์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ณด๋‚ผ๊ฑด์ง€์— ๋Œ€ํ•ด ์ ๋Š”๋‹ค. ์œ„์˜ ์ฝ”๋“œ๋Š” login ๊ฒฝ๋กœ๋กœ ๋“ค์–ด์˜จ ์ •๋ณด๋ฅผ POST(์ƒˆ๋กœ์šด ์ž์› ์š”์ฒญ)๋ฐฉ์‹์œผ๋กœ ๋ณด๋‚ด๋ฉฐ username๊ณผ password๋Š” JSON ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๋‚ด์šฉ์ด ๋“ค์–ด์žˆ๋‹ค. ์ด API ์š”์ฒญ์€ WAS์˜ Controller๊ฐ€ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

HTTP API๋Š” ๋ธŒ๋ผ์šฐ์ € ๊ฐ™์€ UI ํด๋ผ์ด์–ธํŠธ์™€ ํ†ต์‹ ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.์„œ๋ฒ„์™€ ์„œ๋ฒ„ ๊ฐ„์—๋„ HTTP API๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ’ˆ์„ ์ฃผ๋ฌธํ•œ ๋’ค ๊ฒฐ์ œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ, ์ฃผ๋ฌธ ์„œ๋ฒ„์™€ ๊ฒฐ์ œ ์„œ๋ฒ„๊ฐ€ HTTP API๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ ํ†ต์‹ ํ•œ๋‹ค.

 

 

WAS์˜ Controller

@RestController
@RequestMapping("/api")
public class LoginController {

    @PostMapping("/login")
    public ResponseEntity<LoginResult> login(@RequestBody LoginRequest request) {       
       // ๋กœ์ง ์ˆ˜ํ–‰ ์ฝ”๋“œ...
        return ResponseEntity.ok(new LoginResult("success", "Welcome!"));
    }
}
๋กœ๊ทธ์ธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” Controller๋‹ค. @RequestMapping("/api")๋Š” ์ด ํด๋ž˜์Šค์˜ ๋ชจ๋“  ์š”์ฒญ์€ api๋กœ ์‹œ์ž‘๋œ ๊ฒฝ๋กœ๋งŒ ์ฒ˜๋ฆฌํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. @PostMapping์€ /api/login ๊ฒฝ๋กœ ์ค‘ post ์š”์ฒญ๋งŒ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜จ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์ผ๋ จ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์‹คํ–‰๋œ๋‹ค. 

์‹คํ–‰๋˜๋Š” ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด์ž๋ฉด, HTML ํŽ˜์ด์ง€์— ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ๊ด€๋ จ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, HTML API๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ค ํ˜•ํƒœ๋กœ ์–ด๋–ค ๊ฒฝ๋กœ๋กœ ๋ณด๋‚ผ๊ฑด์ง€ ์ •๋ฆฌํ•˜์—ฌ WAS๋กœ ๋ณด๋‚ธ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด WAS ๋‚ด์— ์žˆ๋Š” Controller ์ค‘ @RestController๊ฐ€ API ์š”์ฒญ์„ ๋ฐ›๊ณ  ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ(์˜ˆ๋กœ ํ†ฐ์บฃ)๊ฐ€ ์š”์ฒญ์„ ์ „๋‹ฌํ•œ๋‹ค. ์ „๋‹ฌ๋œ ์š”์ฒญ์— ๋งž์ถฐ ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ์ˆ˜ํ–‰๋˜๊ณ  JSON ๋ฐ์ดํ„ฐ๋กœ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋Š” API ์‘๋‹ต์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „๋‹ฌ๋œ๋‹ค. ๋กœ๊ทธ์ธ์ด ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ๋‹ค๋ฉด ๊ทธ์— ๋งž๋Š” ํ™”๋ฉด์„ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ›๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

 

 

 


 

 

 

โœ”๏ธ  ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง, ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง, ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง

 

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง

: ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์š”์ฒญํ•ด ๋ฐ›์€ ๋‚ด์šฉ์„ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ํ‘œ์‹œํ•ด์ฃผ๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค.

 

 

SSR (์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง)

์ •์ ์ธ ํ™”๋ฉด์— ์‚ฌ์šฉํ•˜๋ฉฐ, HTML ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์„œ๋ฒ„์—์„œ ๋งŒ๋“ค์–ด์„œ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ „๋‹ฌํ•œ๋‹ค.

 

์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ๋ฐฉ์‹์€ ๋ณดํ†ต ๋ฐฑ์—”๋“œ ์ง€ํ–ฅ ๊ฐœ๋ฐœ์ž๋“ค์ด Spring๊ณผ Thymeleaf ๋“ฑ์„ ์‚ฌ์šฉํ•ด ํ™”๋ฉด๊ณผ ๋กœ์ง์„ ํ•จ๊ป˜ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์ž์ฃผ ํ™œ์šฉ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณด๋ฉด ์ ํ•ฉํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

 

CSR (ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง)

๋™์ ์ธ ํ™”๋ฉด์— ์‚ฌ์šฉํ•˜๋ฉฐ, HTML ๊ฒฐ๊ณผ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝ๋ฅผ ์‚ฌ์šฉํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•ด์„œ ์ ์šฉํ•œ๋‹ค.

 

ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ๋ฐฉ์‹์ด ์›น ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๊ฐ€ ๋‚˜๋‰˜์–ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. Vue.js, React๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์ธ ํ™”๋ฉด์„ ์ œ๊ณตํ•˜๊ณ  ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ์ดํ„ฐ API์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋“ฑ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

 

 

 


 

 

์•„๋ž˜์— ์ถœ์ฒ˜๋ฅผ ๋‚จ๊ฒจ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.
๋ธ”๋กœ๊ทธ์—” ์ œ๊ฐ€ ์ตœ๋Œ€ํ•œ ์ดํ•ดํ•œ ๋‚ด์šฉ๊นŒ์ง€๋งŒ ์ ๋Š”๊ฑฐ๋ผ
์ถœ์ฒ˜์— ๋“ค์–ด๊ฐ€์‹œ๋ฉด ๋” ๋งŽ์€ ๋‚ด์šฉ์ด ์žˆ์–ด ๊ณต๋ถ€ํ•˜์‹œ๋Š”๋ฐ ๋„์›€๋˜์‹ค๊ฒ๋‹ˆ๋‹ค.

 

๐Ÿชฝ

ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์„ธ์š”

 

 

 


 

 

- ์›น์„œ๋ฒ„์™€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ์ฐจ์ด

 

[Web] Web Server์™€ WAS์˜ ์ฐจ์ด์™€ ์›น ์„œ๋น„์Šค ๊ตฌ์กฐ - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

 

- ์›น๊ณผ HTTP

 

WEB๊ณผ HTTP / (ํŠน์ง•, ๊ตฌ์กฐ, ๋™์ž‘ ๊ณผ์ • ์˜ˆ์‹œ)

ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์ง€์ ํ•ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณต๋ถ€์— ๋งŽ์€ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. WEB (World Wide Web) ์›น = ์ธํ„ฐ๋„ท? ์ธํ„ฐ๋„ท์ด๋ผ๋Š” ๊ฑฐ๋Œ€ํ•œ ๋„คํŠธ์›Œํฌ ์œ„์—์„œ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋“ค์ด ๋™์ž‘ํ•˜๋Š”๋ฐ, ์›น๋„ ์ธํ„ฐ

mag1c.tistory.com

 

- WAS์™€ ์„œ๋ธ”๋ฆฟ

 

[WEB] WAS(Web Application Server)์™€ ์„œ๋ธ”๋ฆฟ(Servlet)์— ๋Œ€ํ•˜์—ฌ

์ดˆ์ฐฝ๊ธฐ ์›น์ด ์ถœํ˜„ํ–ˆ์„ ๋•Œ๋Š” ์ •์ (Static)์ธ ์›น ํŽ˜์ด์ง€๋“ค์ด ๋งŽ์•˜๊ณ  ๊ทธ๊ฒƒ๋“ค๋งŒ์œผ๋กœ๋„ ์˜๋ฏธ ์ „๋‹ฌ์ด ์ถฉ๋ถ„ํžˆ ๋  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ •์  ์›น ํŽ˜์ด์ง€์˜ ๋ชจ๋“  ๋‚ด์šฉ์€ ์ •ํ•ด์ ธ ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์˜ ์‚ฌ์šฉ์ž์˜

velog.io

 

- fetch์™€ post

 

fetch ํ•จ์ˆ˜: POST Request

POST ์š”์ฒญ, fetch ํ•จ์ˆ˜, then() ๋ฉ”์„œ๋“œ์—์„œ์˜ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ, Response message ์ฒ˜๋ฆฌ

velog.io

 

- fetch

 

[JavaScript] fetch ํ•จ์ˆ˜ ์“ฐ๋Š” ๋ฒ•, fetch ํ•จ์ˆ˜๋กœ HTTP ์š”์ฒญํ•˜๋Š” ๋ฒ•

fetch ํ•จ์ˆ˜๋Š” XMLHttpRequest ๊ฐ์ฒด๋ณด๋‹ค ์ตœ๊ทผ์— ๋‚˜์˜จ, HTTP ์š”์ฒญ ์ „์†ก ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” Web API๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด ์Šต๊ด€์ฒ˜๋Ÿผ ์“ฐ๋˜ fetch์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.

velog.io

 

- ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง, CSR๊ณผ SSR

 

ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR) vs ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)

๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง์ด๋ž€? ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์š”์ฒญํ•ด ๋ฐ›์€ ๋‚ด์šฉ์„ ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด(View)์— ํ‘œ์‹œํ•ด์ฃผ๋Š” ์ž‘์—…์„ ๋งํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ HTML, CSS, JavaScript ๋ฌธ์„œ๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ๋ธŒ๋ผ์šฐ์ € ์—”์ง„์ด

suzzeong.tistory.com

 

 

#6083_ ๋น› ์„ž์–ด ์ƒ‰ ๋งŒ๋“ค๊ธฐ.

์ž…๋ ฅ : 2 2 2

์ถœ๋ ฅ : 0 0 0
      0 0 1
      0 1 0
      0 1 1
      1 0 0
      1 0 1
      1 1 0
      1 1 1
      8
๋‚ดํ’€์ด

r, g, b = map(int, input().split())
cnt = 0

for i in range(r):
    for j in range(g):
        for k in range(b):
            print(i, j, k)
            cnt += 1
print(cnt)
์ •๋‹ตํ’€์ด

r, g, b = input().split()

r = int(r)
g = int(g)
b = int(b)

for i in range(0, r) :
  for j in range(0, g) :
    for k in range(0, b) :
      print(i, j, k)

print(r*g*b)

 

 

 

#6089_ ์ˆ˜ ๋‚˜์—ดํ•˜๊ธฐ2.

์ž…๋ ฅ : 2 3 7

์ถœ๋ ฅ : 1458
๋‚ดํ’€์ด

a,r,n = map(int,input().split( ))
print(a*(r**(n-1)))
๋‚ดํ’€์ด

a, r, n = map(int, input().split())
ans = a*r

for i in range(0, n-2) :
  ans = ans*r

print(ans)
์ •๋‹ตํ’€์ด

a, r, n = input().split()

a = int(a)
r = int(r)
n = int(n)

for i in range(1, n) :
  a = a*r

print(a)
** ์—ฐ์‚ฐ์ž๋Š” ๊ฑฐ๋“ญ์ œ๊ณฑ ์—ฐ์‚ฐ์ž๋กœ **์˜ ์™ผ์ชฝ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ‘, ์˜ค๋ฅธ์ชฝ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์ง€์ˆ˜๋กœ ํ•œ ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
๋„์›€์ด ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ํ’€์ด๋ฅผ ์ ์–ด๋ณด์ž๋ฉด, ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜จ ๊ฐ’ ์ค‘ 7์„ ์‚ดํŽด๋ณด๋ฉด ๊ทธ ์˜๋ฏธ๋Š” 7๋ฒˆ์งธ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ผ๋Š” ๋œป์ด๋‹ค. ์ฒซ๋ฒˆ์งธ ๋‚ดํ’€์ด์—์„œ n-1์ธ ์ด์œ ๋Š” a์ž์ฒด๊ฐ€ ์ฒซ๋ฒˆ์งธ ์ˆ˜๊ฐ€ ๋˜๋‹ˆ๊นŒ ๊ตณ์ด ์—ฐ์‚ฐ์„ ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์„œ n์—์„œ ํ•˜๋‚˜๋ฅผ ์ฐจ๊ฐํ•œ ์ฑ„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด๊ณ  ๋‘๋ฒˆ์งธ ๋‚ดํ’€์ด์—์„œ n-2์ธ ์ด์œ ๋Š” ์ฒซ๋ฒˆ์งธ ์ˆ˜ a, ๋‘๋ฒˆ์งธ ์ˆ˜ a*r(ans)์ด๋ผ์„œ ๋‘ ๊ฐœ์˜ ๊ณผ์ •์„ ์ œ์™ธํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— n-2๋ฅผ ํ•ด์คฌ๋‹ค.
2 - 6 - 18 - 54 - 162 - 486 - 1458 ์ด๋ ‡๊ฒŒ 7๋ฒˆ์งธ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

#6091_ ํ•จ๊ป˜ ๋ฌธ์ œ ํ‘ธ๋Š” ๋‚ .

์ž…๋ ฅ : 3 7 9

์ถœ๋ ฅ : 63
๋‚ดํ’€์ด

import math

a,b,c = map(int, input().split( ))

def lcm(x,y) :

 return(x*y)//math.gcd(x,y)

result = lcm(lcm(a,b),c)

print(result)
์ •๋‹ตํ’€์ด

a, b, c = map(int, input().split())
d = 1

while(d%a!=0 or d%b!=0 or d%c!=0) :
  d = d+1

print(d)
๋‚ดํ’€์ด๋Š” ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ์‚ฌ์šฉํ•œ ํ’€์ด๋‹ค. ํŒŒ์ด์ฌ์€ ๋‹ค์–‘ํ•œ ๋‚ด์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์–ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ์ฝ”๋“œ๊ฐ€ ์งง๊ฒŒ ๋‹จ์ถ•๋œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๊ทธ ์ค‘ math ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ˆ˜ํ•™ ๊ด€๋ จ ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ์–ด, ์‚ผ๊ฐํ•จ์ˆ˜ ํ˜น์€ ์ œ๊ณฑ๊ทผ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.
lcm์€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๊ฒƒ์ด๊ณ  ๊ทธ ์•ˆ์— math.gcd๋ผ๋Š” math ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์†ํ•œ gcd ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. gcd๋Š” ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋กœ ๋‘ ์ˆ˜์ธ x์™€ y๋ฅผ 0์ด ๋  ๋•Œ ๊นŒ์ง€ ๋‚˜๋ˆ„๊ณ  ๋‚˜๋ˆ ์ง„ ์ˆ˜๋ฅผ ๋‘ ์ž์—ฐ์ˆ˜์˜ ๊ณฑ์— ๋‚˜๋ˆ„๋ฉด ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โ€‹

 

#6092_ ์ด์ƒํ•œ ์ถœ์„ ๋ฒˆํ˜ธ ๋ถ€๋ฅด๊ธฐ1.

์ž…๋ ฅ : 10
      1 3 2 2 5 6 7 4 5 9
      
์ถœ๋ ฅ : 1 2 1 1 2 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
๋‚ดํ’€์ด

a = int(input())
num = list(map(int,input().split()))
att = list()

for i in range(24):
  att.append(0)

for i in range(a):
  att[num[i]] = att[num[i]]+1

for i in range(1, 24):
  print(att[i], end=" ")
์ •๋‹ตํ’€์ด

n = int(input())
a = input().split()

for i in range(n) :
  a[i] = int(a[i])

d = []
for i in range(24) :
  d.append(0)

for i in range(n) :
  d[a[i]] += 1

for i in range(1, 24) :
  print(d[i], end=' ')
๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ผญ ์–ด๋–ค ์ˆ˜๋กœ๋“  ์ฑ„์›Œ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค. ์•ˆ๊ทธ๋Ÿฌ๋ฉด 0๋ฒˆ์ง€, 1๋ฒˆ์ง€ ๋“ฑ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด์žˆ์–ด ํ•ด๋‹น ์ธ๋ฑ์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

 

#6093_ ์ด์ƒํ•œ ์ถœ์„ ๋ฒˆํ˜ธ ๋ถ€๋ฅด๊ธฐ2.

์ž…๋ ฅ : 10

์ถœ๋ ฅ : 5 8 9 7 6 6 3 2 4 10
๋‚ดํ’€์ด

a = int(input())
b = a-1
num = list(map(int,input().split()))

for i in range(a) :
  print(num[b-i],end=" ")
๋‚ดํ’€์ด

n = int(input())
a = list(map(int,input().split( )))

d = []
for i in range(n) :
  d.append(a[i])

d.reverse()

for i in range(n) :
  print(d[i], end=" ")
์ •๋‹ตํ’€์ด

n = int(input())
a = input().split()

for i in range(n) :
  a[i] = int(a[i])

for i in range(n-1, -1, -1):
  print(a[i], end=' ')
d.reverse( )๋Š” ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฑฐ๊พธ๋กœ ๋’ค์ง‘์–ด์ค€๋‹ค. (์—ญ์ˆœ์ •๋ ฌ์ด ์•„๋‹˜)


#6063_ ์ •์ˆ˜ ๋‘ ๊ฐœ ์ž…๋ ฅ๋ฐ›์•„ ํฐ ๊ฐ’ ์ถœ๋ ฅํ•˜๊ธฐ. (์‚ผํ•ญ์—ฐ์‚ฐ์ž ์‚ฌ์šฉํ•  ๊ฒƒ)

์ž…๋ ฅ : 123 456

์ถœ๋ ฅ : 456
๋‚ดํ’€์ด

a,b = map(int,input().split())
c = a if a>b else b
print(c)
๋‚ดํ’€์ด

a,b = map(int,input().split())
print(a) if a>b else print(b)
์ •๋‹ตํ’€์ด

a, b = input().split()
a = int(a)
b = int(b)
c = a if a>=b else b
print(c)
์‚ผํ•ญ์—ฐ์‚ฐ์ž๋Š” [์ฐธ์ผ๋•Œ] if [์กฐ๊ฑด๋ฌธ] else [๊ฑฐ์ง“์ผ๋•Œ] ํ˜•ํƒœ๋กœ ์“ฐ์ด๋ฉฐ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด๋ณด์ธ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ์˜คํžˆ๋ ค ๋ณต์žกํ•œ ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ๊ฐ€๋…์„ฑ์ด ๋” ๋–จ์–ด์ ธ ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค.

 

- ์‚ผํ•ญ ์—ฐ์‚ฐ์ž

 

[python] ํŒŒ์ด์ฌ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž (if ~ else ~)

์•ˆ๋…•ํ•˜์„ธ์š”. BlockDMask์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ํŒŒ์ด์ฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‚ผํ•ญ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 1. ํŒŒ์ด์ฌ์—์„œ์˜ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž 2. ํŒŒ์ด์ฌ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž ์˜ˆ์ œ 1. ์‚ผํ•ญ ์—ฐ์‚ฐ์ž (Ternary Operators) 1-1) ์‚ผ

blockdmask.tistory.com

 

 

 


#6071_ 0์ด ์ž…๋ ฅ๋  ๋•Œ๊นŒ์ง€ ๋ฌดํ•œ ์ถœ๋ ฅํ•˜๊ธฐ.

์ถœ๋ ฅ : 7
      4
      2
      3
      0
      1
      
์ž…๋ ฅ : 7
      4
      2
      3
๋‚ดํ’€์ด

while True :
    a = int(input())
    if a == 0 :
        break
    print(a)
์ •๋‹ตํ’€์ด

while True:
    a=input()
    a=int(a)
    if a==0:
        break
    else:
        print(a)
์ •๋‹ตํ’€์ด

n = 1

while n != 0 :
  n = int(input())
  if n != 0 :
    print(n)

 

 

 

#6074_ ๋ฌธ์ž ํ•œ ๊ฐœ ์ž…๋ ฅ๋ฐ›์•„ ์•ŒํŒŒ๋ฒณ ์ถœ๋ ฅํ•˜๊ธฐ

์ž…๋ ฅ : f

์ถœ๋ ฅ : a b c d e f
๋‚ดํ’€์ด

a = ord(input())
c = 97

while a >= c :
  print(chr(c), end = " ")
  c = c+1
์ •๋‹ตํ’€์ด

c = input()
i = ord('a')
c = ord(c)

while i<=c:
    print(chr(i), end=' ')
    i+=1
ord('A')๋Š” 65์ด๊ณ , ord('a')๋Š” 97์ด๋‹ค.

 

 


#6081_ 16์ง„์ˆ˜ ๊ตฌ๊ตฌ๋‹จ ์ถœ๋ ฅํ•˜๊ธฐ.

์ž…๋ ฅ : B

์ถœ๋ ฅ : B*1=B
      ...
      B*F=A5
๋‚ดํ’€์ด

a = int(input(),16)
b = int('F',16)
c = int('1', 16)

while c <= b :
  print('%X'%a+'*'+'%X'%c+'='+'%X'%(a*c))
  c = c+1
์ •๋‹ตํ’€์ด

n = int(input(), 16)

for i in range(1, 16) :
  print('%X'%n, '*%X'%i, '=%X'%(n*i), sep='')
16์ง„์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ %X(๋Œ€๋ฌธ์žํ‘œํ˜„)์™€ %x(์†Œ๋ฌธ์žํ‘œํ˜„)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.  8์ง„์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ %O(๋Œ€๋ฌธ์žํ‘œํ˜„)์™€ %o(์†Œ๋ฌธ์žํ‘œํ˜„)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 16์ง„์ˆ˜์™€ 8์ง„์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” 2์ง„์ˆ˜๋กœ ๊ฐ’์„ ํ‘œํ˜„ํ•˜๊ธฐ์— ๋„ˆ๋ฌด ๊ธธ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 16์ง„์ˆ˜์™€ 8์ง„์ˆ˜ ๋ชจ๋‘ 2์ง„์ˆ˜์˜ ์ œ๊ณฑ์˜ ํ˜•ํƒœ๋กœ ๊ธธ์–ด์ง„ 2์ง„์ˆ˜์˜ ๊ฐ’์„ ์งง๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

- 2์ง„์ˆ˜ 8์ง„์ˆ˜ 16์ง„์ˆ˜๋ฅผ ์“ฐ๋Š” ์ด์œ 

 

์ปดํ“จํ„ฐ์—์„œ 2์ง„์ˆ˜, 8์ง„์ˆ˜ 16์ง„์ˆ˜๋ฅผ ์“ฐ๋Š” ์ด์œ 

๊ธฐ๋ณธ์ ์œผ๋กœ ์ธ๊ฐ„์€ 10์ง„์ˆ˜๋ฅผ ์“ด๋‹ค. ํ•˜์ง€๋งŒ ์ปดํ“จํ„ฐ๋Š” 0,1 ๋‘๊ฐ€์ง€ ๋ฐ–์— ๋ชจ๋ฅธ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ 2์ง„๋ฒ•์„ ์“ด๋‹ค๊ณ  ๋ณด๋ฉด ๋˜๋Š”๋ฐ ์‹ฌ์‹ฌ์น˜์•Š๊ฒŒ 8์ง„์ˆ˜์™€ 16์ง„์ˆ˜๋ฅผ ์ฝ”๋”ฉํ•  ๋•Œ ์“ฐ๊ฒŒ๋œ๋‹ค. ํŒŒ์ผ ๊ฐ™์€๊ฑธ ๋‹ค๋ฃฐ ๋•Œ

velog.io

 

 

 

#6082_ 3 6 9 ๊ฒŒ์ž„์˜ ์™•์ด ๋˜์ž.

์ž…๋ ฅ : 9

์ถœ๋ ฅ : 1 2 X 4 5 X 7 8 X
๋‚ดํ’€์ด

a = int(input())

for i in range (1, a+1) :
  b = i%10
  if b==3 or b==6 or b==9 :
    print('X',end=" ")

  else :
    print(i, end=" ")
๋‚ดํ’€์ด

a = int(input())

for i in range(1, a+1):
  if str(i).count('3')+str(i).count('6')+str(i).count('9') :
    print("X", end =" ")
  else :
    print(i, end=" ")
์ •๋‹ตํ’€์ด

n = int(input())

for i in range(1, n+1) :
  if i%10==3 or i%10==6 or i%10==9 :
    print("X", end=' ')
  else :
    print(i, end=' ')
i๊ฐ’์„ str์ธ ๋ฌธ์ž์—ด๋กœ ๋ฐ›๊ณ , ๋ฌธ์ž์—ด i์— 3๊ณผ 6 ๊ทธ๋ฆฌ๊ณ  9๋ผ๋Š” ๋ฌธ์ž๊ฐ€ ํ•œ ๋ฒˆ์ด๋ผ๋„ ๋‚˜์˜ค๋ฉด X๊ฐ€ ์ถœ๋ ฅ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค. ์—ฌ๊ธฐ์„œ count( )๋Š” ๊ด„ํ˜ธ ์•ˆ์— ์ ์ธ ๊ธ€์ž๊ฐ€ ๋ช‡ ๋ฒˆ ๋‚˜์˜ค๋Š”์ง€ ์„ธ๋Š” ํ•จ์ˆ˜๋‹ค.

 

 


#6033_ ๋ฌธ์ž ํ•œ ๊ฐœ ์ž…๋ ฅ๋ฐ›์•„ ๋‹ค์Œ ๋ฌธ์ž ์ถœ๋ ฅํ•˜๊ธฐ.

์ž…๋ ฅ: a
์ถœ๋ ฅ: b
๋‚ดํ’€์ด

a = ord(input())
print(chr(a+1))
์ •๋‹ตํ’€์ด

a=input()
b=ord(a)+1
c=chr(b)
print(c)
ord๋Š” ๋ฌธ์ž -> ์ˆซ์ž๋กœ, chr๋Š” ์ˆซ์ž -> ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
๋ฌธ์ž๊ฐ€ ๋“ค์–ด์™”๊ณ  ๊ทธ ๊ฐ’์„ ์ˆซ์ž๋กœ ๋ฐ”๊พผ ํ›„ a์— ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ˆ a์—๋Š” ์ˆซ์ž๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  a์˜ ๊ฐ’์— 1์„ ๋”ํ•œ ๊ฐ’์„ ๋‹ค์‹œ ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๋ฉด ํ•˜๋‚˜์˜ ๊ฐ’์ด ์ƒ์Šนํ•œ ๋ฌธ์ž๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

#6042_ ์‹ค์ˆ˜ 1๊ฐœ ์ž…๋ ฅ๋ฐ›์•„ ์†Œ์ˆซ์  ์ดํ•˜ ์ž๋ฆฌ ๋ณ€ํ™˜ํ•˜๊ธฐ.

์ž…๋ ฅ: 3.141592

์ถœ๋ ฅ: 3.14
๋‚ดํ’€์ด

a = float(input())
print(format(a,".2f"))
์ •๋‹ตํ’€์ด

f = float(input())
print(round(f,2))
format ๋ฉ”์„œ๋“œ๋Š” ๋ฌธ์ž์—ด์„ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. format ๋ฉ”์„œ๋“œ ์ค‘๊ด„ํ˜ธ ์•ˆ์— ๋ณ€์ˆ˜๋‚˜ ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜๋„ ์žˆ๊ณ  ํ˜•์‹ ์ง€์ •์ž๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.  round ๋ฉ”์„œ๋“œ๋Š” ์ˆซ์ž ์ค‘ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•œ๋‹ค. ๊ทธ ์™ธ ceil๊ณผ floor๋กœ ์˜ฌ๋ฆผ๊ณผ ๋‚ด๋ฆผ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋„ ์žˆ๋‹ค.

 

 

 

- format()ํ•จ์ˆ˜ ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ ์ถœ์ฒ˜

 

[ํŒŒ์ด์ฌ] format() ํ•จ์ˆ˜ ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ

Python์˜ format() ๋ฉ”์†Œ๋“œ๋Š” ๋ฌธ์ž์—ด์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ง€์ •๋œ ํ˜•์‹์— ๋งž๊ฒŒ ๊ฐ’์„ ํฌ๋งทํ•˜๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. format() ๋ฉ”์†Œ๋“œ๋Š” ์ค‘๊ด„ํ˜ธ {}๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด ์•ˆ์— ๋ณ€์ˆ˜๋‚˜ ๊ฐ’๋“ค์„ ์‚ฝ์ž…

python101.tistory.com

 

 

- round() ceil() floor() ์ถœ์ฒ˜

 

[ํŒŒ์ด์ฌ] ๋ฐ˜์˜ฌ๋ฆผ, ์˜ฌ๋ฆผ, ๋‚ด๋ฆผ (round, ceil, floor) ๋ฐฉ๋ฒ•

Python์—์„œ ๋ฐ˜์˜ฌ๋ฆผ, ์˜ฌ๋ฆผ, ๋‚ด๋ฆผ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1. ๋ฐ˜์˜ฌ๋ฆผ(round) round() ํ•จ์ˆ˜๋Š” ์ˆซ์ž๋ฅผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, round(3.7)์€ 4

python101.tistory.com

 

 

 

#6048_ ์ •์ˆ˜ 2๊ฐœ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋น„๊ตํ•˜๊ธฐ.

์ž…๋ ฅ : 1 9

์ถœ๋ ฅ : True
๋‚ดํ’€์ด

a,b = map(int, input.split())
if (a<b) :
    print(True)
else :
    print(False)
์ •๋‹ตํ’€์ด

a, b = input().split()
a = int(a)
b = int(b)
print(a<b)

 

 

 

#6048_ ๋‘˜ ๋‹ค ์ฐธ์ผ ๊ฒฝ์šฐ๋งŒ ์ฐธ ์ถœ๋ ฅํ•˜๊ธฐ.

์ž…๋ ฅ : 1 1

์ถœ๋ ฅ : True
๋‚ดํ’€์ด

a,b = map(int, input().split())

if a >0 and b>0 :
  print(True)
else :
  print(False)
์ •๋‹ตํ’€์ด

a, b = input().split()
print(bool(int(a)) and bool(int(b)))
Bool ์ž๋ฃŒํ˜•
1. ๋ฌธ์ž์—ด์˜ ๊ฒฝ์šฐ ๋น„์–ด์žˆ์œผ๋ฉด False, ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด True
2. ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ ๋น„์–ด์žˆ์œผ๋ฉด False, ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด True
3. ์ˆซ์žํ˜•์˜ ๊ฒฝ์šฐ 0์ด๋ฉด False, 0์ด ์•„๋‹ˆ๋ฉด True
4. None ๊ฐ’์€ False

 

 

 

#6059_ ๋น„ํŠธ ๋‹จ์œ„๋กœ NOTํ•˜์—ฌ ์ถœ๋ ฅํ•˜๊ธฐ.

์ž…๋ ฅ : 2

์ถœ๋ ฅ : -3
๋‚ดํ’€์ด&์ •๋‹ตํ’€์ด

a = int(input())
print(~a)
~a = -a-1 = -(n+1)๋กœ ํ‹ธ๋“œ ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์Œ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์–ด๋–ค ๋ฆฌ์ŠคํŠธ์—์„œ ๋’ค์—์„œ n๋ฒˆ์งธ ๊ฐ’์„ ์•Œ๊ณ  ์‹ถ๊ฑฐ๋‚˜ ๋ฐ˜์ „๋œ ์ƒํƒœ๊ฐ€ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ (์ผ๋ถ€ ๋น„ํŠธ ์กฐ์ž‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜) ์‚ฌ์šฉํ•œ๋‹ค.

 


๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ_ 585p

 

• ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ํด๋ž˜์Šค

class Onion { }

class Goods1 {
    private Onion onion = new Onion();
    public Onion get() {
        return onionl
    }
    
    public void set(Onion onion) {
        this.onion = onion;
    }
}
Goods1 g1 = new Goods1();
g1.setOnion(new Onion());
Onion onion = (Onion)g1.get();
Onion ํด๋ž˜์Šค์™€ Onion ํด๋ž˜์Šค๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” Goods1 ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค. Goods1์€ Onion ํด๋ž˜์Šค๋งŒ ๋‹ด์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ Onion์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋‹ด๊ณ  ์‹ถ์–ด์ง€๋ฉด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋–ค ์ฝ”๋“œ๋Š” ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค๋ฅผ ๋‹ด๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

• Object๋กœ ์ •์˜ํ•œ ํด๋ž˜์Šค

class Onion {}
class Radish {}

class Goods {
    private Object object = new Object();
    public Object get() {
        return object;
    }
    public void set(Object object) {
        this.object = object;
    }
}
Goods g1 = new Goods();
g1.set(new Onion());
Onion onion = (Onion)g1.get();

Goods g2 = new Goods();
g2.set(new Radish());
Radish radish = (Radish)g2.get();
Onion๊ณผ Radish๋Š” ๋ชจ๋‘ Object ํƒ€์ž…์˜ ์ž์‹์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ž๋ฐ”์—์„œ ๋ชจ๋“  ํด๋ž˜์Šค์˜ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ๋Š” Object๋ฅผ ์ƒ์†๋ฐ›๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ์ œ ์ฝ”๋“œ๋Š” set( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ , get( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ €์žฅ๋œ ๊ฐ’์„ ๊บผ๋‚ธ๋‹ค.

๋งจ ์ฒ˜์Œ ์ œ๋„ˆ๋ฆญ ์—†์ด ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•œ ํด๋ž˜์Šค์˜ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž. ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•  ๋•Œ g1.setOnion์ด๋ผ๊ณ  ์ ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ Object๋กœ ์ •์˜ํ•œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด g1.set(new Onion());์œผ๋กœ Onion์ด Object ํƒ€์ž…์œผ๋กœ ์ €์žฅ๋˜์–ด์žˆ๋‹ค. ์ด ์ ์—์„œ ๋‘ ์ฝ”๋“œ์˜ ์ฐจ์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Object ํƒ€์ž…์œผ๋กœ ์ €์žฅํ–ˆ์œผ๋‹ˆ get์—์„œ๋„ Object ํƒ€์ž…์œผ๋กœ ๊บผ๋‚ผ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์‚ฌ์‹ค ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ๊บผ๋‚ผ ๋•Œ๋Š” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Onion๊ณผ Radish ๊ฐ์ฒด๋กœ ๋‹ค์šด ์บ์ŠคํŒ…ํ•ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ์ž˜๋ชป ์บ์ŠคํŒ…์ด ๋œ ๊ฒฝ์šฐ ClassCastException ์‹คํ–‰ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋œ๋‹ค. ์ด๋ฅผ ์•ฝํ•œ ํƒ€์ž… ์ฒดํฌ๋ผ๊ณ  ํ•œ๋‹ค. 

 

 

 


 

 

 

โœ”๏ธ   ์ œ๋„ค๋ฆญ ๋ฌธ๋ฒ•_ 591p

 

• ์ œ๋„ค๋ฆญ

: ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์™ธ๋ถ€์—์„œ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋ฒ•

 

• ๊ฐ•ํ•œ ํƒ€์ž… ์ฒดํฌ

: ์ž˜๋ชป๋œ ์บ์ŠคํŒ…์„ ํ•  ๋•Œ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ์ž˜๋ชป๋œ ์บ์ŠคํŒ…์œผ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์‚ฌ์ „์— ์˜ˆ๋ฐฉ

 

• ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜์˜ ๊ด€๋ก€์  ํ‘œ๊ธฐ ๋ฐ ์˜๋ฏธ

T ํƒ€์ž…(Type)
K ํ‚ค(Key)
V ๊ฐ’(Value)
N ์ˆซ์ž(Number)
E ์›์†Œ(Element)

 

class KeyValue<K, V> {
    private K key;
    private V value;
    public K getKey() {
        return key;
    }
    
    public void setKey(K key) {
        this.key = key;
    }
    
    public void setValue(V value) {
        this.value = value;
    }
}
KeyValue<String, Integer> kv1 = new KeyValue<>();
kv1.setKey("์‚ฌ๊ณผ");
kv1.setValue(1000);
String key1 = kv1.getKey();
int value1 = kv1.getValue();
System.out.println("key: " + key1 + "value: " + value1);

KeyValue<String, Void> kv2 = new KeyValue<>();
kv2.setKey("ํ‚ค ๊ฐ’๋งŒ ์‚ฌ์šฉ");
String key2 = kv2.getKey();
System.out.println("key: " + key2);
kv1๊ณผ kv2์˜ ํƒ€์ž…์ด ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ์‹œ์ ์— ํƒ€์ž…์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์— ํƒ€์ž…์„ ์ง€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ํ•˜๋‚˜์˜ ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๋กœ ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๊ฐ’์„ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

Object ํƒ€์ž…์˜ ํ•„๋“œ์™€ ์ œ๋„ค๋ฆญ์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ setter ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ž…๋ ฅ ํƒ€์ž…์„ ์ •ํ™•ํžˆ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹ค์šด์บ์ŠคํŒ…์„ ํ•˜์ง€ ์•Š์•„๋„ ํ•ด๋‹น ํƒ€์ž…์œผ๋กœ ์•Œ์•„์„œ ๋ฆฌํ„ด๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ kv2์˜ setKey์— ๋ฌธ์ž์—ด์ด ์•„๋‹Œ ์ˆซ์ž๋ฅผ ๋Œ€์ž…ํ•˜๊ฑฐ๋‚˜ getํ•  ๋•Œ String์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ ๊บผ๋‚ด๋Š” ๊ฒฝ์šฐ ๊ฐ•ํ•œ ํƒ€์ž… ์ฒดํฌ๋กœ ์ธํ•ด ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ๋ฐœ์ƒ์ด ์ผ์–ด๋‚œ๋‹ค. 

์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž KeyValue<String, Integer> kv1 = new KeyValue<>();์—์„œ  KeyValue<String, Integer> kv1 = new KeyValue<String, integer>();์œผ๋กœ ์ž‘์„ฑํ•ด๋„ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ œ๋„ค๋ฆญ ํƒ€์ž…์€ ํ•ญ์ƒ ์™ผ์ชฝ ํ•ญ๊ณผ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ 2๊ฐœ ๊ฐ€์ง„ ๊ฒฝ์šฐ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋Š”๋ฐ, ๋งŒ์•ฝ ํ•˜๋‚˜์˜ ํƒ€์ž…๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ Void๋ฅผ ์ ์œผ๋ฉด ๋œ๋‹ค. 

 

 

 


 

 

 

โœ”๏ธ   ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ_ 597p

 

• ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ

: ์ผ๋ฐ˜ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ํŠน์ • ๋ฉ”์„œ๋“œ๋งŒ ์ œ๋„ค๋ฆญ์œผ๋กœ ์„ ์–ธํ•œ ๊ฒฝ์šฐ

class GenericMethods{
    public <K,V> method1(K k, V v) {
        System.out.println(k + ":" + v);
    }
}
GenericMethods gm = new GenericMethods();

gm.<String, Integer>method1("๊ตญ์–ด", 80);
gm.method1("๊ตญ์–ด", 80);
์ผ๋ฐ˜ ํด๋ž˜์Šค GenericMethods ๋‚ด์— ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ๋กœ 2๊ฐœ์˜ ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ์ฐธ์กฐ๊ฐ์ฒด gm์„ ํ™œ์šฉํ•œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์‹ค์ œ ์ œ๋„ค๋ฆญ ํƒ€์ž…์ด ์–ด๋–ค ํƒ€์ž…์ด์ง€ ์ •์˜ํ•ด๋‘” ์ฝ”๋“œ์™€ ์ƒ๋žตํ•œ ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ œ๋„ค๋ฆญ ํƒ€์ž…์ด ์–ด๋–ค ํƒ€์ž…์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๊ธฐ ์ƒ๋žตํ•ด๋„ ๋ฌด๊ด€ํ•˜๋‹ค. ๋‹ค๋งŒ ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜ ์ž์ฒด๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” public static <T> void doSomething() ์ด๋Ÿฐ ์˜ˆ์‹œ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žต์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

 

 

• ์ œ๋„ค๋ฆญ Object ํƒ€์ž…

public <T> void method(T t) {
    System.out.println(t.equals("์•ˆ๋…•"));
}
์œ„์˜ ์ฝ”๋“œ๋Š” ํƒ€์ž…์— ์ œํ•œ์ด ์—†๋Š” ์ฝ”๋“œ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์‹œ T๋ฅผ Object๋กœ ๊ฐ„์ฃผํ•˜์—ฌ Object์— ์ •์˜๋œ ๋ฉ”์„œ๋“œ hashcode, eqauls, toString ๋“ฑ๋งŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ์˜ ํ™œ์šฉ ๋ฒ”์œ„๊ฐ€ ๋งค์šฐ ์ข์•„์ง€๊ฒŒ๋œ๋‹ค.

์•„๋ž˜์— ์ •๋ฆฌ๋˜๊ฒ ์ง€๋งŒ, ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ๊ฒฝ์šฐ ๋” ๋„“๊ฒŒ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ œ๋„ค๋ฆญ ํƒ€์ž…์˜ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•œ๋‹ค. ํ˜„์žฌ ์ฝ”๋“œ์—์„œ t.equals๊ฐ€ ์•„๋‹Œ t.length์ธ String ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ <T>๋ฅผ <T extends String>์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด String ํด๋ž˜์Šค์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

 

 


 

 

 

โœ”๏ธ   ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ฒ”์œ„ ์ œํ•œ_ 602p

 

• ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค ํƒ€์ž… ๋ฒ”์œ„ ์ œํ•œ

class A {}
class B extends A {}
class C extends B {}

class D <T extends B> {
    private T t;
    public T get() {
        return t;
    }
    public void set(T t) {
        this.t = t;
    }
}
D<B> d2 = new D<>();
D<C> d3 = new D<>();
D d4 = new D();

d2.set(new B());
d2.set(new C());

d3.set(new C());

d4.set(new B());
d4.set(new C());
์ œ๋„ค๋ฆญ ํด๋ž˜์Šค์˜ ํƒ€์ž… ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ๋Œ€์ž…๋  ์ˆ˜ ์žˆ๋Š” ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ extends ํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ <์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜ extends ์ƒ์œ„ ํด๋ž˜์Šค>์˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด๋•Œ extends๋Š” ์ƒ์†ํ•˜๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ์•„๋‹Œ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค ํ˜น์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ง€์ •ํ•œ๋‹ค๋ผ๋Š” ์˜๋ฏธ๋กœ ๊ฐ€์ง„๋‹ค.  ์ฝ”๋“œ์—์„œ๋Š” <T extends B> ๋กœ ์ž‘์„ฑํ–ˆ์œผ๋ฉฐ A <- B <- C์˜ ์ƒ์† ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค. 

์ œ๋„ค๋ฆญ ํด๋ž˜์Šค D๋ฅผ ์‚ดํŽด๋ณด์ž. ํด๋ž˜์Šค D๋Š” ํด๋ž˜์Šค B ๋˜๋Š” ํด๋ž˜์Šค B์˜ ์ž์‹ ํด๋ž˜์Šค๋งŒ ์˜ค๋„๋ก ์ œํ•œํ–ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋Š” ๊ฒƒ์€ A๋Š” ์ œํ•œ์— ๊ฑธ๋ ค D<A> d1 = new D<>(); ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. d2๋Š” ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ B๋ฅผ ์ง€์ •ํ•˜์—ฌ B์™€ C ๊ฐ์ฒด๊ฐ€ ์ž…๋ ฅ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ d3๋Š” C ํƒ€์ž…์œผ๋กœ ์ง€์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— C์˜ ์ƒ์œ„ํด๋ž˜์Šค B๊ฐ์ฒด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์—†๋‹ค. d4๋Š” ํƒ€์ž…์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ชจ๋“  ํƒ€์ž…์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ <B> ํƒ€์ž…์ด๋ฏ€๋กœ ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ๋Œ€์ž…๋˜์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ d4๋Š” B์™€ C ๊ฐ์ฒด๊ฐ€ ์ž…๋ ฅ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

 

• ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ ํƒ€์ž… ๋ฒ”์œ„ ์ œํ•œ

class A {}
class B extends A {}
class C extends B {}
class D extends C {}

class Goods <T> {
    private T t;
    public T get() {
        return t;
    }
    public void set(T t) {
        this.t = t;
    }
}
void methods(Goods<A> g) {}
void methods(Goods<?> g) {}
void methods(Goods<? extends B> g) {}
void methods(Goods<? super B> g) {}
extends๋Š” ์•„๊นŒ์™€ ๊ฐ™์ด ํ•ด๋‹น ํด๋ž˜์Šค์™€ ์ž์‹ ํด๋ž˜์Šค๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿผ ์ฝ”๋“œ์—์„œ B๋ผ๊ณ  ์ ํ˜€์žˆ์œผ๋‹ˆ B ํด๋ž˜์Šค์™€ B์˜ ์ž์‹ ํด๋ž˜์Šค์ธ ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๋‹ค. super๋Š” ํ•ด๋‹น ํด๋ž˜์Šค์™€ ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ ๊ฐ์ฒด๋งŒ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ  B ๋˜๋Š” B์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๋งŒ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋‹ค.

์ƒ์†๊ตฌ์กฐ๋ฅผ ์‚ดํŽด๋ณด๋ฉด A <- B <- C <- D๊ฐ€ ๋œ๋‹ค. Goods<A>๋Š” A์ธ ๊ฐ์ฒด๋งŒ ๊ฐ€๋Šฅํ•˜๊ณ  Goods<?> ๋ชจ๋“  ํƒ€์ž…์ธ ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ์— A, B, C, D ํƒ€์ž…์ด ๋ชจ๋‘ ? ์ž๋ฆฌ์— ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. Goods<? extends B>๋Š” B ๋˜๋Š” B์˜ ์ž์‹ ํด๋ž˜์Šค์ธ ๊ฐ์ฒด๋งŒ ๊ฐ€๋Šฅํ•˜๊ธฐ์— B, C, D ํƒ€์ž…์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ Goods<? super B>๋Š” B ๋˜๋Š” B์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ ๊ฐ์ฒด๋งŒ ๊ฐ€๋Šฅํ•ด์„œ A, B๊ฐ€ ์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ์ง€์ •๋  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 


 

 

 

โœ”๏ธ   ์ œ๋„ค๋ฆญ์˜ ์ƒ์†_ 612p

 

• ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค์˜ ์ƒ์†

class Parent {
    <T extends Number void print(T t) {
        System.out.println(t);
    }
}

class Child extends Parents {
}
Parent p = new Parent();
p.<Integer>print(10);
p.print(10);

Child c = new Child();
c.<Double>print(5.8);
c.print(5.8);
๋ถ€๋ชจํด๋ž˜์Šค๊ฐ€ ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค์ธ ๊ฒฝ์šฐ ์ž์‹ ํด๋ž˜์Šค๋„ ์ œ๋„ค๋ฆญ ํด๋ž˜์Šค๊ฐ€ ๋˜์–ด ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ฌผ๋ ค๋ฐ›๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ž์‹ ํด๋ž˜์Šค์˜ ์ œ๋„ค๋ฆญ ํƒ€์ž… ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๋Š” ์–ธ์ œ๋‚˜ ๋ถ€๋ชจ์™€ ๊ฐ™๊ฑฐ๋‚˜ ๊ทธ ์ด์ƒ์ผ ๊ฒƒ์ด๋‹ค.

์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์ตœ์ƒ์œ„ ์ œ๋„ค๋ฆญ ํƒ€์ž…์ด Number๋กœ ์ œํ•œ๋˜์–ด ์žˆ๋‹ค. Number ํด๋ž˜์Šค๋Š” boolean๊ณผ char์„ ์ œ์™ธํ•œ Byte, Short, Integer, Long, Float, Double์ด ์žˆ๋‹ค. ์ž์‹ ํด๋ž˜์Šค๋Š” Number ํด๋ž˜์Šค ๋‚ด์— ์žˆ๋Š” 6๊ฐ€์ง€ ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” print( )๋ฉ”์„œ๋“œ๋„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ๋™๊ธฐํ™”_ 539p

 

• ๋™๊ธฐํ™”

: ํ•˜๋‚˜์˜ ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ

 

• ๋น„๋™๊ธฐํ™”

: ํ•˜๋‚˜์˜ ์ž‘์—… ๋ช…๋ น ์ดํ›„ ์™„๋ฃŒ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๋ฐ”๋กœ ๋‹ค๋ฅธ ์ž‘์—… ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ

 

• ๋ฉ”์„œ๋“œ ๋™๊ธฐํ™”

: 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ

์ ‘๊ทผ์ง€์ •์ž synchronized ๋ฆฌํ„ดํƒ€์ž… ๋ฉ”์„œ๋“œ๋ช…(์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜){ }
๋ฉ”์„œ๋“œ๋ฅผ ๋™๊ธฐํ™”ํ•  ๋•Œ๋Š” ๋™๊ธฐํ™”ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฉ”์„œ๋“œ์˜ ๋ฆฌํ„ด ํƒ€์ž… ์•ž์— synchronized ํ‚ค์›Œ๋“œ๋งŒ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋™์‹œ์— 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ์—์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค. 

 

 

 

• ๋ธ”๋ก ๋™๊ธฐํ™”

: 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ํ•ด๋‹น ๋ธ”๋ก์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ

์–ด๋–ค ๋ฉ”์„œ๋“œ {
    synchronized (์ž„์˜์˜ ๊ฐ์ฒด) { }
}
์ „์ฒด ๋ฉ”์„œ๋“œ๋ฅผ ๋™๊ธฐํ™”ํ•˜์ง€ ์•Š๊ณ  ์›ํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ๋™๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. ํ•„์š”ํ•œ ์ฝ”๋“œ๋งŒ ๋™๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ ๋™๊ธฐํ™”๋ณด๋‹ค ๋” ์ •๋ฐ€ํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ž„์˜์˜ ๊ฐ์ฒด๋ž€ ๋‚ด๊ฐ€ ์„ ํƒํ•œ ์–ด๋–ค ๊ฐ์ฒด๋กœ ์ž ๊ธˆ์„ ์„ค์ •ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ณ  ์ฃผ๋กœ this๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ˜„์žฌ ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๋กœ ์ž ๊ธˆ์„ ์„ค์ •ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ด ์ž ๊ทผ ๊ฐ์ฒด์™€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๋Š” ๋ธ”๋ก๋“ค์€ ๋™์‹œ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

 

 

 

• ๋ฉ”์„œ๋“œ ๋™๊ธฐํ™”์™€ ๋ธ”๋ก ๋™๊ธฐํ™”

class MyData {
    
    Object keyObject = new Object();
    synchronized void abc() {
    ...
    }
    
    synchronized void bcd() {
    ...
    }
    
    synchronized void cde() {
    ...
    }
    
    void def() {
        synchronized (keyObject) {
        ...
        }
    }
    
    void efg() {
        synchronized (keyObject) {
        ...
        }
    }
}
abc์™€ bcd๋Š” ๋™๊ธฐํ™” ๋ฉ”์„œ๋“œ์ด๋‹ค. cde์™€ def ๊ทธ๋ฆฌ๊ณ  efg๋Š” ๋™๊ธฐํ™” ๋ธ”๋ก์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์˜ ๊นŠ๊ฒŒ ๋ด์•ผํ•  ์ ์€ ์–ด๋–ค ๋ฉ”์„œ๋“œ๊ฐ€ ๋™๊ธฐํ™” ๋ฉ”์„œ๋“œ์ธ์ง€ ๋™๊ธฐํ™” ๋ธ”๋ก์ธ์ง€๊ฐ€ ์•„๋‹ˆ๋‹ค. ๊ฐ ๋ฉ”์„œ๋“œ์™€ ๋ธ”๋ก์ด ์–ด๋–ค ํ‚ค๋กœ ์ž ๊ธˆ์ด ๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ๋ด์•ผํ•œ๋‹ค. abc์™€ bcd ๊ทธ๋ฆฌ๊ณ  cde๋Š” this ๊ฐ์ฒด๋กœ ์ž ๊ธˆ์ด ๋˜์–ด์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด abc,bcd,cde๋Š” ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. def์™€ efg๋Š” keyObject๋กœ ์ž ๊ธˆ์ด ๋˜์–ด์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด def์™€ efg๋Š” ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ ํ‚ค๋Š” this์™€ keyObject๋กœ ๋‚˜๋‰œ๋‹ค. ํ‚ค๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด? ๋™์‹œ์— ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค. abc๋Š” cde์™€ ๋™์‹œ์— ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•˜์ง€๋งŒ abc๊ฐ€ def์™€ ๋™์‹œ ์‚ฌ์šฉ์€ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋‹ค. ๋™๊ธฐํ™”์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์–ด๋–ค ๊ฐ์ฒด๋กœ ์ž ๊ธˆ์„ ์„ค์ •ํ–ˆ๋Š”์ง€๋‹ค.

์•„๋งˆ ๊ฐ™์€ ํ‚ค๋ฅผ ๊ฐ€์ง€๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•œ ์ด์œ ๋Š” ํ‚ค๊ฐ€ ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ด๋‹ค. ์ฒ˜์Œ์— abc๊ฐ€ ํ‚ค๋ฅผ ์„ ์ ํ•˜๊ณ  ํ•ด์•ผํ•  ํ™œ๋™์„ ๋งˆ์น˜๋ฉด abc๋Š” ํ‚ค๋ฅผ ๋ฐ˜๋‚ฉํ•  ๊ฒƒ์ด๋‹ค. ์ด๋•Œ ํ‚ค๋Š” ๋‹ค์Œ ์ˆœ์„œ์ธ bcd๋กœ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค. bcd์™€ cde๊ฐ€ ๋ฐ˜๋‚ฉ๋œ ํ‚ค๋ฅผ ๊ฐ€์ง€๊ธฐ ์œ„ํ•ด ์„œ๋กœ ๊ฒฝ์Ÿํ•  ๊ฒƒ์ด๊ณ  ํ‚ค๋ฅผ ์„ ์ ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ๋จผ์ € ํ™œ๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

 


 

 

 

 

โœ”๏ธ   ์“ฐ๋ ˆ๋“œ 6๊ฐ€์ง€ ์ƒํƒœ_ 552p

 

• NEW ์ƒํƒœ

: Thread ๊ฐ์ฒด๋ฅผ new ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•ด ์ƒ์„ฑํ•œ ์‹œ์ ์ธ ์‹คํ–‰ ์ด์ „ ์ƒํƒœ

Thread thread = new Thread() {
    @Override
    public void run() {
        for(long i = 0; i < 1000000000L; i++) {}
    }
}

 

 

• RUNNABLE ์ƒํƒœ

: start( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ์ƒํƒœ, ์‹คํ–‰ ์ƒํƒœ๋กœ ์–ธ์ œ๋“ ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ

thread.start();

 

 

• TERMINATED ์ƒํƒœ

: run( ) ๋ฉ”์„œ๋“œ๊ฐ€ ์™„์ „ํžˆ ์ข…๋ฃŒ๋œ ์‹คํ–‰์„ ๋งˆ์นœ ์ƒํƒœ

try {
    myTread.join();
} catch (InterruptedException e) {}

 

 

• TIMED_WAITING ์ƒํƒœ

: ์ •์  ๋ฉ”์„œ๋“œ์ธ Thread.sleep ๋˜๋Š” ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์ธ join์ด ํ˜ธ์ถœ๋œ ์ƒํƒœ

 Thread t1 = new Thread(() -> {
            try {
                Thread.sleep(2000); // 2์ดˆ ๋™์•ˆ ๊ธฐ๋‹ค๋ฆผ
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
Thread t2 = new Thread(() -> {
            try {
                t1.join(1000); // ์ตœ๋Œ€ 1์ดˆ ๋™์•ˆ t1์„ ๊ธฐ๋‹ค๋ฆผ
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
์œ„์˜ ์ฝ”๋“œ๋Š” Runnable ์ƒํƒœ์—์„œ ์ผ์‹œ์ •์ง€ ์ƒํƒœ๋กœ ์ „ํ™˜๋˜๋Š” TIMED_WAITING ์ƒํƒœ์ด๋‹ค. TIMED_WAITING ์ƒํƒœ๋Š” ์ฃผ๋กœ sleep(long millis)๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ join(long millis)๊ฐ€ ํ˜ธ์ถœ๋์„ ๋•Œ๋‹ค. 

Thread.sleep( )์€ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ผ์‹œ ์ •์ง€ํ•˜๋ผ๋Š” ์˜๋ฏธ๋กœ ์ผ์‹œ์ •์ง€ ์‹œ๊ฐ„ ๋™์•ˆ CPU๋ฅผ ์–ด๋–ค ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‚ฌ์šฉํ•˜๋“  ์ƒ๊ด€ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์“ฐ๋ ˆ๋“œ ๊ฐ์ฒด.join( ) ๋ฉ”์„œ๋“œ๋Š” ํŠน์ • ์“ฐ๋ ˆ๋“œ ๊ฐ์ฒด์—๊ฒŒ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ CPU๋ฅผ ํ• ๋‹นํ•˜๋ผ๋Š” ์˜๋ฏธ๋‹ค.

์“ฐ๋ ˆ๋“œ t1์€ sleep ๋ฉ”์„œ๋“œ๋กœ ์ผ์‹œ์ •์ง€๊ฐ€ ๋˜์—ˆ๊ณ  2์ดˆ์˜ ์‹œ๊ฐ„๋™์•ˆ ์–ด๋–ค ์“ฐ๋ ˆ๋“œ๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋“  ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์“ฐ๋ ˆ๋“œ t2๋Š” join ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ์— t2๊ฐ€ ์ž ์‹œ ๋ฉˆ์ถ˜ 1์ดˆ ๋™์•ˆ t1 ์“ฐ๋ ˆ๋“œ๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ–ˆ๋‹ค.

 

 

 

• BLOCKED ์ƒํƒœ

: ๋™๊ธฐํ™” ๋ฉ”์„œ๋“œ ๋˜๋Š” ๋™๊ธฐํ™” ๋ธ”๋ก์„ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•  ๋•Œ ์ด๋ฏธ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ•ด๋‹น ์˜์—ญ์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ.

Thread t1 = new Thread("thread1") {
    public void run() {
        mc.syncMethod();
    };
};  

Thread t2 = new Thread("thread2") {
    public void run() {
        mc.syncMethod();
    };
}; 

Thread t3 = new Thread("thread3") {
    public void run() {
        mc.syncMethod();
    };
};
์“ฐ๋ ˆ๋“œ t1์ด ๋จผ์ € ์‹คํ–‰ํ•˜๊ณ  ์žˆ์„ ๋•Œ, t1์ด ์‹คํ–‰์„ ์™„๋ฃŒํ•˜๊ณ  ํ•ด๋‹น ๋™๊ธฐํ™” ์˜์—ญ์˜ ์—ด์‡ ๋ฅผ ๋ฐ˜๋‚ฉํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•œ๋‹ค. ์ด๋•Œ ์ด๋Ÿฐ ์ƒํ™ฉ์„ BLOCKED ์ƒํƒœ๋ผ๊ณ  ํ•œ๋‹ค. 

t1์ด ๋ฐ˜๋‚ฉ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๊ทธ ๋‹ค์Œ ์ˆœ์„œ์ธ t2๊ฐ€ ํ‚ค๋ฅผ ๊ฐ€์งˆ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์‚ฌ์‹ค ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ํ‚ค๊ฐ€ ๋ฐ˜๋‚ฉ๋œ ์ˆœ๊ฐ„๋ถ€ํ„ฐ t2์™€ t3๋Š” ์„œ๋กœ ํ‚ค๋ฅผ ๊ฐ€์ง€๊ธฐ ์œ„ํ•ด ๊ฒฝ์Ÿํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋จผ์ € ํ‚ค๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ ์“ฐ๋ ˆ๋“œ๊ฐ€ t1 ๋‹ค์Œ์œผ๋กœ ์‹คํ–‰ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.
void startAll() {
    t1.start();
    t2.start();
    t3.start();
}
startAll ๋ฉ”์„œ๋“œ์—์„œ t1, t2, t3 ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋‹น์—ฐํ•˜๊ฒŒ t1, t2, t3๋Š” ๊ฒฝ์Ÿํ•  ๊ฒƒ์ด๊ณ  ํ‚ค๋ฅผ ์ฐจ์ง€ํ•œ ์“ฐ๋ ˆ๋“œ ๋จผ์ € ์‹คํ–‰๋˜๋ฉฐ ๋‚˜๋จธ์ง€ ๋‘ ์“ฐ๋ ˆ๋“œ๋Š” BLOCKED ์ƒํƒœ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

 

 


• WAITING ์ƒํƒœ

: ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฌดํ•œ์ • ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ

Thread t = new Thread(() -> {
            synchronized (lock) {
                try {
                    lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

 

์‹œ๊ฐ„์„ ์ง€์ •ํ•˜์ง€ ์•Š์€ join ๋ฉ”์„œ๋“œ ๋˜๋Š” object.wait ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด WAITING ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. join์€ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•˜๊ณ  wait๋Š” notify( )๋กœ ๊นจ์šธ ์ˆ˜ ์žˆ๋‹ค. 

lock ๊ฐ์ฒด๋กœ ์ž ๊ธˆ์„ ๊ฑด ์“ฐ๋ ˆ๋“œ t๋Š” lock.wait( )์œผ๋กœ lock์„ ์ž ๊น ๋ฐ˜๋‚ฉํ–ˆ๋‹ค. ์–ธ์ œ๊นŒ์ง€ ๋ฐ˜๋‚ฉํ• ์ง€ ์‹œ๊ฐ„์„ ์ง€์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— notify( )๋กœ ํ˜ธ์ถœํ•˜์—ฌ WAITING ์ƒํƒœ์—์„œ ๋น ์ ธ๋‚˜์˜ค๋„๋ก ํ•ด์•ผํ•œ๋‹ค.
synchronized (lock) {
    lock.notify(); 
        }

 

 

๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ํ”„๋กœ๊ทธ๋žจ,  ํ”„๋กœ์„ธ์Šค, ์“ฐ๋ ˆ๋“œ_ 511p

 

• CPU 

: ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•จ์œผ๋กœ์จ ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ์žฅ์น˜๋กœ, ๊ฐ€์žฅ ๋น ๋ฅธ ์†๋„๋กœ ๋™์ž‘.

 

 ํ•˜๋“œ๋””์Šคํฌ

: ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ€์žฅ ๋‚ฎ์€ ์†๋„๋กœ ๋™์ž‘.

 

 ๋ฉ”๋ชจ๋ฆฌ

: ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ CPU๋กœ ๋ณด๋‚ด๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, CPU์™€ ๊ทผ์ ‘ํ•œ ์†๋„๋กœ ๋™์ž‘.

 

 ํ”„๋กœ๊ทธ๋žจ

: ํ•˜๋“œ๋””์Šคํฌ์— ์ €์žฅ๋œ ํŒŒ์ผ๋“ค์˜ ๋ชจ์ž„.

 

ํ”„๋กœ์„ธ์Šค

: ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ๋กœ๋”ฉ๋œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ์„ ๋™์ ์œผ๋กœ ๋กœ๋”ฉ.

 

 ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค

: ํ•˜๋‚˜์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด ๋™์‹œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ .

 

 ์“ฐ๋ ˆ๋“œ

: ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์—…์ด ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•œ์ •๋œ ์ฝ”์–ด์˜ ์ˆ˜๋ฅผ ๊ฐ–๋Š” CPU์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์—…์„ ๋‚˜๋ˆ  ์‚ฌ์šฉํ•˜๋ฉฐ, CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์†Œ ๋‹จ์œ„.

 

 ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ

public class ThreadExample01 {
    public static void main(String[] args) {
    
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        
        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค. ์ฒซ๋ฒˆ์งธ for๋ฌธ๊ณผ ๋‘๋ฒˆ์งธ for๋ฌธ์ด ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ๋‚˜์˜ค๊ธธ ์›ํ–ˆ์ง€๋งŒ ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ๋กœ ์ฒซ๋ฒˆ์งธ for์ด ๋ชจ๋‘ ์ˆ˜ํ–‰๋œ ๋‹ค์Œ ๋‘๋ฒˆ์งธ for๋ฌธ์ด ์ˆ˜ํ–‰๋œ๋‹ค.

 

 

 

 ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ

: ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ

 

 

โ‘  extends Thread + 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ

class Task1 extends Thread {
    @Override
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class Task2 extends Thread {
    @Override
    public void run() {
        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ThreadExample02 {
    public static void main(String[] args) {
        Task1 t1 = new Task1(); 
        Task2 t2 = new Task2(); 

        t1.start();
        t2.start(); 
    }
}
์“ฐ๋ ˆ๋“œ์—๋Š” ๋™์‹œ์„ฑ(concurrency)๊ณผ ๋ณ‘๋ ฌ์„ฑ(parallelism)์ด ์žˆ๋‹ค. ๋™์‹œ์„ฑ์€ ์ฒ˜๋ฆฌํ•  ์ž‘์—…์˜ ์ˆ˜๊ฐ€ CPU์˜ ์ฝ”์–ด ์ˆ˜๋ณด๋‹ค ๋งŽ์„ ๋•Œ ๊ฐ ์ž‘์—…์˜ ์“ฐ๋ ˆ๋“œ์˜ ์š”์ฒญ ์ž‘์—…์„ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰ํ•œ๋‹ค. ๋งค์šฐ ์งง์€ ๊ฐ„๊ฒฉ์œผ๋กœ ๊ต์ฐจ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋Š” ๋‘ ์ž‘์—…์ด ๋งˆ์น˜ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค. ๋ณ‘๋ ฌ์„ฑ์€ CPU์˜ ์ฝ”์–ด ์ˆ˜๊ฐ€ ์ž‘์—… ์ˆ˜๋ณด๋‹ค ๋งŽ์„ ๋•Œ๋กœ ๊ฐ๊ฐ์˜ ์ž‘์—…์„ ๊ฐ๊ฐ์˜ ์ฝ”์–ด์— ํ• ๋‹นํ•ด ๋™์‹œ์— ์‹คํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค. 

์—ฌ๋Ÿฌ ์ž‘์—…์ด ์žˆ๊ณ  ์—ฌ๋Ÿฌ CPU๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ์–ด๋А ์ž‘์—…์„ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋กœ ์ง„ํ–‰ํ• ๊ฑด์ง€ ์ฝ”๋“œ๋กœ ์ ์–ด๋‘๋ฉด ๋œ๋‹ค. ๊ทธ ๋‹ค์Œ JVM์ด ์šด์˜์ฒด์ œ๋กœ ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋ฅผ ๋„˜๊ธฐ๊ณ  ์šด์˜์ฒด์ œ๋Š” ๊ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์–ด๋А CPU์— ๋ฐฐ๋ถ„ํ• ์ง€ ์•Œ์•„์„œ ์ •ํ•œ๋‹ค. (๋ณดํ†ต ๋ฐฐ๋ถ„์€ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํ•œ๋‹ค)

์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž. extends Thread๋กœ Thread๋ฅผ ์ƒ์†๋ฐ›์•˜๊ณ  Thread ๋‚ด๋ถ€์—” run( )๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ Thread๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์— run( ) ๋ฉ”์„œ๋“œ ์•ˆ์— ์–ด๋–ค ๋™์ž‘์„ ์ˆ˜ํ–‰ํ• ์ง€ ์žฌ์ •์˜ํ•˜๋ฉด ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋˜์–ด Thread์—์„œ ์žฌ์ •์˜ํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

์“ฐ๋ ˆ๋“œ์—์„œ ํŠน์ดํ•œ ์ ์ด ์žˆ๋‹ค. ๋ฉ”์„œ๋“œ run์„ ์žฌ์ •์˜ํ–ˆ์œผ๋‹ˆ run์„ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋ ํ…๋ฐ, run( )์ด ์•„๋‹Œ start( )๊ฐ€ ์ ํ˜€์žˆ๋‹ค. ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹ค์ œ CPU์™€ ์ด์•ผ๊ธฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ž์‹ ๋งŒ์˜ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์— ํฌํ•จํ•ด ์ค€๋น„ํ•ด์•ผ ํ•  ๊ฒƒ์ด ๋งŽ๋‹ค. ์—ฌ๊ธฐ์„œ start ๋ฉ”์„œ๋“œ๊ฐ€ ์ค€๋น„๋‹จ๊ณ„ ํฌํ•จํ•œ run ๋ฉ”์„œ๋“œ ์‹คํ–‰์„ ์˜๋ฏธํ•œ๋‹ค. start( )๋Š” ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ ์ƒ์„ฑ/์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ์ค€๋น„ + ์ƒˆ๋กœ์šด ์“ฐ๋ ˆ๋“œ ์œ„์— run( ) ์‹คํ–‰์ด๋‹ค.

 

 

 

โ‘ก extends Thread + 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ

class MyThread extends Thread {
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ThreadExample03 {
    public static void main(String[] args) {
        MyThread t = new MyThread(); 
        t.start();

        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
์•ž์— ์žˆ์—ˆ๋˜ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๊ทธ์ € for๋ฌธ๋งŒ ์žˆ์—ˆ๋Š”๋ฐ ๋‹จ์ผ์“ฐ๋ ˆ๋“œ, extends Thread๊ฐ€ 2๊ฐœ์˜€๋Š”๋ฐ ์ด 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ์˜€๊ณ , ์ด๋ฒˆ ์ฝ”๋“œ๋Š” extends Thread๊ฐ€ 1๊ฐœ์ธ๋ฐ ์ด 2๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ์ด๋‹ค. ๊ทธ ์ด์œ ๋ฅผ ์‚ดํŽด๋ณด๋ฉด main์— ์žˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ JVM์€ ์ž๋™์œผ๋กœ main ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ํ•ด๋‹น ์ฝ”๋“œ main์— ์ ์–ด๋‘” for๋ฌธ์ด ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 

โ‘ข Runnable + 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ

class Task1 implements Runnable {
    @Override
    public void run() {
        for (int i = 1; i <= 5; i++) {
            System.out.println("์ž‘์—… 1 - i: " + i);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

class Task2 implements Runnable {
    @Override
    public void run() {
        for (int j = 1; j <= 5; j++) {
            System.out.println("์ž‘์—… 2 - j: " + j);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ThreadExample04 {
    public static void main(String[] args) {
        Runnable task1 = new Task1();
        Thread t1 = new Thread(task1);
        t1.start();
        
        Runnable task2 = new Task2();
        Thread t2 = new Thread(task2);
        t2.start();
    }
}
Runnable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ , run( ) ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์“ฐ๋ ˆ๋“œ์˜ ์ž‘์—… ๋‚ด์šฉ์„ ์ž‘์„ฑํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  main์—์„œ Runnable ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

extends Thread์™€ ์ฐจ์ด์ ์ด ์žˆ๋‹ค. ๋ฐ”๋กœ Runnable ๊ฐ์ฒด์˜ ๋‚ด๋ถ€์—๋Š” start( ) ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.  ๊ทธ๋ž˜์„œ main์„ ๋ณด๋ฉด start( )๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Thread ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ Thread ๊ฐ์ฒด๋กœ ๊ฐ์‹ธ start( )๋ฅผ ํ˜ธ์ถœํ–ˆ๋‹ค. 

Runnable๋กœ ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ์˜ ์žฅ์ ์€ ์ธํ„ฐํŽ˜์ด์Šค๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ƒ์†์€ ํ•œ ๋ฒˆ๋งŒ ๋˜๋Š”๋ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์†ํ•ด๋ฒ„๋ฆฌ๋ฉด ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค. 

 

 

 

 


 

 

 

โœ”๏ธ   ์“ฐ๋ ˆ๋“œ์˜ ์†์„ฑ_ 527p

 

• currentThread( )

: ์—ฐ์‚ฐ์„ ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ ๊ฐ์ฒด์˜ ์ฐธ์ขƒ๊ฐ’์„ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

new Thread(() -> {
    System.out.println("์ž‘์—… ์‹œ์ž‘");
}).start();
System.out.println("main ์Šค๋ ˆ๋“œ ์ด๋ฆ„: " + Thread.currentThread().getName());
 
 or
 
Thread current = Thread.currentThread()
System.out.println("ํ˜„์žฌ ์Šค๋ ˆ๋“œ ์ด๋ฆ„: " + current.getName());
์œ„์˜ ์ฝ”๋“œ๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜ ์—†์ด ์‹คํ–‰ํ•œ ์ฝ”๋“œ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ฐธ์กฐ ๋ณ€์ˆ˜ ์—†์ด ์ผํšŒ์„ฑ์œผ๋กœ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ .getName( ) ๊ฐ™์€ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ static Thread Thread.currentThread( )๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ ๊ฐ์ฒด ์ฐธ์ขƒ๊ฐ’์„ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

• activeCount( )

: ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์“ฐ๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

public class ThreadExample05 {
    public static void main(String[] args) {

        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread 1 ์‹คํ–‰ ์ค‘");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 1 ์ข…๋ฃŒ");
            }
        });

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread 2 ์‹คํ–‰ ์ค‘");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 2 ์ข…๋ฃŒ");
            }
        });

        Thread t3 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread 3 ์‹คํ–‰ ์ค‘");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 3 ์ข…๋ฃŒ");
            }
        });

        t1.start();
        t2.start();
        t3.start();
    }
}
System.out.println("ํ˜„์žฌ ํ™œ์„ฑ ์Šค๋ ˆ๋“œ ์ˆ˜: " + Thread.activeCount());
main ์“ฐ๋ ˆ๋“œ ๋‚ด์—๋Š” ์ด 3๊ฐœ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐ™์€ ๊ทธ๋ฃน ๋‚ด์—์„œ ์‹คํ–‰ ์ค‘์ธ ์“ฐ๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ๊ณ ์‹ถ์„ ๋•Œ activeCount๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

• setName( )

: ์“ฐ๋ ˆ๋“œ์— ์ง์ ‘ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•œ๋‹ค.

Thread t1 = new Thread(task);
Thread t2 = new Thread(task);

t1.setName("1๋ฒˆ");
t2.setName("2๋ฒˆ");

 

 

 

• getName( )

: ์ง์ ‘ ์ง€์ •ํ–ˆ๊ฑฐ๋‚˜ ์ž๋™์œผ๋กœ ๋ถ€์—ฌ๋œ ์“ฐ๋ ˆ๋“œ์˜ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜จ๋‹ค.

for(int i=0; i<3; i++){
    Thread t1 = new Thread();
    t1.setName(i + "๋ฒˆ์งธ ์“ฐ๋ ˆ๋“œ");
    System.out.println(t1.getName());
    t1.start();
}

 

 

 

• ์šฐ์„ ์ˆœ์œ„

public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;
void setPriority(int priority)
int getPriority()
๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋Š” 1~10 ์‚ฌ์ด์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 1์ด ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆœ์œ„์ด๋ฉฐ 10์ด ๊ฐ€์žฅ ๋†’์€ ์ˆœ์œ„๋‹ค. ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ 5์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค. ์šฐ์„ ์ˆœ์œ„๋Š” ์“ฐ๋ ˆ๋“œ์˜ ๋™์‹œ์„ฑ๊ณผ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค. ๋งŒ์ผ 2๊ฐœ์˜ ์ž‘์—…์ด ์ผ์ • ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ์ชฝ์ด ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ๋‹น๋ฐ›๊ฒŒ ๋œ๋‹ค.

setPriority( )๋Š” ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ณ , getPriority( )๋Š” ์ง€์ •๋œ ์šฐ์„ ์ˆœ์œ„ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ๋‹ค.

 

 

 

• availableProcessors

ํ˜„์žฌ ์ปดํ“จํ„ฐ์˜ CPU ์ฝ”์–ด ์ˆ˜๋ฅผ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

public native int availableProcessors();

 

 

 

 


 

 

 

โœ”๏ธ  ๋ฐ๋ชฌ ์„ค์ •_ 533p

 

• ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ

: ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ชจ๋‘ ์ข…๋ฃŒ๋˜๋ฉด ํ•จ๊ป˜ ์ข…๋ฃŒ๋˜๋Š” ์“ฐ๋ ˆ๋“œ

Thread t1 = new MyThread();
t1.setDeamon(false);
t1.setName("t1");
t1.start();

Thread t2 = new MyThread();
t2.setDeamon(true);
t2.setName("t2");
t2.start();

try{Thread.sleep(3500);} catch (InterruptedException e) {}
System.out.println("main Thread ์ข…๋ฃŒ");
์“ฐ๋ ˆ๋“œ์˜ ๋ฐ๋ชฌ ์„ค์ •์€ Thread ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์ธ setDeamon( )๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ ๊ธฐ๋ณธ ๊ฐ’์€ false๋กœ ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ๋กœ ์„ค์ •ํ•ด๋‘”๋‹ค. ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๋ฐ๋ชฌ ์„ค์ • ์—ฌ๋ถ€๋Š” isDeamon( )๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์–ธ์ œ๋“ ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„์˜ ์ฝ”๋“œ์—์„  ์“ฐ๋ ˆ๋“œ t1์€ ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ, t2๋Š” ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋กœ ์„ค์ •ํ–ˆ๋‹ค.

๋ฐ๋ชฌ ์„ค์ •์€ ๋ฐ˜๋“œ์‹œ ์“ฐ๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์ธ start( ) ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „์— ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ ๊ฐ€๋ฉด ๋ฐ๋ชฌ ์„ค์ •์€ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. 

๋งŒ์•ฝ main์— ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ t1๊ณผ ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ t2๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๋ฐ๋ชฌ ์“ฐ๋ ˆ๋“œ๋Š” ์ž์‹ ์„ ํ˜ธ์ถœํ•œ main ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ•จ๊ป˜ ์ข…๋ฃŒ๋ ๊ฑฐ๋ผ ์˜ˆ์ƒํ•˜๊ฒ ์ง€๋งŒ ๋ฐ๋ชฌ์“ฐ๋ ˆ๋“œ๋Š” ์ฃผ ์“ฐ๋ ˆ๋“œ์˜ ์ข…๋ฃŒ๊ฐ€ ์•„๋‹Œ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ๋ชจ๋“  ์ผ๋ฐ˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์–ด์•ผ ์ข…๋ฃŒ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์•ผํ•œ๋‹ค. main์ด ๋จผ์ € ๋๋‚ด๋„ t1 ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋ผ๋ฉด t2๋Š” ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

 

๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ์˜ˆ์™ธ์ฒ˜๋ฆฌ_ 467p

 

try

: ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋‹ค.

 

catch

: ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฒ˜๋ฆฌํ•  ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ๋‹ค.

 

finally

: ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋“ , ๋ฐœ์ƒํ•˜์ง€ ์•Š๋“  ํ•ญ์ƒ ์‹คํ–‰๋˜๋Š” ๋ธ”๋ก์œผ๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค ํ•ด์ œ๋‚˜ try{ }, catch{ }์˜ ๊ณตํ†ต ๊ธฐ๋Šฅ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด์žˆ๋‹ค.

 

try {
    int a = 10 / 0;
}

catch (Exception e) {
    System.out.println("์˜ˆ์™ธ ๋ฐœ์ƒ!");
}

catch (ArithmeticException e) {
    System.out.println("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!");
}

finally {
    System.out.println("ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฅ˜");
}
try๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ์—์„  ArithmeticException์ด๋ž€ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. catch๋Š” ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. try์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ์— ๋งž๋Š” ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ฒซ๋ฒˆ์งธ catch๋ถ€ํ„ฐ finally๋ฅผ ํ–ฅํ•ด ๋‚ด๋ ค๊ฐ„๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์œ„์˜ ์ฝ”๋“œ๋Š” ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๋ชจ๋“  ์˜ˆ์™ธ๋Š” Exception ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋กœ ์–ด๋–ค ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋“  ์ฒซ๋ฒˆ์งธ catch ๋ธ”๋ก๋งŒ ์‹คํ–‰๋˜๋ฏ€๋กœ ๋‘๋ฒˆ์งธ catch ๋ธ”๋ก์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ unreachable code ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

๋ชจ๋“  ์˜ˆ์™ธ๋Š” Exception์˜ ํ•˜์œ„ํด๋ž˜์Šค๋‹ค.

 

 

try {
    int a = 10 / 0;
}

catch (ArithmeticException e) {
    System.out.println("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค!");
}

catch (Exception e) {
    System.out.println("์˜ˆ์™ธ ๋ฐœ์ƒ!");
}

finally {
    System.out.println("ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฅ˜");
}
์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ๋˜์–ด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

 

 

๋‹ค์ค‘ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

public class TryCatchPratice1 {
    public static void main(String[] args) {
    
        try {
            System.out.println(10 / 0); 
        } catch (ArithmeticException e) {
            System.out.println("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
        } finally {
            System.out.println("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.");
        }    

        try {
            int[] arr = new int[3];
            System.out.println(arr[5]);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("๋ฐฐ์—ด ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.");
        } finally {
            System.out.println("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.");
        }    
    }
}
์ฒซ๋ฒˆ์งธ try์—์„œ๋Š” 0์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ ArithmeticException ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•์„ ๋’€๋‹ค. ๋‘๋ฒˆ์งธ try์—์„œ๋Š” ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 3์ž„์—๋„ ๊ทธ ์ด์ƒ์— ์žˆ๋Š” ๋ฐฐ์—ด์„ ์ถœ๋ ฅ์‹œํ‚ค๋ฉฐ ๋ฐœ์ƒํ•œ ์ธ๋ฑ์Šค ๋ฒ”์œ„ ์˜ค๋ฅ˜ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ–ˆ๋‹ค. finally์˜ ๊ฒฝ์šฐ ์ค‘๋ณต๋˜์–ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

 

public class TryCatchPratice02 {
    public static void main(String[] args) {
        try {
            int[] arr = new int[3];
            System.out.println(10 / 0);     
            System.out.println(arr[5]);      
        } catch (ArithmeticException e) {
            System.out.println("0์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("๋ฐฐ์—ด ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.");
        } finally {
            System.out.println("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.");
        }    
    }
}
ํ•˜๋‚˜์˜ try ๋ธ”๋ก ์•ˆ์— ์—ฌ๋Ÿฌ ์˜ˆ์™ธ๋ฅผ ๋„ฃ๊ณ  catch๋กœ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•œ ์ฝ”๋“œ๊ฐ€ ์™„์„ฑ๋œ๋‹ค. try ๋ธ”๋ก์— ์žˆ๋Š” ์˜ˆ์™ธ ์ฝ”๋“œ๋Š” catch ๋ธ”๋ก์˜ ์ˆœ์„œ์™€ ์—ฐ๊ด€์—†์ด ์•Œ์•„์„œ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค. try์™€ catch์— ์ค‘๋ณต๋œ ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, finally์— ์ ์–ด ์ค‘๋ณต์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 ๋‹ค์ค‘ ์˜ˆ์™ธ๋ฅผ ํ•œ ๋ธ”๋ก์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

public class TryCatchPratice02 {
    public static void main(String[] args) {
        try {
            int[] arr = new int[3];
            System.out.println(10 / 0);     
            System.out.println(arr[5]);      
        } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
            System.out.println("์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.");
        } finally {
            System.out.println("ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.");
        }    
    }
}
ํ•˜๋‚˜์˜ catch ๋ธ”๋ก์—์„œ ๋‘ ๊ฐœ์˜ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿด ๊ฒฝ์šฐ |(OR)์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜ํƒ€๋‚ด๋ฉด ๋œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ๋ฆฌ์†Œ์Šค ํ•ด์ œ_ 477p

 

๋ฆฌ์†Œ์Šค ํ•ด์ œ

: ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ž์›์„ ๋ฐ˜๋‚ฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

InputStreamReader๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ์ž๋™ ํ•ด์ œ

try (InputStreamReader isr1 = new InputStreamReader (System.in);) {
    char input = (char) isr1.read();
    System.out.println("์ž…๋ ฅ ๊ธ€์ž = " + input);
} catch (IOException e) {
    e.printStackTrace();
}

try (InputStreamReader isr2 = new InputStreamReader (System.in);) {
    char input = (char) isr2.read();
    System.out.println("์ž…๋ ฅ ๊ธ€์ž = " + input);
} catch (IOException e) {
    e.printStackTrace();
}
InputStreamReader์—๋Š” AutoCloseable์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค. try์˜ ๊ด„ํ˜ธ ์•ˆ์— ์„ ์–ธ๋œ ๊ฐ์ฒด๊ฐ€ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ์˜ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ์ž๋™์œผ๋กœ close( ) ํ˜ธ์ถœํ•ด ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•œ๋‹ค. 

๊ทธ๋Ÿฐ๋ฐ ์œ„์˜ ์ฝ”๋“œ๋Š” ์ฒซ๋ฒˆ์งธ try ๋ธ”๋ก์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ๋งˆ์น˜๊ณ  ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ ๋‹ค์Œ try ๋ธ”๋ก์€ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š”๊ฑธ๊นŒ. System.in์€ ์ฝ˜์†” ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋กœ ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๋ฐ˜๋‚ฉํ•˜๋ฉด ๋”์ด์ƒ ์ฝ˜์†”์„ ์ž…๋ ฅํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ฒซ๋ฒˆ์งธ try ๋ธ”๋ก์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ˜๋‚ฉํ•ด์„œ ๋‹ค์Œ try ๋ธ”๋ก์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ๋œ๋‹ค.

 

 

 

 ์ง์ ‘ close๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋ฆฌ์†Œ์Šค ์ˆ˜๋™ ํ•ด์ œ

A a1 = null;

try {
    a1 = new A("ํŠน์ • ํŒŒ์ผ")
}

catch (Exception e) {
    System.out.println("์˜ˆ์™ธ ์ฒ˜๋ฆฌ");
}

finally {
    if(a1.resource!=null) {
        try{
            a1.close();
        } catch (Exception e) {
        }
    }
}
finally์— ์ง์ ‘ close( )๋ฅผ ์ •์˜ํ•œ๋‹ค. finally์— ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ํด๋ž˜์Šค A์— AutoCloseable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. AutoCloseable ๋‚ด๋ถ€์— close( ) ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๊ธฐ์— finally์— ์ง์ ‘ ์ •์˜ํ•˜์ง€ ์•Š์•„๋„, ๋ฆฌ์†Œ์Šค๋ฅผ ์•Œ์•„์„œ ํ•ด์ œํ•  ๊ฒƒ์ด๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ์˜ˆ์™ธ์ „๊ฐ€_ 485p

 

์˜ˆ์™ธ ์ „๊ฐ€

: ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์˜ ์˜๋ฌด๋ฅผ ํ˜ธ์ถœํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๊ฐ–๊ฒŒ ๋˜๋ฉฐ, ์ƒ์œ„์˜ ๋ฉ”์„œ๋“œ๋„ ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ์ง€์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ์ „๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

throws

: ์˜ˆ์™ธ ์ „๊ฐ€ ๋ฌธ๋ฒ•์ด๋‹ค.

    public static void readFile() throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
        String line = reader.readLine();
        System.out.println("์ฝ์€ ๋‚ด์šฉ: " + line);
        reader.close();
    }

    public static void main(String[] args) {
        try {
            readFile();
        } catch (IOException e) {
            System.out.println("ํŒŒ์ผ์„ ์ฝ๋Š” ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: " + e.getMessage());
        }
    }
readFile ๋ฉ”์„œ๋“œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ IOException์œผ๋กœ ์ „๊ฐ€๋˜์—ˆ์œผ๋ฉฐ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ try-catch ๊ตฌ๋ฌธ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•˜๋‹ค. ๋Œ€์‹ , main ๋ฉ”์„œ๋“œ์—์„œ readFile( )์„ ํ˜ธ์ถœํ•  ๋•Œ  try-catch๋กœ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์˜ˆ์™ธ ์ „๊ฐ€๋Š” ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์˜ˆ์™ธ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋ถ„๋ฆฌ ์‹œ์ผœ ๋‚˜์ค‘์— ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•ด์ค€๋‹ค.

์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๊ณ„์† ์ „๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์ด ์ง์ ‘ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ ์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์€ ์šฐ๋ฆฌ๊ฐ€ ์ž˜ ์•„๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ์˜ ์ •๋ณด๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ ๋’ค ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ•์ œ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ์™ธ ์ „๊ฐ€๋„ ๋‹ค์ค‘์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค. throws ์˜ˆ์™ธ ํด๋ž˜์Šค A, ์˜ˆ์™ธ ํด๋ž˜์Šค B... ๋กœ ํ•œ ๋ฒˆ์— ์ „๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค_ 492p

 

์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค

: ์ž๋ฐ”์— ์กด์žฌ ํ•˜์ง€ ์•Š๋Š” ์˜ˆ์™ธ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•œ๋‹ค.

 

 ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค ์ž‘์„ฑ

public class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}
์ƒ์„ฑ์ž์—์„œ message๋ฅผ ๋ฐ›์•„, ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ถ€๋ชจ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.

 

 

์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์˜ˆ์™ธ ๊ฐ์ฒด ๋˜์ง€๊ธฐ

throw new MyException("๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ๊ฐ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");

 

 

 ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์˜ˆ์™ธ ๊ฐ์ฒด ๋˜์ง€๊ธฐ

public class Pratice01 {

    public static void checkAge(int age) throws MyException {
        if (age < 18) {
            throw new MyException("๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ๊ฐ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
        } else {
            System.out.println("๊ฐ€์ž…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.");
        }
    }

    public static void main(String[] args) {
        try {
            checkAge(15);
        } catch (MyException e) {
            System.out.println("์˜ˆ์™ธ ๋ฐœ์ƒ: " + e.getMessage());
        }
    }
}
18์‚ด ์ดํ•˜๋ฉด MyException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค. try ๋ธ”๋ก์—์„œ 15๋ฅผ ์ธ์ž๋กœ ๋ณด๋ƒˆ๊ณ  ์˜ˆ์™ธ MyException์ด ๋ฐœ์ƒํ•ด ์˜ˆ์™ธ๋ฅผ ๋˜์กŒ๋‹ค. catch ๊ตฌ๋ฌธ์—์„œ ๋ฐ›์•„ ์˜ˆ์™ธ ๋ฐœ์ƒ ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ์˜ˆ์™ธ ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ_ 497p

 

getMassage( ) ๋ฉ”์„œ๋“œ

: ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ƒ์„ฑ์ž๋กœ ๋„˜๊ธด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฆฌํ„ดํ•˜๋Š” ๋ฉ”์„œ๋“œ

 throw new MyException("๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ๊ฐ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
System.out.println("์˜ˆ์™ธ ๋ฐœ์ƒ: " + e.getMessage());
๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์˜ˆ์™ธ๋Š” "๋‚˜์ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ค์„œ ๊ฐ€์ž…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋Š” ์˜ˆ์™ธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž…๋ ฅ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ๋‹ค. ์ด ๋ฌธ์ž์—ด์€ getMassage( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฆฌํ„ดํ•œ๋‹ค.

 

 

 

printStackTrace( ) ๋ฉ”์„œ๋“œ

์˜ˆ์™ธ ๋ฐœ์ƒ์ด ์ „๋‹ฌ๋˜๋Š” ๊ฒฝ๋กœ๋กœ, ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜ˆ์™ธ์˜ ์›์ธ์„ ์ž์„ธํžˆ ์ถœ๋ ฅํ•œ๋‹ค.

try (InputStreamReader isr1 = new InputStreamReader(System.in)) {
    char input = (char) isr1.read();
    System.out.println("์ž…๋ ฅ ๊ธ€์ž = " + input);
} catch (IOException e) {
    e.printStackTrace();
}
์ฝ˜์†”์— ์˜ˆ์™ธ๊ฐ€ ์–ด๋””์—์„œ ์ „๊ฐ€๋˜์—ˆ๋Š”์ง€ ๋“ฑ ์ถ”์  ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

#6027_ 10์ง„ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ 16์ง„์ˆ˜๋กœ ์ถœ๋ ฅํ•˜๊ธฐ1

์†Œ๋ฌธ์ž ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ

์ž…๋ ฅ: 255
์ถœ๋ ฅ: ff
a = int(input())
print('%x'%a)
a = input()
b = int(a)
print('%x'%b)

 

 

 

#6028_ 10์ง„ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ 16์ง„์ˆ˜๋กœ ์ถœ๋ ฅํ•˜๊ธฐ2

๋Œ€๋ฌธ์ž ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ

์ž…๋ ฅ: 255
์ถœ๋ ฅ: FF
a = int(input())
print('%X'%a)
a = input()
b = int(a)
print('%X'%b)

 

 

 

#6029_ 16์ง„ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ 8์ง„์ˆ˜๋กœ ์ถœ๋ ฅํ•˜๊ธฐ2

์ž…๋ ฅ: f
์ถœ๋ ฅ: 17
a = input()
print(f'{int(a,16):o}')
a = input()
b = int(a, 16)
print('%o'%b)
ํŒŒ์ด์ฌ์—์„œ ์ง„๋ฒ• ๊ฐ„ ๋ณ€ํ™˜์„ ํ•  ๋•Œ ์ค‘๊ฐ„์— 10์ง„์ˆ˜๋ฅผ ๊ฑฐ์ณ์•ผํ•œ๋‹ค.

 

 

 

#6030_ ์˜๋ฌธ์ž 1๊ฐœ๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ 10์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

์ž…๋ ฅ: A
์ถœ๋ ฅ: 65
a = ord(input())
print(a)
ord๋Š” ๋ฌธ์ž์˜ ์•„์Šคํ‚ค ์ฝ”๋“œ๊ฐ’ ํ˜น์€ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํ•จ์ˆ˜๋‹ค.
๊ทธ๋ž˜์„œ ๋ณ€ํ™˜๋˜์—ˆ๊ธฐ์— a๋งŒ ์ถœ๋ ฅํ•ด๋„ ์›ํ•˜๋Š” ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

 

 

 

#6031_ ์ •์ˆ˜ ์ž…๋ ฅ๋ฐ›์•„ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ

์ž…๋ ฅ: 65
์ถœ๋ ฅ: A
a = int(input())
print(chr(a))

 

 

 

๐Ÿ“š ์ฐธ๊ณ ํ•œ ์ฑ…

 

: ์ถœ์ฒ˜ ์˜ˆ์Šค24 ํ™ˆํŽ˜์ด์ง€

 

 

 

- ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ ๊ถ๊ธˆํ•œ ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค -

 

 

๐Ÿฅ ๐Ÿฅ ๐Ÿฅ

 


 

โœ”๏ธ   ์˜ˆ์™ธ_ 457p

 

 ์˜ˆ์™ธ

: ์—ฐ์‚ฐ ์˜ค๋ฅ˜, ์ˆซ์ž ํฌ๋งท ์˜ค๋ฅ˜ ๋“ฑ๊ณผ ๊ฐ™์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

 ์—๋Ÿฌ

: ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ์ž์ฒด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋กœ ๊ฐœ๋ฐœ์ž ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

 

์˜ˆ์™ธ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ๋งํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์ด๋•Œ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•ด์„œ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฐจ์„ ์ฑ…์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.์—๋Ÿฌ๋Š” ์•„์˜ˆ ์ฒ˜๋ฆฌ์ž์ฒด๋ฅผ ํ•  ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜์ธ ๋ธ”๋ฃจ์Šคํฌ๋ฆฐ ๊ฐ™์€ ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์ž๋ฐ”์—์„œ ์˜ˆ์™ธ์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋Š” Exception ํด๋ž˜์Šค๊ณ , ์—๋Ÿฌ์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค๋Š” Error ํด๋ž˜์Šค๋‹ค. ์ด ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค๋Š” Throwable ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์—๋Ÿฌ์™€ ์˜ˆ์™ธ ๋ชจ๋‘ Throwable ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ๋‹ค. 

 

 

 

 


 

 

 

โœ”๏ธ   ์ผ๋ฐ˜ ์˜ˆ์™ธ_ 458p

 

 ์ผ๋ฐ˜ ์˜ˆ์™ธ

: ์ปดํŒŒ์ผ ์ „์— ์˜ˆ์™ธ ๋ฐœ์ƒ ๋ฌธ๋ฒ•์„ ๊ฒ€์‚ฌํ•˜๋ฉฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ปดํŒŒ์ผ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

 

• InterruptedException

: ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฉˆ์ถ”๊ฒŒ ๋งŒ๋“ ๋‹ค.

 Thread thread = new Thread(() -> {
            try {
                System.out.println("์ž‘์—… ์‹œ์ž‘: 5์ดˆ ๋Œ€๊ธฐ ์ค‘");
                Thread.sleep(5000);  // 5์ดˆ ๋Œ€๊ธฐ
                System.out.println("์ž‘์—… ์™„๋ฃŒ");
            } catch (InterruptedException e) {
                System.out.println("์Šค๋ ˆ๋“œ๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
            }
        });
์“ฐ๋ ˆ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ณผ์ •์—์„œ CPU๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์†Œ ๋‹จ์œ„๋กœ, ํ”„๋กœ์„ธ์Šค ๋‚ด์— ์กด์žฌํ•œ๋‹ค. ์ฆ‰, ์ผ๋ฐ˜์ ์œผ๋กœ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์€ ์ปค๋‹ค๋ž€ ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์ž‘์€ ์ž‘์—…๋“ค๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ๊ฐ ์“ฐ๋ ˆ๋“œ์— ํ• ๋‹นํ•œ ํ›„ ์‹คํ–‰๋œ๋‹ค. ๋™์‹œ์— ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋‹ˆ ์ „์ฒด ์ž‘์—…์„ ๋นจ๋ฆฌ ๋๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์ „์ฒด ์ž‘์—…์„ ์ทจ์†Œํ•˜์—ฌ ์ข…๋ฃŒํ•ด์•ผํ•  ๊ฒฝ์šฐ, ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ž‘์—…์ด ๋”์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋‹ˆ ์‹คํ–‰์„ ๊ทธ๋งŒ๋‘๊ณ  ๋ฆฌ์†Œ์Šค๋“ค์„ ์ •๋ฆฌํ•œ ํ›„ ์ข…๋ฃŒํ•˜๋„๋ก ์•Œ๋ฆฐ๋‹ค. ์ด๋•Œ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค.

์ด๋•Œ ๋งŒ์•ฝ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์–ด๋”˜๊ฐ„์— ๋ธ”๋กœํ‚น ๋˜์–ด์žˆ๋‹ค๋ฉด ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ฒดํฌํ•˜๊ณ  ์ข…๋ฃŒ ๋กœ์ง์„ ๋„ฃ์–ด๋†จ์–ด๋„ ์ธํ„ฐ๋ŸฝํŠธ ๋กœ์ง ์‹คํ–‰์€ ์˜์›ํžˆ ์‹คํ–‰๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— sleep์—์„œ ๋ฒ—์–ด๋‚˜ ์ธํ„ฐ๋ŸฝํŠธ ๋กœ์ง์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•˜๋Š”๋ฐ Interrupted Exception์„ try-catch๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜์— ๋ช…์‹œํ•ด์„œ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์ž์—๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ์œ„์ž„ํ•ด์•ผํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ Interrupted Exception์€ ๋ฐ˜๋“œ์‹œ ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ Interrupted Exception์„ ๋ฌด์‹œํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์—ฌ๊ธฐ์ €๊ธฐ ๋‚จ๋ฐœํ•œ๋‹ค๋ฉด ์‹คํ–‰์ด ์ข…๋ฃŒ๋˜์ง€ ์•Š๊ณ  kill-9๋กœ ๊ฐ•์ œ ์ข…๋ฃŒํ•ด์•ผํ•œ๋‹ค.

 

 

[Java] InterruptedException์ด๋ž€?

์ž๋ฐ”๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ๊ณ ๋ ค๋˜์–ด์•ผ ํ•˜๋Š” ์˜ˆ์™ธ ์ค‘ ํ•˜๋‚˜๊ฐ€ InterruptedException์ด๋‹ค. ์Šค๋ ˆ๋“œ์˜ ์‹คํ–‰์„ ์ž ๊น ๋™์•ˆ ๋ฉˆ์ถ”๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” sleep ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž try { Thread.sleep(1000); } catch (Inter

hbase.tistory.com

 

 


• ClassNotFoundException

: JVM์ด ํด๋ž˜์Šค ์ด๋ฆ„์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ›์•„์„œ ๋กœ๋”ฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค.

public class ClassNotFoundExample {
    public static void main(String[] args) {
        try {
            Class.forName("com.example.NotExistClass");
        } catch (ClassNotFoundException e) {
            System.out.println("ํด๋ž˜์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค: " + e.getMessage());
        }
    }
}
Class.forName("ํด๋ž˜์Šค๋ช…")์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋‹ค. ClassNotFoundException๋Š” checked Exception์ด๋ผ ๋ฐ˜๋“œ์‹œ try-catch๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

• IOException

: ์ž๋ฐ” ์ž…์ถœ๋ ฅ์—์„œ ์ฃผ๋กœ ๋ณด์ด๋Š” ์ผ๋ฐ˜ ์˜ˆ์™ธ๋กœ, ์ฝ˜์†”์ด๋‚˜ ํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ์ฝ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

    try {
            BufferedReader reader = new BufferedReader(new FileReader("test.txt"));
            String line = reader.readLine();
            System.out.println("ํŒŒ์ผ ๋‚ด์šฉ: " + line);
            reader.close();
        } catch (IOException e) {
            System.out.println("ํŒŒ์ผ์„ ์ฝ๋Š” ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค: " + e.getMessage());
        }
FileReader์™€ BufferedReader๋ฅผ ์ด์šฉํ•˜์—ฌ test.txt ํŒŒ์ผ์˜ ์ฒซ ์ค„์„ ์ฝ๋Š”๋‹ค. ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ฝ๋Š” ์ค‘ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด
IOException์ด ๋ฐœ์ƒํ•œ๋‹ค. ์ œ๋Œ€๋กœ ์‹คํ–‰์„ ํ•˜๊ณ ์ž ์›ํ•œ๋‹ค๋ฉด ๊ฐ™์€ ํด๋”์— test.txt ํŒŒ์ผ์ด ์ œ๋Œ€๋กœ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ์„ ํ•ด์•ผํ•œ๋‹ค. 

 

 

 

• FileNotFoundException

: IOException์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ด๋ฉฐ, ํŒŒ์ผ์„ ์ฝ์„ ๋•Œ ํ•ด๋‹น ๊ฒฝ๋กœ์— ํŒŒ์ผ์ด ์—†๊ฑฐ๋‚˜ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์—†๋Š” ํŒŒ์ผ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

  try {
            FileInputStream fis = new FileInputStream("test.txt");
        } catch (FileNotFoundException e) {
            System.out.println("ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค: " + e.getMessage());
        }
test.txt ํŒŒ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค.

 

 

 

• CloneNotSupportedException

: Cloneable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š์€ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด clone( ) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฐœ์ƒํ•œ๋‹ค.

class Person implements Cloneable {
    String name;

    Person(String name) {
        this.name = name;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class CloneExample {
    public static void main(String[] args) {
        Person person1 = new Person("Alice");

        try {
            Person person2 = (Person) person1.clone();
            System.out.println("๋ณต์ œ ์„ฑ๊ณต");
        } catch (CloneNotSupportedException e) {
            System.out.println("๋ณต์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค: " + e.getMessage());
        }
    }
}
Object ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ์ค‘ clone( )์€ ์ž์‹ ์˜ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•œ ํด๋ก  ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ๋ฆฌํ„ดํ•˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ๋ฐ˜๋“œ์‹œ Cloneable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•ด์•ผํ•œ๋‹ค.

clone ๋ฉ”์„œ๋“œ๋Š” Java์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์ธ java.lang.Object ํด๋ž˜์Šค์—์„œ ์ •์˜๋œ ๋ฉ”์„œ๋“œ๋กœ ๊ทธ ์•ˆ์— protected๋กœ ์ •์˜๋˜์–ด ์žˆ๋‹ค. ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ super.clone( )์„ ํ˜ธ์ถœํ•ด์•ผ ๋ณต์ œ๋œ๋‹ค. ๋งŒ์•ฝ clone ๋ฉ”์„œ๋“œ๋ฅผ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด protected -> public์œผ๋กœ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

 


 

 

 

โœ”๏ธ   ์‹คํ–‰ ์˜ˆ์™ธ_ 463p

 ์‹คํ–‰ ์˜ˆ์™ธ

: ์ปดํŒŒ์ผ ์ „์ด ์•„๋‹Œ ์‹คํ–‰ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋กœ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๋”ฐ๋กœ ํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ•์ œ ์ข…๋ฃŒ๋œ๋‹ค.

 

ArithmeticException

: ์—ฐ์‚ฐ ์ž์ฒด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

        try {
            int a = 10;
            int b = 0;
            int result = a / b; 
            System.out.println("๊ฒฐ๊ณผ: " + result);
        } catch (ArithmeticException e) {
            System.out.println("์‚ฐ์ˆ  ์˜ค๋ฅ˜ ๋ฐœ์ƒ: " + e.getMessage());
        }
์œ„์˜ ์ฝ”๋“œ๋Š” ๋ถ„๋ชจ๊ฐ€ 0์ธ ๊ฒฝ์šฐ๋กœ ์—ฐ์‚ฐ์ด ๋ถˆ๊ฐ€ํ•˜์—ฌ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์ด๋‹ค. ๋งŒ์•ฝ ์ด๋ ‡๊ฒŒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด result ๊ฐ’์ด -1 ํ˜น์€ 1000 ๋“ฑ์˜ ๊ฐ’์„ ๋„ฃ์€ ์ฝ”๋“œ๋ฅผ try-catch๋กœ ๊ฐ์‹ธ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜์ง€ ์•Š๋„๋ก ๋ง‰์œผ๋ฉด์„œ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ณด๊ณ  ์—ฐ์‚ฐ ์ฝ”๋“œ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Œ์„ ๋ฐœ๊ฒฌํ•œ๋‹ค.

 

 

 

ClassCastException

: ์ƒ์† ๊ด€๊ณ„์— ์žˆ๋Š” ํด๋ž˜์Šค ๊ฐ„์˜ ๋‹ค์šด ์บ์ŠคํŒ…์ด ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ,  ๋‹ค์šด์บ์ŠคํŒ…์„ ์‹œ๋„ํ•˜๋ฉด ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ํ˜•๋ณ€ํ™˜์„ ํ•˜๋ฉด ๋ฐœ์ƒํ•œ๋‹ค.

        Object obj = "๋‚˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค";  // String ๊ฐ์ฒด

        try {
            Integer num = (Integer) obj;  // ์ž˜๋ชป๋œ ํ˜•๋ณ€ํ™˜
        } catch (ClassCastException e) {
            System.out.println("ํ˜•๋ณ€ํ™˜ ์˜ค๋ฅ˜ ๋ฐœ์ƒ: " + e.getMessage());
        }
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}

public class CastExample {
    public static void main(String[] args) {
        Animal animal = new Cat();  // ์‹ค์ œ ๊ฐ์ฒด๋Š” Cat

        try {
            Dog dog = (Dog) animal;  // ์ž˜๋ชป๋œ ๋‹ค์šด์บ์ŠคํŒ…
        } catch (ClassCastException e) {
            System.out.println("ํ˜•๋ณ€ํ™˜ ์˜ค๋ฅ˜: " + e.getMessage());
        }
    }
}

 

 

 

ArrayIndexOutOfBoundException

: ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

        int[] numbers = {10, 20, 30};

        try {
            System.out.println(numbers[3]); // ์ธ๋ฑ์Šค 3์€ ์กด์žฌํ•˜์ง€ ์•Š์Œ
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("๋ฐฐ์—ด ์ธ๋ฑ์Šค ์˜ค๋ฅ˜ ๋ฐœ์ƒ: " + e.getMessage());
        }

 

 

 

NumberFormatException

: ๋ฌธ์ž์—ด์„ ์ˆซ์ž ๋˜๋Š” ์‹ค์ˆ˜๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ๋ฌธ์ž์—ด์ด ๋ณ€ํ™˜ํ•˜๊ณ ์ž ํ•˜๋Š” ์ˆซ์ž ํ˜•์‹์ด ์•„๋‹ˆ๋ฉด ๋ณ€ํ™˜์ด ์‹คํŒจํ•˜๋Š”๋ฐ ์ด๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

        String input = "123ABC";  // ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๋ฌธ์ž์—ด

        try {
            int number = Integer.parseInt(input);  // ์˜ˆ์™ธ ๋ฐœ์ƒ
            System.out.println("๋ณ€ํ™˜๋œ ์ˆซ์ž: " + number);
        } catch (NumberFormatException e) {
            System.out.println("์ˆซ์ž ํ˜•์‹ ์˜ค๋ฅ˜: " + e.getMessage());
        }

 

 

 

NullPointerException

: ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์ง€ ์•Š์€ ์ƒํ™ฉ์—์„œ ํ•„๋“œ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

        String text = null;  // ๋ฌธ์ž์—ด ๋ณ€์ˆ˜์— null ํ• ๋‹น

        try {
            System.out.println("๋ฌธ์ž์—ด ๊ธธ์ด: " + text.length());  // ์˜ˆ์™ธ ๋ฐœ์ƒ
        } catch (NullPointerException e) {
            System.out.println("๋„ ํฌ์ธํ„ฐ ์˜ˆ์™ธ ๋ฐœ์ƒ: " + e.getMessage());
        }
์œ„์˜ ์ฝ”๋“œ์—์„œ text๋Š” null ๊ฐ’์ด๋‹ค. null์€ ์œ„์นซ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜์˜ ์ดˆ๊นƒ๊ฐ’์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ˜„์žฌ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

 

+ Recent posts