๐์ ์ฉํ ์ ๋ณด
Java ๊ฐ๋ณ ์ธ์
public class Main {
public void something(int... nums) {
int i = nums[0];
}
}
Eclipse ๋จ์ถํค
Ctrl
+D
: ํ ์ค ์ง์ฐ๊ธฐ
Ctrl
+Alt
+โ
: ์ค ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ
๐ก10์ฅ ํผ๋๋ฐฑ Tip
๐ก
ํด๋์ค ๋ด field์ ์ ์๋ ๋ณ์๋ private
์ ์ํ ๋ฉ์๋๋ public
๐ 11์ฅ ์์ (Inheritance)
๐ก
์ด์ ์ ๋ง๋ ํด๋์ค์ ๋ฎ์์ง๋ง, ์ผ๋ถ ๋ค๋ฅธ ํด๋์ค๋ฅผ ๋ง๋ค ํ์๊ฐ ์์ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์์์ ํ๋ ์ด์
๐ก
์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์์ ์ ์๋ ํ๋์ ๋ฉ์๋๋ฅผ ๋ฌผ๋ ค๋ฐ๋๋ค. ์ด๋ฅผ ํตํด ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์์ ์ด๋ฏธ ๊ตฌํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ์๋ก์ด ํ๋์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋, ๋ถ๋ชจ ํด๋์ค์์ ์์๋ฐ์ ๋ฉ์๋๋ฅผ
์ฌ์ ์(override)
ํ ์๋ ์๋ค.
์์์ ํตํด ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์๊ณ , ์ฝ๋์ ์ค๋ณต์ ํผํ ์ ์์ต๋๋ค. ๋ํ ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ๊ณ์ธต์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์์ด์ ์ฝ๋์ ๊ฐ๋
์ฑ์ ๋์ด๊ณ , ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํ ์ ์์ต๋๋ค.
์ธ์ฐ๊ธฐ์ ๋๋ง๋ง ๊ฐ๋ฅํ Hero ํด๋์ค

fly()
, land()
๊ฐ ๊ฐ๋ฅํ SuperHero ํด๋์ค

์ ์ฝ๋์ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ ๋ฌธ์ ์
- ์ถ๊ฐ, ์์ ์ ์๊ฐ์ด ๊ฑธ๋ฆผ
- ์์ค์ ํ์ ์ด๋ ๊ด๋ฆฌ๊ฐ ์ด๋ ค์ ์ง๋ค.
๐ก
์์
์ ํตํด ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.
Hero ํด๋์ค๋ฅผ ์์ ๋ฐ์ SuperHero


๐ก
SuperHero๋ Hero๋ฅผ ์์(ํ์ฅ)ํจ์ผ๋ก, ์ฝ๋์ ์ค๋ณต์ ์ค์ด๊ณ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
์์๊ด๊ณ์ ํํ (ํด๋์ค ๋ค์ด์ด๊ทธ๋จ)

Java์์ ๋ค์ค์์ ๊ธ์ง

๋ค์ค ์์์ ๋ฌธ์ ์
๐ก
๋ค์ค ์์์ด๋, ํ ํด๋์ค๊ฐ ๋ ๊ฐ ์ด์์ ๋ถ๋ชจ ํด๋์ค๋ก๋ถํฐ ์์์ ๋ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ค์ค ์์์ ๋ฌธ์ ์ ์ค ํ๋๋ ๋ค์ด์๋ชฌ๋ ๋ฌธ์ (diamond problem)์
๋๋ค. ์ด ๋ฌธ์ ๋ ๋ค์ค ์์์ ์ฌ์ฉํ ๋, ๋ ๊ฐ ์ด์์ ๋ถ๋ชจ ํด๋์ค๊ฐ ๊ฐ์ ๋ฉ์๋๋ ํ๋๋ฅผ ๊ฐ๊ณ ์์ ๊ฒฝ์ฐ, ์์ ํด๋์ค์์ ์ด๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ ์ง ๋ชจํธํด์ง๋ ๋ฌธ์ ์
๋๋ค.
์๋ฅผ ๋ค์ด, ํด๋์ค A์ B๊ฐ ํด๋์ค C๋ฅผ ์์ํ๊ณ , ํด๋์ค D๊ฐ A์ B๋ฅผ ์์ํ๋ ๊ฒฝ์ฐ, ๋ง์ฝ A์ B๊ฐ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ ํ๋๋ฅผ ๊ฐ๊ณ ์๋ค๋ฉด, D๋ ์ด๋ฅผ ์์๋ฐ๋๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๐ก
๋์
์ธํฐํ์ด์ค(Interface)
๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ค ์์๊ณผ ์ ์ฌํ ํจ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
์ธํฐํ์ด์ค๋ ๋ค์ค ์์์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ํด๋์ค๊ฐ ์ฌ๋ฌ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ ๋ค์ด์๋ชฌ๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค.
์ค๋ฒ๋ผ์ด๋ (Override) - ์ฌ์ ์

๐ก
์์ ๋ฐ์ SuperHero์์ run() ๋ฉ์๋๋ฅผ ์ฌ์ ์(override) ํ๋ค.

์์, ์ค๋ฒ๋ผ์ด๋ ๊ธ์งํ๋ ๋ฐฉ๋ฒ (final)


๐ก
final class
๋ฅผ ํตํด ์์์ ๊ธ์งํ ์ ์๋ค.
๋ฉ์๋์ final
ํค์๋๋ฅผ ๋ถ์ด๋ฉด, ์ค๋ฒ๋ผ์ด๋๋ฅผ ๊ธ์งํ ์ ์๋ค.
String ํด๋์ค
๋ final
๋ก ๊ตฌํ๋์ด ์์ผ๋ฏ๋ก, ์์์ด ๊ธ์ง๋์ด ์๋ค.
super()
๐ก
super()
๋ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํ๋ ํค์๋์ด๋ค.๐ก
์์ํด๋์ค๊ฐ ์์ฑ๋ ๋, ์๋์ผ๋ก ๋ถ๋ชจ ํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ํธ์ถ๋๋๋ฐ, ์ด๋ super()๊ฐ ์ฌ์ฉ๋๋ค!
class Parent {
private int num;
public Parent(int num) {
this.num = num;
}
public int getNum() {
return num;
}
}
/////////////////////////////////////////////////////
class Child extends Parent {
private String name;
public Child(int num, String name) {
super(num); // Parent ํด๋์ค์ ์์ฑ์ ํธ์ถ
this.name = name;
}
public String getName() {
return name;
}
}
// ์ฌ์ฉ ์์
Child child = new Child(10, "Alice");
System.out.println(child.getNum()); // 10
System.out.println(child.getName()); // "Alice"
์์๊ณผ ์์ฑ์ ํธ์ถ ์์
๐ก
๋ถ๋ชจ ํด๋์ค๊ฐ ๋จผ์ ์์ฑ๋ ์ดํ ์์ ํด๋์ค๊ฐ ํธ์ถ๋๋ค.
๊ธฐ๋ณธ ์์ฑ์๊ฐ ์์ ๋์ ์ค๋ฅ
๐ก
์์๋ฐ์ ํด๋์ค๋ ์ํผ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํด์ผ ํ๋ค.
์ฌ๋ฐ๋ฅธ ์์ ๋ฐฉ๋ฒ

๐ก
Is-a
์์น ๋ฐ๋ฅด๊ธฐ
โ SuperHero is a Hero (์ํผํ์ด๋ก๋ ํ์ด๋ก์ ํ ์ข
๋ฅ์ด๋ค.)
์๋ชป๋ ์์
๐ก
๊ฐ๋
์ ์ผ๋ก Is-a ๊ด๊ณ๊ฐ ๋์ง ๋ชป ํจ์๋ ์์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋ชป๋ ์์์ด๋ค.
- ํ์ค์ธ๊ณ์ ๋ชจ์ ๋ฐ์
- ๋คํ์ฑ์ ์ด์ฉ ๋ถ๊ฐ
- ๋ณต์ก์ฑ ์ฆ๊ฐ: ๋ถ๋ชจ ํด๋์ค์ ๊ธฐ๋ฅ๊ณผ ์ํ๊ฐ ์์ ํด๋์ค์์ ํ์ํ์ง ์์ ๊ฒฝ์ฐ, ์์์ ์ฌ์ฉํ๋ฉด ๋ถํ์ํ ์ฝ๋๊ฐ ์ถ๊ฐ๋์ด ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค.
- ์์กด์ฑ ์ฆ๊ฐ: ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค์ ๊ฐํ๊ฒ ์์กดํ๋ ๊ฒฝ์ฐ, ๋ถ๋ชจ ํด๋์ค์ ๋ณ๊ฒฝ์ด ์์ ํด๋์ค์ ํฐ ์ํฅ์ ๋ฏธ์น๊ฒ ๋ฉ๋๋ค. ์ด๋ ์ฝ๋ ์ ์ง๋ณด์์ ํ์ฅ์ฑ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.
- ์ ์ฐ์ฑ ๊ฐ์: ์์์ ํด๋์ค์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋ฏ๋ก, ๊ณ์ธต ๊ตฌ์กฐ์ ๋ํ ๋ณ๊ฒฝ์ด ์ด๋ ค์์ง ์ ์์ต๋๋ค. ์์ ํด๋์ค์ ๋ถ๋ชจ ํด๋์ค ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ณ ์ ์ํค๋ฏ๋ก, ์ ์ฐ์ฑ์ด ๊ฐ์ํ ์ ์์ต๋๋ค.
- ํด๋์ค ๋ก๋ฉ ๋ฌธ์ : ์๋ฐ์์๋ ํด๋์ค๋ฅผ ๋ก๋ฉํ ๋, ๋ถ๋ชจ ํด๋์ค๊ฐ ๋จผ์ ๋ก๋ฉ๋์ด์ผ ํ๋ฏ๋ก, ์์์ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
๊ตฌ์ฒดํ์ ์ผ๋ฐํ์ ๊ด๊ณ

๐ก
(Sub Class)์์ ํด๋์ค์ผ ์๋ก ๋ ๊ตฌ์ฒดํ๋๊ณ , (Super Class)๋ถ๋ชจ ํด๋์ค์ผ ์๋ก ์ถ์์ ์ธ ๊ฒ์ผ๋ก ์ผ๋ฐํ ๋๋ค.
11์ฅ ์ ๋ฆฌ
์์์ ๊ธฐ์ด
extends
๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ์กด ํด๋์ค๋ฅผ ๊ธฐ์ด๋ก ํ๋ ์๋ก์ด ํด๋์ค ์ ์ ๊ฐ๋ฅ (์์)
- ๋ถ๋ชจ ํด๋์ค์ ๋ฉค๋ฒ๋ ์๋์ ์ผ๋ก ์์ ํด๋์ค์ ์์ โ ์์ ํด๋์ค์๋ ์ถ๊ฐ ๋ ๋ถ๋ถ๋ง ๊ธฐ์ ํ๋ฉด ๋๋ค
- ๋ถ๋ชจ ํด๋์ค์ ์๋ ๋ฉ์๋๋ฅผ, ์์ ํด๋์ค์์ ์ฌ์์ฑ ํ ๊ฒฝ์ฐ ์ด๊ฒ์ ์ค๋ฒ๋ผ์ด๋ ํ๋ค๊ณ ํ๋ค
final
์ ๋ถ์ธ ํด๋์ค๋ ์์์ด ๋์ง ์๊ณ ,final
์ด ๋ถ์ ๋ฉ์๋๋ ์ค๋ฒ๋ผ์ด๋ ๋์ง ์๋๋ค
- ์ฌ๋ฐ๋ฅธ ์์์ด๋ โ
์์ ํด๋์ค is-a ๋ถ๋ชจ ํด๋์ค
"
- ์์์๋ โ์ถ์์ , ๊ตฌ์ฒด์ " ๊ด๊ณ์ ์๋ค๋ ๊ฒ์ ์ ์ํ๋ ์ญํ ๋ ์์
์ธ์คํด์ค
- ์ธ์คํด์ค๋ ๋ด๋ถ์ ๋ถ๋ชจํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง๋ ๋ค์ค๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค
- ๋ณด๋ค ์ธ์ธก์ ์ธ์คํด์ค์ ์ํ๋ ๋ฉ์๋๊ฐ ์ฐ์ ์ ์ผ๋ก ๋์ํ๋ค
- ์ธ์ธก์ ์ธ์คํด์ค์ ์ํ๋ ๋ฉ์๋๋
super
์ ์ฌ์ฉํ์ฌ ๋ด์ธก ์ธ์คํด์ค์ ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์๋ค
์์ฑ์ ๋์
- ๋ค์ค๊ตฌ์กฐ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋๋ฐ, JVM ๋ ์๋์ ์ผ๋ก ๊ฐ์ฅ ์ธ์ธก ์ธ์คํด์ค์ ์์ฑ์๋ฅผ ํธ์ถ
- ๋ชจ๋ ์์ฑ์๋, โ๋ถ๋ชจ ์ธ์คํด์ค์ ์์ฑ์"๋ฅผ ํธ์ถ ํ ํ์๊ฐ ์๋ค
- ์์ฑ์์ ์ ๋์ super() ๊ฐ ์์ผ๋ฉด, ์๋ฌต์ ์ธ โsuper();โ ๊ฐ ์ถ๊ฐ ๋จ
๐์ฐ์ต ๋ฌธ์
11-1

๐ก
2, 3, 5
11-2

๐ก
(1) ๋ถ๋ชจ : ์ ์ ๊ธฐ๊ธฐ, ์์ : ์์ดํฐ
(2) ๋ถ๋ชจ : ๊ตํต ์๋จ, ์์ : ํ๋์ฐจ
(3) ๋ถ๋ชจ : ์ฑ
, ์์ : ์์ด ์ฌ์
11-3


- ๋ ๊ณต๊ฒฉ์ ๋จ์ ํ์๋ getter setter ์ ๋ง๋ค์ด๋ ๋จ. (๋ด๋ถ์ ์ผ๋ก๋ง ์ฌ์ฉ)
package Exam;
public class Kinoko {
int hp = 50;
private char suffix;
public Kinoko(char suffix) {
this.suffix = suffix;
}
void attack(Hero hero) {
System.out.println("ํค๋
ธ์ฝ " + this.suffix + " ์ ๊ณต๊ฒฉ");
System.out.println("10์ ๋ฐ๋ฏธ์ง");
hero.setHp(hero.getHp() - 10);
}
}
package Exam;
public class PoisonKinoko extends Kinoko{
private int poisonCount;
public PoisonKinoko(char suffix) {
super(suffix);
poisonCount = 5;
}
@Override
void attack(Hero hero) {
super.attack(hero);
if(poisonCount != 0) {
System.out.println("์ถ๊ฐ๋ก, ๋
ํฌ์๋ฅผ ์ดํฌํ๋ค!");
int damage = (int) (hero.getHp() * 0.2);
hero.setHp(hero.getHp() - damage);
System.out.println(damage + "ํฌ์ธํธ์ ๋ฐ๋ฏธ์ง");
poisonCount--;
} else {
System.out.println("๋
์ ์ฐ์ง ๋ชปํ๋ค.");
}
}
}
package Exam;
public class Hero {
private String name;
private int hp;
public Hero(String name, int hp) {
this.name = name;
this.hp = hp;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public String getName() {
return name;
}
}
package Exam;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Kinoko kinoko = new Kinoko('A');
PoisonKinoko poisonKinoko = new PoisonKinoko('B');
Hero hero = new Hero("์ฉ์ฌ1", 100);
poisonKinoko.attack(hero);
System.out.println(hero.getName() + "์ HP: " + hero.getHp());
System.out.println("-------------------------------------------");
poisonKinoko.attack(hero);
System.out.println(hero.getName() + "์ HP: " + hero.getHp());
System.out.println("-------------------------------------------");
poisonKinoko.attack(hero);
System.out.println(hero.getName() + "์ HP: " + hero.getHp());
System.out.println("-------------------------------------------");
poisonKinoko.attack(hero);
System.out.println(hero.getName() + "์ HP: " + hero.getHp());
System.out.println("-------------------------------------------");
poisonKinoko.attack(hero);
System.out.println(hero.getName() + "์ HP: " + hero.getHp());
System.out.println("-------------------------------------------");
poisonKinoko.attack(hero);
System.out.println(hero.getName() + "์ HP: " + hero.getHp());
}
}
๐ก
๋ณ์ ์ด๊ธฐํ ๊ด๋ จ๋ ์ฝ๋๋ ์์ฑ์ ์ฝ๋์ ์ ๋๊ฒ ์ข๋ค!
๐ก
์ฝ๋์ ๊ฐ๋
์ฑ์ ์ํด Java์ Annotation @override ๋ช
์๋ฅผ ์ํ์!
Uploaded by N2T