๐์ ์ฉํ ์ ๋ณด
Strack Overflow Trends
- ์์ฃผ ํธ๋ ๋ ๊ทผํฉ์ ํ์ธํ์
Eclipse
Extract Superclass
๐ก
์๋์ผ๋ก
์์ ๊ด๊ณ
์ Super ํด๋์ค
๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ค๋ค. Type Hierarchy
- ํด๋์ค๋ช
์์
F4
๐ก
ํด๋น ํด๋์ค์ ๊ณ์ธตํ๋ ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ ์๋ค.
ํด๋์ค ๋น ๋ฅธ ์ด๋
Ctrl
+Shift
+R
๐ก11, 12์ฅ ํผ๋๋ฐฑ Tip
๐ก
Java 8 ์ด์๋ถํฐ ์ธํฐํ์ด์ค์์
default
ํค์๋๋ฅผ ํตํด ๋ฉ์๋๋ฅผ ๊ตฌํํ ์ ์๋ค.
java์์ mixin
์ ๊ตฌํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.public interface Human{
default void hear() {
}
}
๐ก
๋น์ด ์๋ ์ถ์ ํด๋์ค๋ฅผ ์์ํ์ง๋ ์๋๋ค.
ํ์ง๋ง, ๋คํ์ฑ์ ์ํด ๋น์ด์๋ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ ํน์ง๋ค์ ๊ฐ์ง ํด๋์ค๋ค์ ๋ฌถ๋ ๊ฒฝ์ฐ๋ ์๋ค.
๐ก
์์ ๊ด๊ณ์์ super ํด๋์ค์ ํ๋ ์์ฑ ๊ฐ์
protected
๋ก ์ ์ํ๋ค๋ฉด,
ํ์ sub ํด๋์ค์์ this
๋ก ํด๋น ๋ณ์๋ฅผ ์ ๊ทผํ ์ ์๋ค.
๐ 13์ฅ ๋คํ์ฑ (polymorphism)
๐ก
์ด๋ค ๊ฒ์ ์ด๋ ๊ฒ๋ ๋ณผ ์ ์๊ณ ์ ๋ ๊ฒ๋ ๋ณผ ์ ์๋ ๊ฒ
์ธ๋ถ์ ์ธ ๋ถ๋ถ์ ๋ค๋ฅด์ง๋ง, ํฌ๊ด์ ์ผ๋ก ๋ณด๋ ๊ฒ.
๊ทธ๋์
, ๋ฒ์ค
, ์๋ํ
, โฆ. โ ์ฐจ
ํฌ๊ด์ ์ผ๋ก ํ ์น๊ธฐ
์ ์ธ์ ์ถ์์ ์ธ ์์ ๊ฐ๋
์ผ๋ก ํ ์น๊ณ new
๋ ํ์ ๊ฐ๋
์ผ๋ก ํ๋ค.
๐ก
๋ ํฐ ์์ ํด๋์ค๋ก ์ ์ธํ๊ณ =
new
๋ฅผ ํ์ ๊ฐ๋
์ธ์คํด์ค ์์ฑCharacter character1 = new Character();
Character character2 = new SuperHero();
๋คํ์ฑ ์คํจ

๐ก
Is-a
์ ์์ ๊ด๊ณ
๋ฅผ ๋ง์กฑํ์ง ๋ชปํ๋ฉด ๋คํ์ฑ์ ๊ตฌํํ ์ ์๋ค.
์ธํฐํ์ด์ค๋ฅผ ๋ณ์์ ํ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ
public interface Life { }
public class Wizard implements Life{ }
public class Main {
public static void main(String[] args) {
Life life = new Wizard(); // ์์๋๋ฅผ ์ด์์๋ ๊ฒ์ผ๋ก ํ์น๊ธฐ
}
}
attack๊ณผ fireball์ ์ฌ์ฉํ๋ ๋ง๋ฒ์ฌ


attack, fireball์ ์ฌ์ฉํ๋ ์

๐ก
๊ธฐ์กด Wzard ์ธ์คํด์ค๋ฅผ Wizard ๊ฐ์ฒด๋ก ์์ฑํด ๋ฉ์๋๋ฅผ ์ฌ์ฉ
๋คํ์ฑ์ ์๋ชป ์ฌ์ฉํ ์

๐ก
Character c = w;
์ธ๋ถ์ ์ธ wizard๋ฅผ ๋ ํฐ ๊ฐ๋
์ Character๋ก ๋ฃ์์ ๊ฒฝ์ฐ
Wizard๋ Character๋ก์ ๋ ํฐ ๊ฐ๋
์ผ๋ก ๋ณด์ด๊ฒ ๋๋ค.
wizard๋ Character๋ก์ ๋ณด์ด๊ฒ ๋๋ฏ๋ก ๊ณตํต ๋ฉ์๋์ธ run(), attack()์ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ง,
wizard๋ง์ ์ธ๋ถ์ ์ธ fireball()์ ์ฌ์ฉํ์ง ๋ชปํ๋ค.
๋คํ์ฑ ๊ฒฐ๊ณผ ์์ธก



๐ก
๊ฒฐ๊ณผ :
์ฌ๋ผ์์ ์ฌ๊ธ์ฌ๊ธ ๋๋ง์ณค๋ค
์ฌ๋ผ์์ ์ฌ๊ธ์ฌ๊ธ ๋๋ง์ณค๋ค
๐ก
์ค์ฒด new๋ก์ ์์ฑ๋ ์ธ์คํด์ค๋ Slime()์ด๊ณ ,
run() ๋ฉ์๋๋ Monster์ Slime๋ชจ๋ ๊ตฌํ๋ ๊ณตํต ๋ฉ์๋์ด๋ค.
๋ฐ๋ผ์ ์ค์ ์์ฑ๋ ์ธ์คํด์ค Slime์ ์ค๋ฒ๋ผ์ด๋๋
run()
๋ฉ์๋๊ฐ ์คํ๋๋ค!
ํ์ ๋ณ๊ฒฝ ๋ฐฉ๋ฒ

๐ก
์ถ์์ ์ธ ๊ฐ๋
์ ํ์
์บ์คํ
์ ํตํด ๊ตฌ์ฒดํ ์ํฌ ์ ์๋ค.
๋ ํฐ ๊ฐ๋
์ผ๋ก ๋ฐ๊พธ๋ ค๋ฉด, ์บ์คํ
์ด ์๋ ๋จ์ ๋์
ํ๋ฉด ๋๋ค.
๐ก
๋น์ฐํ ์์ ๊ด๊ณ๊ฐ ์๋๋ผ๋ฉด ํ์
์บ์คํ
์ด ๋ถ๊ฐ๋ฅํ๋ค! (๋ฐํ์ ์๋ฌ)
ClassCastException
์ธ์คํด์ค์ ํ์
์ฒดํฌ instanceof

๐ก
ํ์
์บ์คํ
์ ์ฌ์ฉํ ๋, ๋ฐํ์ ์๋ฌ์ ๊ฐ๋ฅ์ฑ์ด ์๊ธฐ ๋๋ฌธ์
instanceof
๋ฅผ ํตํด ํ์
์ ํ์ธํ๋ ๊ฒ์ด ์ข๋ค.
๋คํ์ฑ์ ์ฅ์ ์ ํ์ฉํ์ง ๋ชปํ ์ฝ๋

๐ก
์ธ๋ถ์ ์ธ ๊ฐ์ฒด๋ก ๊ฐ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์์ฑ ํ๋ค.
๋ฐ๋ผ์, ๊ฐ๊ฐ์
setHP()
์ ๋ฉ์๋๋ฅผ ์ํํด ์ฝ๋์ ์ค๋ณต์ด ๋ฐ์ํ๋ค.
์ฝ๋์ ์ค๋ณต ์ ๊ฑฐ (๋คํ์ฑ์ ๋ฉ๋ฆฌํธ : ๋์ผํ ํ์
์ผ๋ก ์ทจ๊ธ)

๐ก
๊ฐ ์ธ๋ถ์ ์ธ Hero, Thief, Wizard ๋ฑ์ ์ถ์์ ์ธ Character ํด๋์ค/์ธํฐํ์ด์ค ๊ฐ์ฒด๋ก ๊ฐ ์ธ์คํด์ค๋ฅผ ์์ฑํด ๋คํ์ฑ์ ์ด์ฉํ ์ ์๋ค.
๋ฐ๋ผ์ ๊ฐ ArrayList()์ ๊ฐ ์ธ์คํด์ค ๊ฐ์ฒด๋ฅผ ๋ฃ๊ณ ํด๋น ๋ฆฌ์คํธ ์์๋ฅผ ๋ฐ๋ณตํจ์ผ๋ก,
์ฝ๋์ ์ค๋ณต์ ์ค์ผ ์ ์๋ค.
๐ก
์ธ๋ถ์ ์ธ ์์๋ค์ ํน์ง์ ์ธ
์์ ์ธํฐํ์ด์ค
๋ก ๋ฌถ๋๋ค๋ฉด,
์ด๋ฌํ ๋คํ์ฑ์ ์ฅ์ ์ ์ ํ์ฉํ ์ ์๋ค..!!!
๋คํ์ฑ์ ํ์ฉํ์ง ๋ชปํ ๋ค์ํ ์ ์ ๊ณต๊ฒฉํ๋ Hero

๋คํ์ฑ์ ํ์ฉํ Hero

ํ์ ์ ํ ์น๊ณ , ์ ๋์ํ๊ฒ ํ๊ธฐ

13์ฅ ์ ๋ฆฌ
๐ก
์ธ์คํด์ค๋ฅผ ์ ๋งคํ๊ฒ ํ์น๊ธฐ
- ์์์ ํ์ ๊ณผ ๋ด์ฉ์ ํ์ ์ ์ญํ
- ์์์ ์ํ is-a ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋ค๋ฉด, ์ธ์คํด์ค๋ฅผ ๋ถ๋ชจ ํด๋์ค ํ์ ์ ๋ณ์์ ๋์ ๊ฐ๋ฅ
- ๋ถ๋ชจ ํด๋์ค ํ์ ๋ณ์์ ๋์ ํ๋ ๊ฒ์ผ๋ก, ํ ์น ์ ์์
- ์ด๋ค ๋ฉค๋ฒ๋ฅผ ์ด์ฉํ ์ ์๋ ๊ฐ๋ ์์์ ํ์ ์ด ๊ฒฐ์ ํ๋ค
- ๋ฉค๋ฒ๊ฐ ์ด๋ป๊ฒ ์์ง์ด๋์ง๋ ๋ด์ฉ์ ํ์ ์ด ๊ฒฐ์ ํ๋ค
์ทจ๊ธ ๋ณ๊ฒฝ
- ์บ์คํธ ์ฐ์ฐ์๋ฅผ ์ด์ฉํ๋ฉด, ๊ฐ์ ๋์ ์ด ๊ฐ๋ฅ
- ๋ถ์ ํ ๋์ ์ด ๋ฐ์ํ ๊ฒฝ์ฐ, ClassCastException ์ด ๋ฐ์
๋คํ์ฑ
- ๋ค๋ฅธ ์ธ์คํด์ค๋ฅผ ๋์ผ์ํ์ฌ, ๋ถ๋ชจ ํด๋์ค ํ์ ์ ๋ฐฐ์ด์ ๋ด์ ์ ์๋ค
- ๋ถ๋ชจ ํด๋์ค ํ์ ์ ์ธ์๋ ๋ฆฌํด ๊ฐ์ ์ด์ฉํ์ฌ, ๋ค๋ฅธ ํด๋์ค๋ฅผ ๋ชจ์์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ๋์ผ์ ์ทจ๊ธ ํด๋, ๊ฐ๊ฐ์ ์ธ์คํด์ค๋ ๊ฐ ํด๋์ค์ ์ ์๋ฅผ ๋ฐ๋ฅด๊ณ ๋ค๋ฅธ ๋์์ ํ๋ค.
๐์ฐ์ต ๋ฌธ์
13-1

Item์ ์ถ์ํด๋์ค/์ธํฐํ์ด์ค
๊ฐ ๋ ์ ์๋ค.
๐ก
(1) ์ด๋ฏธ์ง : Sword, ํด์ค๋ฌธ : Sword, Item
(2) ์ฝ๋ : Monster, Slime, ์ด๋ฏธ์ง : Slime, ํด์ค๋ฌธ : Monster
โ ์ฆ, i ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ๋ฐ๋ผ ๋ดค์ ๋ Item ๊ฐ์ฒด๋ก ๋ณธ๋ค.
13-2

package Exam;
public class Main {
public static void main(String[] args) {
// 1. obj์์ ํธ์ถํ ์ ์๋ ๋ฉ์๋๋ฅผ a, b, c ์ค์ ๊ณ ๋ฅด์์ค
System.out.println("1๋ฒ ๋ฌธ์ ");
X obj = new A();
obj.a();
System.out.println();
System.out.println("2๋ฒ ๋ฌธ์ ");
// 2. ํ๋ฉด์ ํ์๋๋ ๋ด์ฉ ํ์ธ
Y y1 = new A();
Y y2 = new B();
y1.a(); // A์ ๋ํ ์ธ์คํด์ค์ด๋ฏ๋ก Aa
y2.a(); // B์ ๋ํ ์ธ์คํด์ค์ด๋ฏ๋ก Ba
}
}

13-3

๐ก
1. Y
โ A์ B์ ๊ณตํต ํน์ฑ์ ๋ถ๋ชจ ํด๋์ค์ธ Y ํด๋์ค์ ํ์
์ผ๋ก ์ ๋ค๋ฆญ์ ์ค์ ํด์ผ ํ๋ค.
package Exam;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
//Ch13-3
List<Y> list = new ArrayList<Y>();
Y aInstance = new A();
Y bInstance = new B();
list.add(aInstance);
list.add(bInstance);
for(Y instance : list) {
instance.b();
}
}
}
๐ก
๊ฐ์ฒด์งํฅ์ ํน์ง : ์์, ๋คํ์ฑ, ์บก์ํ ๊ด๋ จํด์ ์ ์๊ณ ์์ด์ผ ํ๋ค.
Uploaded by N2T