๐Ÿ“‚ JAVA

    ์˜ˆ์™ธ์ฒ˜๋ฆฌ(Exception Handling) - (1)

    ์ž๋ฐ”์—์„œ๋Š” ์‹คํ–‰ ์‹œ(runtime) ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜๋ฅผ '์—๋Ÿฌ(Error)'์™€ '์˜ˆ์™ธ(Exception)'๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค. ์—๋Ÿฌ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ(OutOfMemoryError)์ด๋‚˜ ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(StackOverflowError)์™€ ๊ฐ™์ด ์ผ๋‹จ ๋ฐœ์ƒํ•˜๋ฉด ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๋Š” ์‹ฌ๊ฐํ•œ ์˜ค๋ฅ˜์ด๊ณ , ์˜ˆ์™ธ๋Š” ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์ˆ˜์Šต๋  ์ˆ˜ ์žˆ๋Š” ๋น„๊ต์  ๋œ ์‹ฌ๊ฐํ•œ ๊ฒƒ์ด๋‹ค. ์—๋Ÿฌ๋Š” ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ์— ์˜ํ•ด์„œ ์ˆ˜์Šต๋  ์ˆ˜ ์—†๊ณ  ์˜ˆ์™ธ๋Š” ์ˆ˜์Šต๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ(Exception Handling)๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ƒํ™ฉ์„ ์ธ์‹ํ•˜๊ณ  ๋Œ€์ฒ˜ํ•˜๋„๋ก ํ•œ๋‹ค. 1. ์˜ˆ์™ธ ํด๋ž˜์Šค์˜ ๋ถ„๋ฅ˜ ๐ŸŽน ์˜ˆ์™ธ ํด๋ž˜์Šค์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์™ผ์ชฝ์— ์žˆ๋Š” Error, ํŒŒ๋ž€์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ Checked Exception ๊ณ„์—ด, ์ฃผํ™ฉ์ƒ‰์œผ๋กœ ํ‘œ์‹œ..

    equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ(2) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ11)]

    ์•ž์—์„œ ์‚ดํŽด๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ ์ข‹์€ ํ•ด์‹œ ํ•จ์ˆ˜๋ผ๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค์— ๋‹ค๋ฅธ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด์ƒ์ ์ธ ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์ฃผ์–ด์ง„ (์„œ๋กœ ๋‹ค๋ฅธ) ์ธ์Šคํ„ด์Šค๋“ค์„ 32๋น„ํŠธ ์ •์ˆ˜ ๋ฒ”์œ„์— ๊ท ์ผํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•ด์•ผ ํ•œ๋‹ค. ์ด์ƒ์„ ์™„๋ฒฝํ•˜๊ฒŒ ์‹คํ˜„ํ•˜๊ธฐ๋Š” ์–ด๋ ต์ง€๋งŒ ๋น„์Šทํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ๋Š” ๊ทธ๋‹ค์ง€ ์–ด๋ ต์ง€ ์•Š๋‹ค. ํ•ด๋‹น ๊ธ€์„ ํ†ตํ•ด ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” 4๊ฐ€์ง€ ๋ฐฉ๋ฒ•๊ณผ ์ฃผ์˜ ์‚ฌํ•ญ์„ ์•Œ์•„๋ณด์ž. 1. ์ „ํ˜•์ ์ธ hashCode ๊ตฌํ˜„ ๐Ÿฅ‘ ํ•ต์‹ฌ ํ•„๋“œ ์ค‘์— ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ์„œ hashCode๋ฅผ ๊ตฌํ•œ๋‹ค. ๊ธฐ๋ณธ ํƒ€์ž…(primitive type) ํ•„๋“œ๋ผ๋ฉด ํ•ด๋‹น ํƒ€์ž…์˜ hashCode๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ•˜๋ฉด ๋œ๋‹ค. (Type.hashCode(f)) ์ฐธ์กฐ ํƒ€์ž…(reference tyep) ํ•„๋“œ๋ผ๋ฉด ํ•ด๋‹น ํƒ€์ž…์˜ hashCode๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๊ตฌํ•œ๋‹ค. (Point๋ผ๋Š” ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ..

    equals๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๊ฑฐ๋“  hashCode๋„ ์žฌ์ •์˜ํ•˜๋ผ(1) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ11)]

    equals๋ฅผ ์žฌ์ •์˜ํ•œ ํด๋ž˜์Šค ๋ชจ๋‘์—์„œ hashCode๋„ ์žฌ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด hashCode ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์–ด๊ธฐ๊ฒŒ ๋˜์–ด ํ•ด๋‹น ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ HashMap์ด๋‚˜ HashSet ๊ฐ™์€ ์ปฌ๋ ‰์…˜์˜ ์›์†Œ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ๊ฒƒ์ด๋‹ค. ๋‹ค์Œ์€ Object ๋ช…์„ธ์—์„œ ๋ฐœ์ทŒํ•œ hashCode์— ๋Œ€ํ•œ ๊ทœ์•ฝ์ด๋‹ค. equals ๋น„๊ต์— ์‚ฌ์šฉ๋˜๋Š” ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด hashCode๋Š” ๋งค๋ฒˆ ๊ฐ™์€ ๊ฐ’์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•œ๋‹ค. ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์‹œ ์‹คํ–‰ํ–ˆ๋‹ค๋ฉด ๊ฐ’์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋‘ ๊ฐ์ฒด์— ๋Œ€ํ•œ equals๊ฐ€ ๊ฐ™๋‹ค๋ฉด, hashCode์˜ ๊ฐ’๋„ ๊ฐ™์•„์•ผ ํ•œ๋‹ค. ๋‘ ๊ฐ์ฒด์— ๋Œ€ํ•œ equals๊ฐ€ ๋‹ค๋ฅด๋”๋ผ๋„, hashCode์˜ ๊ฐ’์€ ๊ฐ™์„ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ•ด์‹œ ํ…Œ์ด๋ธ” ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•ด ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์ด ์ข‹..

    equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ(3) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ10)]

    ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ง€๊ธˆ๊นŒ์ง€์˜ ๋‚ด์šฉ์„ ์ข…ํ•ฉํ•ด์„œ ์–‘์งˆ์˜ equals ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•๊ณผ ์ฃผ์˜ ์‚ฌํ•ญ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. 1. equals ๊ตฌํ˜„ ๋ฐฉ๋ฒ• == ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์ž…๋ ฅ์ด ์ž๊ธฐ ์ž์‹ ์˜ ์ฐธ์กฐ์ธ์ง€ ํ™•์ธํ•œ๋‹ค. instanceof ์—ฐ์‚ฐ์ž๋กœ ์ž…๋ ฅ์ด ์˜ฌ๋ฐ”๋ฅธ ํƒ€์ž…์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ์ž…๋ ฅ์„ ์˜ฌ๋ฐ”๋ฅธ ํƒ€์ž…์œผ๋กœ ํ˜•๋ณ€ํ™˜ํ•œ๋‹ค. ์ž…๋ ฅ ๊ฐ์ฒด์™€ ์ž๊ธฐ ์ž์‹ ์˜ ๋Œ€์‘๋˜๋Š” 'ํ•ต์‹ฌ' ํ•„๋“œ๋“ค์ด ๋ชจ๋‘ ์ผ์น˜ํ•˜๋Š”์ง€ ํ•˜๋‚˜์”ฉ ๊ฒ€์‚ฌํ•œ๋‹ค. float์™€ double์„ ์ œ์™ธํ•œ ๊ธฐ๋ณธ ํƒ€์ž… ํ•„๋“œ๋Š” == ์—ฐ์‚ฐ์ž๋กœ ๋น„๊ตํ•˜๊ณ , ์ฐธ์กฐ ํƒ€์ž… ํ•„๋“œ๋Š” ๊ฐ๊ฐ์˜ equals ๋ฉ”์„œ๋“œ๋กœ, float๊ณผ double ํ•„๋“œ๋Š” ๊ฐ๊ฐ ์ •์  ๋ฉ”์„œ๋“œ์ธ Float.compare(float, float)์™€ Double.compare(double, double)๋กœ ๋น„๊ตํ•œ๋‹ค. (float์™€ doubl..

    equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ(2) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ10)]

    ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” equals ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ์ง€์ผœ์•ผ ํ•˜๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ 5๊ฐ€์ง€๋ฅผ ์กฐ๊ธˆ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. 1. ๋ฐ˜์‚ฌ์„ฑ(reflexivity) A.equals(A) == true ๋ฐ˜์‚ฌ์„ฑ์€ ๋‹จ์ˆœํžˆ ๋งํ•˜๋ฉด ๊ฐ์ฒด๋Š” ์ž๊ธฐ ์ž์‹ ๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ์ด ์š”๊ฑด์€ ์ผ๋ถ€๋Ÿฌ ์–ด๊ธฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋งŒ์กฑ์‹œํ‚ค์ง€ ๋ชปํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์›Œ ๋ณด์ธ๋‹ค. 2. ๋Œ€์นญ์„ฑ(symmetry) A.equals(B) = B.equals(A) ๋Œ€์นญ์„ฑ์€ ๋‘ ๊ฐ์ฒด๋Š” ์„œ๋กœ์— ๋Œ€ํ•œ ๋™์น˜ ์—ฌ๋ถ€์— ๋˜‘๊ฐ™์ด ๋‹ตํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ณ„ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ž์—ด์„ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. public final class CaseInsensitiveString { private final String s; public CaseInsens..

    equals๋Š” ์ผ๋ฐ˜ ๊ทœ์•ฝ์„ ์ง€์ผœ ์žฌ์ •์˜ํ•˜๋ผ(1) - [3์žฅ. ๋ชจ๋“  ๊ฐ์ฒด์˜ ๊ณตํ†ต ๋ฉ”์„œ๋“œ(์•„์ดํ…œ10)]

    ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด equals๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ๋ง์ž. equlas ๋ฉ”์„œ๋“œ๋Š” ์žฌ์ •์˜ํ•˜๊ธฐ ์‰ฌ์›Œ ๋ณด์ด์ง€๋งŒ ๊ณณ๊ณณ์— ํ•จ์ •์ด ๋„์‚ฌ๋ฆฌ๊ณ  ์žˆ์–ด์„œ ์ž์นซํ•˜๋ฉด ๋”์ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” 'equals๋ฅผ ์žฌ์ •์˜ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” 4๊ฐ€์ง€ ์ƒํ™ฉ'๊ณผ '๋งŒ์•ฝ equals ์žฌ์ •์˜๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๋งŒ์กฑํ•ด์•ผ ํ•˜๋Š” 5๊ฐ€์ง€ ๊ทœ์•ฝ'์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณผ ๊ฒƒ์ด๋‹ค. 1. ์žฌ์ •์˜ ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” 4๊ฐ€์ง€ ์ƒํ™ฉ ๐Ÿšฉ 1. ๊ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณธ์งˆ์ ์œผ๋กœ ๊ณ ์œ ํ•œ ๊ฒฝ์šฐ ๐ŸŒด ์‹ฑ๊ธ€ํ†ค, ENUM ๋“ฑ ๊ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณธ์งˆ์ ์œผ๋กœ ๊ณ ์œ ํ•œ ๊ฒฝ์šฐ equals๋ฅผ ์žฌ์ •์˜ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. 2. ์ธ์Šคํ„ด์Šค์˜ '๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ(logical equality)'์„ ๊ฒ€์‚ฌํ•  ์ผ์ด ์—†๋Š” ๊ฒฝ์šฐ ๐ŸŒด ์„ค๊ณ„์ž๊ฐ€ ๋…ผ๋ฆฌ์  ๋™์น˜์„ฑ ๋ฐฉ์‹์„ ์›ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์• ์ดˆ์— ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จํ•˜๋Š” ๊ฒฝ..

    try-finally ๋ณด๋‹ค๋Š” try-with-resources๋ฅผ ์‚ฌ์šฉํ•˜๋ผ - [2์žฅ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด(์•„์ดํ…œ9)]

    ์ „ํ†ต์ ์œผ๋กœ ์ž์›์ด ์ œ๋Œ€๋กœ ๋‹ซํž˜์„ ๋ณด์žฅํ•˜๋Š” ์ˆ˜๋‹จ์œผ๋กœ try-finally๊ฐ€ ์“ฐ์˜€๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ž˜์˜ 2๊ฐ€์ง€ ๋ฌธ์ œ์ ์œผ๋กœ ์ธํ•ด try-with-resources์˜ ์‚ฌ์šฉ์ด ๊ถŒ์žฅ๋œ๋‹ค. ๋ณต์ˆ˜์˜ ์ž์›์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•ด์ง„๋‹ค. ์Šคํƒ ์ถ”์  ๋‚ด์—ญ์— ์ด์ „์˜ ์˜ˆ์™ธ์— ๊ด€ํ•œ ์ •๋ณด๋Š” ๋‚จ์ง€ ์•Š๊ฒŒ ๋˜์–ด, ์‹ค์ œ ์‹œ์Šคํ…œ์—์„œ์˜ ๋””๋ฒ„๊น…์„ ๋ชน์‹œ ์–ด๋ ต๊ฒŒ ํ•œ๋‹ค. try-with-resources์˜ ์žฅ์ ๋“ค์„ ํ†ตํ•ด ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์•Œ์•„๋ณด์ž. ์žฅ์  1. ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. try-finally์˜ ๊ธฐ๋ณธ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. static String firstLineOfFile(String path) throws IOException { BufferedReader br = new BufferedReader(new FileReader(p..

    finalizer์™€ cleaner ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ผ - [2์žฅ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด(์•„์ดํ…œ8)]

    ์ž๋ฐ”๋Š” finalizer์™€ cleaner๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๊ฐ์ฒด ์†Œ๋ฉธ์ž๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฌธ์ œ์ ์œผ๋กœ ์ธํ•ด ์‚ฌ์šฉ์ด ์ž์ œ๋œ๋‹ค. ํ•ด๋‹น ๊ธ€์—์„œ ๋ฌธ์ œ์ ๋“ค๊ณผ ์ ์ ˆํ•œ ์“ฐ์ž„์ƒˆ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. ๐Ÿ“ข๋ฌธ์ œ์  1. finalizer์™€ cleaner๋Š” ์ฆ‰์‹œ ์ˆ˜ํ–‰๋œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†๋‹ค. finalizer๋‚˜ cleaner๋ฅผ ์–ผ๋งˆ๋‚˜ ์‹ ์†ํžˆ ์ˆ˜ํ–‰ํ• ์ง€๋Š” ์ „์ ์œผ๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋‹ฌ๋ ธ์œผ๋ฉฐ, ์ด๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ๊ตฌํ˜„๋งˆ๋‹ค ์ฒœ์ฐจ๋งŒ๋ณ„์ด๋‹ค. finalizer๋‚˜ cleaner ์ˆ˜ํ–‰ ์‹œ์ ์— ์˜์กดํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘ ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ๐Ÿ“ข๋ฌธ์ œ์  2. finalizer์™€ cleaner๋Š” ์‹คํ–‰๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ์ผ๋ถ€ ๊ฐ์ฒด์— ๋”ธ๋ฆฐ ์ข…๋ฃŒ ์ž‘์—…์„ ์ „ํ˜€ ์ˆ˜ํ–‰ํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘๋‹จ๋  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ์–˜๊ธฐ๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ๊ทธ๋žจ..

    ๋‹ค ์“ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•˜๋ผ - [2์žฅ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด(์•„์ดํ…œ7)]

    ์ž๋ฐ”์—์„œ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ๋„์™€์ค€๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ€๋น„์ง€, ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋„ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋‹ค ์“ด ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํ•ด์ œํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” 3๊ฐ€์ง€ ์ƒํ™ฉ์„ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. 1. Stack์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ & ํ•ด๊ฒฐ์ฑ… public class Stack{ private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack(){ elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e){ ensureCapacity(); el..

    ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•˜๋ผ - [2์žฅ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด(์•„์ดํ…œ6)]

    ํ•ด๋‹น ์žฅ์—์„œ๋Š” ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ•˜๋Š” 3๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ๋งํ•ด์ฃผ๊ณ  ์žˆ๋‹ค. ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ณด์ž. 1. ๋ฌธ์ž์—ด public static void main(String[] args){ String hello1 = "hello"; String hello2 = new String("hello"); String hello3 = "hello"; System.out.println(hello1 == hello2); // false // ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค System.out.println(hello1.equals(hello2)); // true // ๊ฐ™์€ ๋ฌธ์ž์—ด System.out.println(hello1 == hello3); // true // ๊ฐ™์€ ์ธ์Šคํ„ด์Šค System.out.println(hello1.equals(hell..

    ์ž์›์„ ์ง์ ‘ ๋ช…์‹œํ•˜์ง€ ๋ง๊ณ  ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ผ - [2์žฅ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด(์•„์ดํ…œ5)]

    ์•„์ดํ…œ์˜ ์ œ๋ชฉ์„ ํ†ตํ•ด '๋ชจ๋“  ๊ฒฝ์šฐ์— ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์„ ์‚ฌ์šฉํ•ด์•ผ๊ฒ ๋‹ค'๋ผ๊ณ  ์ดํ•ดํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ์ž์›์— ๋”ฐ๋ผ ๋™์ž‘์ด ๋‹ฌ๋ผ์ง€๋Š” ํด๋ž˜์Šค์ธ ๊ฒฝ์šฐ์— '์˜์กด ๊ฐ์ฒด ์ฃผ์ž…'์„ ๊ณ ๋ คํ•ด๋ณด๋„๋ก ํ•˜์ž. (์•ž์œผ๋กœ ๋‚˜์˜ฌ ์˜ˆ์‹œ์—์„œ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋“ฏ์ด ์‚ฌ์ „์˜ ์ข…๋ฅ˜(Dictionary)์— ๋”ฐ๋ผ SpellChecker๋ผ๋Š” ํด๋ž˜์Šค์˜ ๋™์ž‘์ด ๋‹ฌ๋ผ์ง€๋Š” ๊ฒฝ์šฐ์— ์˜์กด ๊ฐ์ฒด ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.) public class SpellChecker{ private static final Dictionary dictionary = new Dictionary(); // ์ด๊ฒƒ์ด ์ œ๋ชฉ์—์„œ ๋‚˜์˜จ ์ž์›์„ ์ง์ ‘ ๋ช…์‹œํ•˜๋Š” ์˜ˆ์‹œ์ด๋‹ค. private SpellChecker(){} public static boolean isValid(String..

    ์ธ์Šคํ„ด์Šคํ™”๋ฅผ ๋ง‰์œผ๋ ค๊ฑฐ๋“  private ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ผ - [2์žฅ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ํŒŒ๊ดด(์•„์ดํ…œ4)]

    ์ •์  ๋ฉ”์„œ๋“œ๋งŒ ๋‹ด์€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šค๋กœ ๋งŒ๋“ค์–ด ์“ฐ๋ ค๊ณ  ์„ค๊ณ„ํ•œ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒ์„ฑ์ž๋ฅผ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. ์ฆ‰, ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์ง€ ์•Š๋Š” public ์ƒ์„ฑ์ž๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋ฉฐ, ์‚ฌ์šฉ์ž๋Š” ์ด ์ƒ์„ฑ์ž๊ฐ€ ์ž๋™ ์ƒ์„ฑ๋œ ๊ฒƒ์ธ์ง€ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ์•„์ดํ…œ์„ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. public abstract class UtilityClass{ // ์›๋ž˜๋Š” ๊ธฐ๋ณธ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์ง€๋งŒ, ์ถœ๋ ฅ์„ ํ†ตํ•ด ๋ˆˆ์œผ๋กœ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜์˜€๋‹ค. public UtilityClass(){ System.out.println("Contructor"): } } public class DefaultUtilityClass extends Utili..