[Java] ๋‹คํ˜•์„ฑ (Polymorphism) - ์ •์  ๋ฐ”์ธ๋”ฉ / ๋™์  ๋ฐ”์ธ๋”ฉ
ยท
๐Ÿ“ Study/Java
๋ฐ”์ธ๋”ฉ(Binding)์ด๋ž€?"์–ด๋–ค ๋ฉค๋ฒ„(๋ณ€์ˆ˜/๋ฉ”์„œ๋“œ)๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ๊ทธ๊ฒŒ ์‹ค์ œ๋กœ ๋ˆ„๊ตฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ณผ์ •" ์ •์  ๋ฐ”์ธ๋”ฉ (Static Binding)์ปดํŒŒ์ผ ์‹œ์ ์— ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ→ ๋ณ€์ˆ˜(ํ•„๋“œ)๋Š” ์ •์  ๋ฐ”์ธ๋”ฉSubClass subClass = new SubClass();System.out.print(subClass.x); // ๐Ÿ‘‰ "sub"SuperClass superClass = subClass;System.out.print(superClass.x); // ๐Ÿ‘‰ "super"๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•ด๋„ ์ฐธ์กฐ ๋ณ€์ˆ˜์˜ ํƒ€์ž…(superClass)์— ๋”ฐ๋ผ x๊ฐ€ ๋ˆ„๊ตฌ์˜ ๊ฒƒ์ธ์ง€ ๋‹ฌ๋ผ์ง„๋‹ค.→ ํ•„๋“œ(x)๋Š” ์ •์  ๋ฐ”์ธ๋”ฉ๋˜๊ธฐ ๋•Œ๋ฌธ. ์ฆ‰, ํ•„๋“œ(x)๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜์˜ ํƒ€์ž… ๊ธฐ์ค€์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค. ๋™์  ๋ฐ”์ธ๋”ฉ (Dynamic Bind..
[Java] ๋‹คํ˜•์„ฑ (Polymorphism) - ๊ฐ์ฒด ์ฐธ์กฐ
ยท
๐Ÿ“ Study/Java
ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž๋ฃŒํ˜• ํƒ€์ž…์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ธ๊ณ„์—์„œ๋Š” ๋‹คํ˜•์„ฑ์ด๋ผ๊ณ  ํ•œ๋‹ค.์ƒ์† ๊ด€๊ณ„์— ์žˆ์„ ๋•Œ ์กฐ์ƒ ํด๋ž˜์Šค์˜ ํƒ€์ž…์œผ๋กœ ์ž์‹ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. Person person = new SpiderMan(); ๋ฉ”๋ชจ๋ฆฌ์—๋Š” SpiderMan ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์กŒ์ง€๋งŒ,์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉค๋ฒ„(ํ•„๋“œ, ๋ฉ”์„œ๋“œ)๋Š” Person ํƒ€์ž…์— ์ œํ•œ๋œ๋‹ค. class Person { void jump() { ... }}class SpiderMan extends Person { void fireWeb() { ... } boolean isSpider = true;}Person p = new SpiderMan(); // ๋‹คํ˜•์„ฑ์ด ๊ฒฝ์šฐ p๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ฒƒjump() โœ… (Person์˜ ๋ฉ”์„œ๋“œ)..
[Java] ์ถ”์ƒ ํด๋ž˜์Šค(abstract class)์™€ ์ธํ„ฐํŽ˜์ด์Šค(interface)์˜ ์ฐจ์ด
ยท
๐Ÿ“ Study/Java
์ถ”์ƒ ํด๋ž˜์Šค(abstract class)์™€ ์ธํ„ฐํŽ˜์ด์Šค(interface)๋Š” ๋‘˜ ๋‹ค "์ถ”์ƒํ™”(abstraction)"๋ฅผ ์œ„ํ•œ ์ˆ˜๋‹จ์ด์ง€๋งŒ, ๊ตฌ์กฐ, ์‚ฌ์šฉ ๋ชฉ์ , ์˜๋ฏธ์—๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ๊ตฌ์กฐ ๋น„๊ต ์ถ”์ƒ ํด๋ž˜์Šค ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์† ๊ด€๊ณ„๋‹จ์ผ ์ƒ์†๋งŒ ๊ฐ€๋Šฅ (extends)๋‹ค์ค‘ ๊ตฌํ˜„ ๊ฐ€๋Šฅ (implements)๋ฉ”์„œ๋“œ์ผ๋ถ€๋งŒ ์ถ”์ƒ์ด์–ด๋„ ๊ฐ€๋Šฅ๊ธฐ๋ณธ์ ์œผ๋กœ ์ „๋ถ€ ์ถ”์ƒ ๋ฉ”์„œ๋“œ (Java 8 ์ดํ›„ default/static๋„ ๊ฐ€๋Šฅ)๋ณ€์ˆ˜์ผ๋ฐ˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ํ—ˆ์šฉ๋จ์ž๋™์œผ๋กœ public static final๋‹ค์ค‘ ์ƒ์†โŒ ๋ถˆ๊ฐ€๋Šฅ (๋‹จ์ผ ์ƒ์†๋งŒ ๊ฐ€๋Šฅ)โœ”๏ธ ๊ฐ€๋Šฅ์ƒ์„ฑ์žโœ”๏ธ ์žˆ์ŒโŒ ์—†์Œ์šฉ๋„๊ณตํ†ต ์ฝ”๋“œ ์ผ๋ถ€ ๊ตฌํ˜„ ์ œ๊ณต๋™์ž‘ ๋ช…์„ธ (๊ธฐ๋Šฅ ์ •์˜) ์ถ”์ƒ ํด๋ž˜์Šค์˜ ๋ชฉ์ ๐Ÿ‘‰ ๊ณตํ†ต ๊ธฐ๋Šฅ๊ณผ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•˜๋ ค๊ณ  ์‚ฌ์šฉํ•  ๋•Œ ์ ํ•ฉ๋ถ€๋ชจ ํด๋ž˜์Šค๋กœ์„œ ๊ธฐ๋ณธ ํ•„๋“œ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜..
[Java] ์ธํ„ฐํŽ˜์ด์Šค ๊ด€๋ จ ๊ฐœ๋…
ยท
๐Ÿ“ Study/Java
1. ์ธํ„ฐํŽ˜์ด์Šค ์•ˆ์˜ ๋ณ€์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด public static final์ธํ„ฐํŽ˜์ด์Šค ์•ˆ์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด, ์•„๋ฌด ํ‚ค์›Œ๋“œ๋ฅผ ์•ˆ ๋ถ™์—ฌ๋„ ์ž๋™์œผ๋กœ public static final์ด ๋ถ™๋Š”๋‹ค.์ฆ‰, ์ธํ„ฐํŽ˜์ด์Šค ๋ณ€์ˆ˜๋Š” ๊ณต์šฉ ์ƒ์ˆ˜๋กœ ์ทจ๊ธ‰๋˜๋ฉฐ, ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ณต์œ ํ•˜๊ณ , ๊ฐ’๋„ ์ ˆ๋Œ€ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค.interface MyInterface { int MAX = 100; // ์‚ฌ์‹ค์€ public static final int MAX = 100; ๊ณผ ๊ฐ™์Œ} ๋ณ€์ˆ˜๋Š” ์ƒ์ˆ˜๋ผ์„œ ๊ฐ’์„ ๋ฐ”๊พธ๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ ๋ฐœ์ƒMAX = 200; // โŒ ์˜ค๋ฅ˜! final์ด๊ธฐ ๋•Œ๋ฌธ 2. ์ธํ„ฐํŽ˜์ด์Šค ์•ˆ์˜ ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ public abstract์ธํ„ฐํŽ˜์ด์Šค์— ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•˜๋ฉด, ์•„๋ฌด ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ public abstract๊ฐ€ ๋ถ™๋Š”..
[Java] ์ถ”์ƒ ํด๋ž˜์Šค(abstract class) ์กฐ๊ฑด, ๋ชฉ์ 
ยท
๐Ÿ“ Study/Java
์กฐ๊ฑด์กฐ์ƒ ํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›์€ abstract ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐํด๋ž˜์Šค ๋‚ด๋ถ€์— abstract ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์ด๋ฏ€๋กœ ์ž์‹ ํด๋ž˜์Šค๋Š” abstract ํด๋ž˜์Šค๋กœ ์„ ์–ธ๋˜์–ด์•ผ ํ•จ Java์—์„œ๋Š” abstract ๋ฉ”์„œ๋“œ(์ถ”์ƒ ๋ฉ”์„œ๋“œ)๋Š” ๋ชธ์ฒด๊ฐ€ ์—†๋Š” ๋ฉ”์„œ๋“œ์ฆ‰, ์–ด๋–ค ํ–‰๋™์„ "์ •์˜ํ•˜์ง€ ์•Š๊ณ  ์„ ์–ธ๋งŒ ํ•ด๋†“์€ ๊ฒƒ" abstract class Animal { abstract void sound(); // ์ถ”์ƒ ๋ฉ”์„œ๋“œ}์ด๋Ÿฐ sound() ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์†๋ฐ›์€ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์žฌ์ •์˜(override) ํ•˜์ง€ ์•Š์œผ๋ฉด, ๊ทธ ์ž์‹ ํด๋ž˜์Šค๋„ abstract ํด๋ž˜์Šค์—ฌ์•ผ๋งŒ ํ•จ. ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ. abstract class Animal { abstract void sound(); // ์ถ”์ƒ ๋ฉ”์„œ๋“œ}class ..
[Java] ์ƒ์† ๊ด€๋ จ ๊ฐœ๋… (์ ‘๊ทผ ์ œํ•œ์ž, instanceof, super, Sealed class)
ยท
๐Ÿ“ Study/Java
์ ‘๊ทผ ์ œํ•œ์ž์šฉ๋„ (์ œํ•œ์ž๊ฐ€ ์–ด๋””์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ๊ฐ€?)์ œํ•œ์žํด๋ž˜์Šค ์‚ฌ์šฉ์ƒ์„ฑ์ž ์‚ฌ์šฉ๋ฉค๋ฒ„ ์‚ฌ์šฉpublicOOOprotectedOOO(package/private)OOOprivateOOO ์ ‘๊ทผ ๊ฐ€๋Šฅ ๋ฒ”์œ„ (๋‹ค๋ฅธ ์œ„์น˜์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ๊ฐ€?)์ œํ•œ์ž๊ฐ™์€ ํด๋ž˜์Šค๊ฐ™์€ ํŒจํ‚ค์ง€๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ์ž์†ํด๋ž˜์Šค ์ „์ฒด ์ ‘๊ทผ ๊ฐ€๋ŠฅpublicOOOOprotectedOOOX(package/private)OOXXprivateOXXX instanceof๊ฐ์ฒด๊ฐ€ ํŠน์ • ํด๋ž˜์Šค ๋˜๋Š” ๊ทธ ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€ ํ™•์ธํ•˜๋Š” ์—ฐ์‚ฐ์ž supersuper๋Š” ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„(๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž)์— ์ ‘๊ทผํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค์›Œ๋“œ super() – ๋ถ€๋ชจ ์ƒ์„ฑ์ž ํ˜ธ์ถœ์ž์‹ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‚ฌ์šฉ์ƒ์„ฑ์ž ์•ˆ์—์„œ ๋ฐ˜๋“œ์‹œ..
[Java] ์˜ค๋ฒ„๋กœ๋”ฉ(Overloading)
ยท
๐Ÿ“ Study/Java
์˜ค๋ฒ„๋กœ๋”ฉ(Overloading)๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ •์˜ํ•˜๋Š” ๊ฒƒ๋‹จ, ๋งค๊ฐœ๋ณ€์ˆ˜(ํŒŒ๋ผ๋ฏธํ„ฐ)๊ฐ€ ๋‹ค๋ฅด๋ฉด ํ—ˆ์šฉ๋จ. ์˜ค๋ฒ„๋กœ๋”ฉ ์กฐ๊ฑด์…‹ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋‹ค๋ฅด๋ฉด OK๋ฉ”์„œ๋“œ ์ด๋ฆ„์€ ๋™์ผํ•ด์•ผ ํ•จ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐœ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๋ฉด ๊ฐ€๋Šฅ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์ด ๋‹ค๋ฅด๋ฉด ๊ฐ€๋Šฅ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์˜ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๊ฐ€๋Šฅ ์˜ค๋ฒ„๋กœ๋”ฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐpublic void add(int num1, int num2) { }public void add(int num1, double num2) { }public void add(int num1, int num2, int num3) { }public void add(double num1, int num2) { } ์˜ค๋ฒ„๋กœ๋”ฉ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋ฆฌํ„ด ํƒ€์ž…๋งŒ ๋‹ค๋ฅธ ๊ฒฝ์šฐ: ์˜ค๋ฒ„๋กœ๋”ฉ ๊ธฐ์ค€์€ ๋งค๊ฐœ๋ณ€์ˆ˜์ด์ง€ ๋ฆฌํ„ด ํƒ€์ž…์ด ์•„๋‹˜ํƒ€์ž…๊ณผ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์œผ๋ฉด ์ด..
[Java] ์ƒ์„ฑ์ž, this, ์ดˆ๊ธฐํ™” ๋ธ”๋ก
ยท
๐Ÿ“ Study/Java
์ƒ์„ฑ์žpublic class B { public B(){ // ์ธ์Šคํ„ด์Šค ์‹œ์ ์— ์‹คํ–‰๋˜๋Š” ํŠน์ˆ˜๋ฉ”์†Œ๋“œ // ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ // ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐํ™” ํ• ๋‹น // ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ์ดํ›„ ์ดˆ๊ธฐ์ž‘์—… ์ง„ํ–‰ }class Data { Data() { System.out.println("์ƒ์„ฑ์ž"); } Data(int a) { System.out.println("์ƒ์„ฑ์ž1"); } Data(int a, int b) { System.out.println("์ƒ์„ฑ์ž2"); }}์ƒ์„ฑ์ž๋„ ์˜ค๋ฒ„๋กœ๋”ฉ ์ ์šฉ๋งค๊ฐœ๋ณ€์ˆ˜ ์žˆ๋Š” ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค๋ฉด ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์•ˆ ๋งŒ๋“ฆ. ์ƒ์„ฑ์ž๊ฐ€ ํ•˜๋‚˜๋„ ์—†์œผ๋ฉด ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด..
[Java] ๊ฐ์ฒด, ์ธ์Šคํ„ด์Šค, static ๋ณ€์ˆ˜ ๋ฐ ๋ฉ”์„œ๋“œ
ยท
๐Ÿ“ Study/Java
๊ฐ์ฒด / ์ธ์Šคํ„ด์Šคํด๋ž˜์Šค์— ์˜ํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šค๋ผ๊ณ ๋„ ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ์ฒด์™€ ์ธ์Šคํ„ด์Šค์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ผ๊นŒ? Animal cat = new Animal() ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ cat์€ ๊ฐ์ฒด์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  cat์ด๋ผ๋Š” ๊ฐ์ฒด๋Š” Animal์˜ ์ธ์Šคํ„ด์Šค์ด๋‹ค. ์ธ์Šคํ„ด์Šค๋ผ๋Š” ๋ง์€ ํŠน์ • ๊ฐ์ฒด(์—ฌ๊ธฐ์„œ๋Š” cat)๊ฐ€ ์–ด๋–ค ํด๋ž˜์Šค(์—ฌ๊ธฐ์„œ๋Š” Animal)์˜ ๊ฐ์ฒด์ธ์ง€๋ฅผ ๊ด€๊ณ„ ์œ„์ฃผ๋กœ ์„ค๋ช…ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. ์ฆ‰, ‘cat์€ ์ธ์Šคํ„ด์Šค’๋ณด๋‹ค๋Š” ‘cat์€ ๊ฐ์ฒด’๋ผ๋Š” ํ‘œํ˜„์ด, ‘cat์€ Animal์˜ ๊ฐ์ฒด’๋ณด๋‹ค๋Š” ‘cat์€ Animal์˜ ์ธ์Šคํ„ด์Šค’๋ผ๋Š” ํ‘œํ˜„์ด ํ›จ์”ฌ ์ž˜ ์–ด์šธ๋ฆฐ๋‹ค.๊ฐ์ฒด ๋ณ€์ˆ˜ = ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ = ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ = ์†์„ฑstatic ๋ณ€์ˆ˜ = ํด๋ž˜์Šค ๋ณ€์ˆ˜๋ฉค๋ฒ„: ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์„ ์–ธ๋œ ๋ชจ๋“  ๊ตฌ์„ฑ์š”์†Œ. ๋ฉค๋ฒ„ ๋ณ€์ˆ˜, ๋ฉค๋ฒ„ ๋ฉ”์†Œ๋“œ๋ฉค๋ฒ„ํ•„๋“œ๋Š” ์ดˆ๊ธฐ..
[Java] Call by Value
ยท
๐Ÿ“ Study/Java
Java๋Š” Call by Valueclass CallByTest { int memberVar = 10; static void change1(int var) { var += 10; System.out.printf("change1 : %d\\n", var); } static void change2(CallByTest cbt1) { cbt1.memberVar += 100; System.out.printf("change2 : %d\\n", cbt1.memberVar); } public static void main(String[] args) { CallByTest cbt = new CallByTest(); // ๊ฐ์ฒด ..