π§© νμ΅ λ¨μ : κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° II (OOP)
π νμ΅ λμ : <Javaμ μ μ 3ν>(λ¨κΆ μ± μ )
β μ€λ΅ μ 리 μλ£()
[7-1] μ―λ€μΉ΄λ 20μ₯μ ν¬ν¨νλ μ―λ€μΉ΄λ ν λ²(SutdaDeckν΄λμ€)μ μ μν κ²μ΄λ€. μ―λ€μΉ΄λ 20μ₯μ λ΄λ SutdaCardλ°°μ΄μ μ΄κΈ°ννμμ€. λ¨, μ―λ€μΉ΄λλ 1λΆν° 10κΉμ§μ μ«μκ° μ ν μΉ΄λκ° ν μμ© μκ³ , μ«μκ° 1, 3, 8μΈ κ²½μ°μλ λ μ€μ ν μ₯μ κ΄(Kwang)μ΄μ΄μΌ νλ€. μ¦, SutdaCardμ μΈμ€ν΄μ€λ³μ isKwangμ κ°μ΄ trueμ΄μ΄μΌ νλ€. β
[7-2] λ¬Έμ 7-1μ SutdaDeckν΄λμ€μ λ€μμ μ μλ μλ‘μ΄ λ©μλλ₯Ό μΆκ°νκ³ ν μ€νΈ νμμ€. β
[7-3] μ€λ²λΌμ΄λ©μ μ μμ νμμ±μ λν΄μ μ€λͺ νμμ€. β
μ€λ²λΌμ΄λ©(overriding)μ μμ κ΄κ³μ μλ μμν΄λμ€κ° λΆλͺ¨ν΄λμ€λ‘λΆν° λ¬Όλ € λ°μ λ©€λ²λ₯Ό μ μκ² λ§κ² μ¬μ μν΄ μ¬μ©νλ κ²μ λ§νλ€. @OverrideλΌλ μ΄λ Έν μ΄μ μ μμ±ν΄ μλ§μ μ€λ²λΌμ΄λ©μ΄ λ§λμ§ νμΈν μ μλ€. μ€λ²λΌμ΄λ©μ ν΅νλ©΄ νμλ‘ κ°μΆ°μΌ νλ κΈ°λ₯μ νμ€νμν¬ μ μλ€. μμν΄λμ€λ‘ νμ¬κΈ λ°λμ μ¬μ μν κ²μ κ°μ ν νλ κ²μ΄λ€.
μ€λ²λΌμ΄λ© 쑰건μ A. λΆλͺ¨ν΄λμ€μ κ°μ μ΄λ¦, B. κ°μ λ§€κ°λ³μ, C. κ°μ 리ν΄νμ μ΄μ΄μΌ νλ€.
[7-4] λ€μ μ€ μ€λ²λΌμ΄λ©μ 쑰건μΌλ‘ μ³μ§ μμ κ²μ? (λͺ¨λ κ³ λ₯΄μμ€) β
a. μ‘°μμ λ©μλμ μ΄λ¦μ΄ κ°μμΌ νλ€.
b. λ§€κ°λ³μμ μμ νμ
μ΄ λͺ¨λ κ°μμΌ νλ€.
c. μ κ·Ό μ μ΄μλ μ‘°μμ λ©μλλ³΄λ€ μ’μ λ²μλ‘λ§ λ³κ²½ν μ μλ€. λ λμ λ²μλ‘ μμ±ν΄μΌ νλ€.
d. μ‘°μμ λ©μλλ³΄λ€ λ λ§μ μμ μμΈλ₯Ό μ μΈν μ μλ€. λ ꡬ체μ μΈ μμΈ... μμΈλ λΆλͺ¨ν΄λμ€μ λ©μλλ³΄λ€ λ§μ΄ μ μΈν μ μλ€!
[7-5] λ€μμ μ½λλ μ»΄νμΌνλ©΄ μλ¬κ° λ°μνλ€. κ·Έ μ΄μ λ₯Ό μ€λͺ νκ³ μλ¬λ₯Ό μμ νκΈ° μν΄μλ μ½λλ₯Ό μ΄λ»κ² λ°κΎΈμ΄μΌ νλκ°? β
class Product {
γγint price; // μ νμ κ°κ²©
γγint bonusPoint; // μ νꡬ맀 μ μ 곡νλ 보λμ€μ μ
γγProduct() {} κΈ°λ³Έμμ±μ
γγProduct(int price) {
γγγγthis.price = price;
γγγγbonusPoint =(int)(price/10.0);
γγ}
}
class Tv extends Product {
γγTv() {}
γγpublic String toString() {
γγγγreturn "Tv";
γγ}
}
class Exercise7_5 {
γγpublic static void main(String[] args) {
γγγγTv t = new Tv();
γγ}
}
[7-6] μμ ν΄λμ€μ μμ±μμμ μ‘°μ ν΄λμ€μ μμ±μλ₯Ό νΈμΆν΄μΌ νλ μ΄μ λ 무μμΈκ°? β
λΆλͺ¨ν΄λμ€μμ μ μν΄λμ νλκ°μ μ¬μ©νκΈ° μν΄μμμ λ°μ μ‘°μμ μΈμ€ν΄μ€ λ³μλ€μ μμμ μμ±μμμ μ§μ μ΄κΈ°νν기보λ€λ μ‘°μμ μμ±μλ₯Ό νΈμΆν¨μΌλ‘μ¨ μ΄κΈ°ννλ κ²μ΄ λ°λμ§νλ€!
[7-7] λ€μ μ½λμ μ€ννμ λ νΈμΆλλ μμ±μμ μμμ μ€νκ²°κ³Όλ₯Ό μ μΌμμ€. β
main λ©μλμμ νΈμΆν μλλ‘ this(1000), this.x = x, x=c.getX()
[7-8] λ€μ μ€ μ κ·Όμ μ΄μλ₯Ό μ κ·Όλ²μκ° λμ κ²μμ μ’μ κ²μ μμΌλ‘ λ°λ₯΄κ² λμ΄ν κ²μ? β
public > protected > (default) > private
[7-9] λ€μ μ€ μ μ΄μ finalμ λΆμΌ μ μλ λμκ³Ό λΆμμ λ κ·Έ μλ―Έλ₯Ό μ μ κ²μ΄λ€. μ³μ§ μμ κ²μ? (λͺ¨λ κ³ λ₯΄μμ€) β
a. μ§μλ³μ - κ°μ λ³κ²½ν μ μλ€.
b. ν΄λμ€ - μμμ ν΅ν΄ ν΄λμ€μ μλ‘μ΄ λ©€λ²λ₯Ό μΆκ°ν μ μλ€.
c. λ©μλ - μ€λ²λ‘λ©μ ν μ μλ€. μ€λ²λΌμ΄λ©μ ν μ μλ€!
d. λ©€λ²λ³μ - κ°μ λ³κ²½ν μ μλ€.
final | μλ―Έ |
ν΄λμ€ | λ³κ²½λ μ μλ ν΄λμ€, νμ₯λ μ μλ ν΄λμ€ final ν΄λμ€λ λ€λ₯Έ ν΄λμ€μ μ‘°μμ΄ λ μ μλ€! |
λ©μλ | λ³κ²½λ μ μλ λ©μλ final λ©μλλ μ€λ²λΌμ΄λ© ν΅ν΄ μ¬μ μ λ μ μλ€! |
λ©€λ²λ³μ | λ³μ μμ finalμ΄ λΆμΌλ©΄, κ° λ³κ²½ λΆκ°ν μμκ° λλ€! |
μ§μλ³μ |
[7-10] MyTv2ν΄λμ€μ λ©€λ²λ³μ isPowerOn, channel, volumeμ ν΄λμ€ μΈλΆμμ μ κ·Όν μ μλλ‘ μ μ΄μλ₯Ό λΆμ΄κ³ λμ μ΄ λ©€λ²λ³μλ€μ κ°μ μ΄λμλ μ½κ³ λ³κ²½ν μ μλλ‘ getterμ setterλ©μλλ₯Ό μΆκ°νλΌ. β
λ§€κ°λ³μ μλ λ©μλλ₯Ό μ¬μ©ν λλ μμ μ μ λ겨λ°μ κ°μ μ ν¨μ± κ²μ¬κ° μΉλ¬μ ΈμΌ νλ€! set λ©μλλ₯Ό μμ±ν λ ifλ¬ΈμΌλ‘ 쑰건μ λ¬μλλ μ΅κ΄μ λ§λ€μ΄κ°μ΄ μ’κ² λ€.
CH : 10
VOL : 20
[7-11] λ¬Έμ 7-10μμ μμ±ν MyTv2ν΄λμ€μ μ΄μ μ±λ(previous channel)λ‘ μ΄λνλ κΈ°λ₯μ λ©μλλ₯Ό μΆκ°ν΄μ μ€νκ²°κ³Όμ κ°μ κ²°κ³Όλ₯Ό μ»λλ‘ νμμ€. β
CH : 10
CH : 20
CH : 10
CH : 20
package ch07_object_oriented_programming;
class MyTv {
private boolean isPowerOn;
private int channel;
private int volume;
private int prevChannel;
final int MAX_VOLUME = 100;
final int MIN_VOLUME = 0;
final int MAX_CHANNEL = 100;
final int MIN_CHANNEL = 1;
public MyTv() {}
public MyTv(boolean isPowerOn, int channel, int volume) {
super();
this.isPowerOn = isPowerOn;
this.channel = channel;
this.volume = volume;
}
public boolean isPowerOn() {
return isPowerOn;
}
public void setPowerOn(boolean isPowerOn) {
this.isPowerOn = isPowerOn;
}
public int getChannel() {
return channel;
}
public void setChannel(int channel) {
if(channel > MAX_CHANNEL || channel < MIN_CHANNEL) {
return;
}
prevChannel = this.channel;
this.channel = channel;
}
public int getVolume() {
return volume;
}
public void setVolume(int volume) {
if(volume > MAX_VOLUME || volume < MIN_VOLUME) {
return;
}
this.volume = volume;
}
public void gotoPrevChannel() {
setChannel(prevChannel);
}
}
public class Ex10 {
public static void main(String[] args) {
MyTv t = new MyTv();
t.setChannel(10);
System.out.println("CH : " + t.getChannel());
t.setVolume(20);
System.out.println("VOL : " + t.getVolume());
t.setChannel(10);
System.out.println("CH : " + t.getChannel());
t.setChannel(20);
System.out.println("CH : " + t.getChannel());
t.gotoPrevChannel();
System.out.println("CH : " + t.getChannel());
t.gotoPrevChannel();
System.out.println("CH : " + t.getChannel());
}
}
[7-12] λ€μ μ€ μ κ·Ό μ μ΄μμ λν μ€λͺ μΌλ‘ μ³μ§ μμ κ²μ? (λͺ¨λ κ³ λ₯΄μμ€) β
public κ°μ ν΄λμ€ λ΄/κ°μ ν¨ν€μ§ λ΄/μμ ν΄λμ€ λ΄/μ 체
protected κ°μ ν΄λμ€ λ΄/κ°μ ν¨ν€μ§ λ΄/μμ ν΄λμ€ λ΄
(default) κ°μ ν΄λμ€ λ΄/κ°μ ν¨ν€μ§ λ΄
private κ°μ ν΄λμ€ λ΄
a. publicμ μ κ·Όμ νμ΄ μ ν μλ μ κ·Ό μ μ΄μμ΄λ€.
b. (default)κ° λΆμΌλ©΄, κ°μ ν¨ν€μ§ λ΄μμλ§ μ κ·Όμ΄ κ°λ₯νλ€.
c. μ§μλ³μμλ μ κ·Ό μ μ΄μλ₯Ό μ¬μ©ν μ μλ€.
d. protectedκ° λΆμΌλ©΄, κ°μ ν¨ν€μ§ λ΄μμλ μ κ·Όμ΄ κ°λ₯νλ€.
e. protectedκ° λΆμΌλ©΄, λ€λ₯Έ ν¨ν€μ§μ μμ ν΄λμ€μμ μ κ·Όμ΄ κ°λ₯νλ€.
[7-13] Mathν΄λμ€μ μμ±μλ μ κ·Ό μ μ΄μκ° privateμ΄λ€. κ·Έ μ΄μ λ 무μμΈκ°? ββ
νλλ‘μ μ§μ μ κ·Όμ μ ννκ³ round(), random(), sqrt() λ±λ± κ°μ μ κ·Όμ κ°μ νκΈ° λλ¬Έμ΄λ€.
public final class Math {}
- Mathν΄λμ€λ λͺ κ°μ μμμ staticλ©μλλ§μΌλ‘ ꡬμ±λμ΄ μκΈ° λλ¬Έμ μΈμ€ν΄μ€λ₯Ό μμ±ν νμκ° μλ€. κ·Έλμ μΈλΆλ‘λΆν°μ λΆνμν μ κ·Όμ λ§κΈ° μν΄ μμ±μμ μ κ·Ό μ μ΄μλ₯Ό privateμΌλ‘ μ§μ νμλ€.
- Mathν΄λμ€μ λͺ¨λ λ©μλκ° staticλ©μλμ΄κ³ μΈμ€ν΄μ€λ³μκ° μ‘΄μ¬νμ§ μκΈ° λλ¬Έμ κ°μ²΄λ₯Ό μμ±ν νμκ° μκΈ° λλ¬Έμ΄λ€.
[7-14] λ¬Έμ 7-1μ λμ€λ μ―λ€μΉ΄λμ μ«μμ μ’ λ₯(isKwang)λ μ¬μ€ νλ² κ°μ΄ μ§μ λλ©΄ λ³κ²½λμ΄μλ μ λλ κ°μ΄λ€. μΉ΄λμ μ«μκ° νλ² μλͺ» λ°λλ©΄ λκ°μ μΉ΄λκ° λ μ₯μ΄ λ μ λ μκΈ° λλ¬Έμ΄λ€. μ΄λ¬ν λ¬Έμ μ μ΄ λ°μνμ§ μλλ‘ μλμ SutdaCardλ₯Ό μμ νμμ€. β
SutdaCard ν΄λμ€μ μ μΈλ μΈμ€ν΄μ€ λ³μλ€μ final ν€μλλ₯Ό λΆμ¬ μμλ‘ λ§λ λ€. final int num; final boolean isKwang;
[7-15] ν΄λμ€κ° λ€μκ³Ό κ°μ΄ μ μλμ΄ μμ λ, νλ³νμ μ¬λ°λ₯΄κ² νμ§ μμ κ²μ? (λͺ¨λ κ³ λ₯΄μμ€.) β
class Unit {}
class AirUnit extends Unit {}
class GroundUnit extends Unit {}
class Tank extends GroundUnit {}
class AirCraft extends AirUnit {}
Unit u = new GroundUnit();
Tank t = new Tank();
AirCraft ac = new AirCraft();
a. u = (Unit)ac; μ
μΊμ€ν
b. u = ac; μ
μΊμ€ν
μλ΅ κ°λ₯
c. GroundUnit gu = (GroundUnit)u; μΈμ€ν΄μ€ νμ
μ΄ μκΈ°μμ ... OK!!!
d. AirUnit au = ac; μ
μΊμ€ν
e. t = (Tank)u; Tank t = new GroundUnit(); Child c = new Parent();μ΄λ―λ‘ νμ© X
f. GroundUnit gu = t; OK
[7-16] λ€μ μ€ μ°μ°κ²°κ³Όκ° trueκ° μλ κ²μ? (λͺ¨λ κ³ λ₯΄μμ€) β
instanceofμ°μ°μλ μ€μ μΈμ€ν΄μ€μ λͺ¨λ μ‘°μμ΄λ ꡬνν μΈν°νμ΄μ€μ λν΄ trueλ₯Ό λ°ννλ€.
class Car {}
class FireEngine extends Car implements Movable {}
class Ambulance extends Car {}
FireEngine fe = new FireEngine();
a. fe instanceof FireEngine OK
b. fe instanceof Movable
c. fe instanceof Object OK
d. fe instanceof Car OK e. fe instanceof Ambulance
[7-17] μλ μΈ κ°μ ν΄λμ€λ‘λΆν° 곡ν΅λΆλΆμ λ½μμ Unitμ΄λΌλ ν΄λμ€λ₯Ό λ§λ€κ³ , μ΄ ν΄λμ€λ₯Ό μμλ°λλ‘ μ½λλ₯Ό λ³κ²½νμμ€. ββ
ν΄λμ€λ§λ€ μ΄λ λ°©λ²μ΄ λ€λ₯΄λ―λ‘ move()λ μΆμλ©μλλ‘ μ΄λ€.
abstract class Unit {
int x, y;
abstract void move(int x, int y) { /* μ§μ λ μμΉλ‘ μ΄λ */ }
void stop() { /* νμ¬ μμΉμ μ μ§ */ }
}
class Marine extends Unit {
void stimPack() { /* μ€νν©μ μ¬μ©νλ€.*/}
}
class Tank extends Unit {
void changeMode() { /* 곡격λͺ¨λλ₯Ό λ³ννλ€. */}
}
class Dropship extends Unit {
void load() { /* μ νλ λμμ νμ΄λ€.*/ }
void unload() { /* μ νλ λμμ λ΄λ¦°λ€.*/ }
}
[7-18] λ€μκ³Ό κ°μ μ€νκ²°κ³Όλ₯Ό μ»λλ‘ μ½λλ₯Ό μμ±νμμ€. β
Robot μΈμ€ν΄μ€ λλ Robotμ μμ μΈμ€ν΄μ€ λꡬλ μ¬ μ μλλ‘ λ§€κ°λ³μλ‘ Robot r μ μΈνλ€.
classκ° κ΅¬λΆμ μ£Όμνμ. λΈλ {}μ΄ μ λ«νμ§ μμΌλ©΄ κ³μ μλ¬ λμμ΄λ€.
package ch07_object_oriented_programming;
public class Ex18 {
public static void action(Robot r) {
if(r instanceof DancingRobot) {
DancingRobot dr = (DancingRobot)r;
dr.dance();
} else if(r instanceof SingingRobot) {
SingingRobot sr = (SingingRobot)r;
sr.sing();
} else if(r instanceof DrawingRobot) {
DrawingRobot dr = (DrawingRobot)r;
dr.draw();
}
}
public static void main(String[] args) {
Robot[] arr = { new DancingRobot(), new SingingRobot(), new DrawingRobot() };
for(int i=0; i < arr.length; i++) {
action(arr[i]);
}
}
}
class Robot {}
class DancingRobot extends Robot {
void dance() {
System.out.println("μΆ€μ μΆ₯λλ€.");
}
}
class SingingRobot extends Robot {
void sing() {
System.out.println("λ
Έλλ₯Ό ν©λλ€.");
}
}
class DrawingRobot extends Robot {
void draw() {
System.out.println("κ·Έλ¦Όμ 그립λλ€.");
}
}
[7-19] λ€μμ 물건μ ꡬμ νλ μ¬λμ μ μν Buyerν΄λμ€μ΄λ€. μ΄ ν΄λμ€λ λ©€λ²λ³μλ‘ λ(money)κ³Ό μ₯λ°κ΅¬λ(cart)λ₯Ό κ°μ§κ³ μλ€. μ νμ ꡬμ νλ κΈ°λ₯μ buyλ©μλμ μ₯λ°κ΅¬λμ ꡬμ ν 물건μ μΆκ°νλ addλ©μλ, ꡬμ ν 물건μ λͺ©λ‘κ³Ό μ¬μ©κΈμ‘, κ·Έλ¦¬κ³ λ¨μ κΈμ‘μ μΆλ ₯νλ summaryλ©μλλ₯Ό μμ±νμμ€. β
add() λ©μλμμ μ¦κ°μν€λ iλ itemμ΄λ€. indexμ μ°©κ°νμ§ λ§μ.
λ°°μ΄ λ³΅μ¬ν λ μμ μ΅μ λ°λ³΅λ¬Έ λ¨Όμ μ°Ύλ μ΅κ΄μ΄ μ겨λ²λ¦° κ² κ°λ€. κΉμ λ³΅μ¬ λ°©λ²μ λν΄ ν λ² λ μ 리ν νμκ° μλ€: A. λ°λ³΅λ¬Έ, B. clone(), C. System.arraycopy(), D. Arrays.copyOf()...
μμ‘μ΄ λΆμ‘±νμ¬ Computerμ(λ₯Ό) μ΄ μ μμ΅λλ€.
ꡬμ ν 물건 : Tv Computer Tv Audio Computer Computer
μ¬μ©ν κΈμ‘ : 850
λ¨μ κΈμ‘ : 150
package ch07_object_oriented_programming;
public class Ex19 {
public static void main(String[] args) {
Buyer b = new Buyer();
b.buy(new Tv());
b.buy(new Computer());
b.buy(new Tv());
b.buy(new Audio());
b.buy(new Computer());
b.buy(new Computer());
b.buy(new Computer());
b.summary();
}
}
class Buyer {
int money = 1000;
Product[] cart = new Product[3];
int i = 0;
void buy(Product p) {
/* κ°μ§ λκ³Ό 물건 κ°μ λΉκ΅νμ¬ κ°μ§ λμ΄ μ μΌλ©΄ λ©μλ μ’
λ£ */
if(p.price > money) {
System.out.println("μμ‘μ΄ λΆμ‘±νμ¬ " + p +"μ(λ₯Ό) μ΄ μ μμ΅λλ€.");
return;
}
/* κ°μ§ λμ΄ μΆ©λΆνλ©΄ 물건 κ°μμ κ°μ§ λ μ°¨κ° */
money -= p.price;
/* μΉ΄νΈμ 물건 μΆκ° */
add(p);
}
void add(Product p) {
/* iμ κ°μ΄ μΉ΄λ ν¬κΈ°μ κ°κ±°λ ν¬λ©΄ */
if(i >= cart.length) {
/* 2λ°° ν° μλ‘μ΄ λ°°μ΄ μμ±ν΄ λ³΅μ¬ */
Product[] otherCart = new Product[cart.length * 2];
System.arraycopy(cart, 0, otherCart, 0, cart.length);
// for(int j=0; j < cart.length; j++) {
// otherCart[j] = cart[j];
// }
/* μλ‘μ΄ μΉ΄λμ κΈ°μ‘΄ μΉ΄λκ° μ€μμΉ */
cart = otherCart;
}
/* 물건μ μΉ΄νΈμ μ μ₯ */
/* i κ° 1 μ¦κ° */
cart[i++] = p;
// i++;
}
void summary() {
String item = "";
int sum = 0;
for(int i=0; i < cart.length; i++ ) {
if(cart[i]==null) {
break;
}
/* μΉ΄νΈ λͺ©λ‘ μΆλ ₯ */
item += cart[i] + " ";
/* κ°κ²© ν©μ° μΆλ ₯ */
sum += cart[i].price;
}
System.out.println("ꡬμ
ν 물건 : " + item);
System.out.println("μ¬μ©ν κΈμ‘ : " + sum);
/* λ¨μ κΈμ‘ μΆλ ₯ */
System.out.println("λ¨μ κΈμ‘ : " + money);
}
}
class Product {
int price;
Product(int price) {
this.price = price;
}
}
class Tv extends Product {
Tv() {
super(100);
}
@Override
public String toString() {
return "Tv";
}
}
class Computer extends Product {
Computer() {
super(200);
}
@Override
public String toString() {
return "Computer";
}
}
class Audio extends Product {
Audio() {
super(50);
}
@Override
public String toString() {
return "Audio";
}
}
[7-20] λ€μμ μ½λλ₯Ό μ€νν κ²°κ³Όλ₯Ό μ μΌμμ€. ββ
μ£Όμν κ²μ μ°Έμ‘°λ³μ νμ μ κ°κ° λΆλͺ¨μ μμμ΄μ§λ§, μΈμ€ν΄μ€ νμ μ λͺ¨λ μμ νμ μ΄λ€.
λ©μλλ μ°Έμ‘°λ³μ νμ μ κ΄κ³ μμ΄ νμ μ€μ μΈμ€ν΄μ€μ λ©μλ(==μ€λ²λΌμ΄λ© λ λ©μλ)κ° νΈμΆλλ€.
νμ§λ§ λ©€λ²λ³μλ κ²°κ΅ μ°Έμ‘°λ³μ νμ μ λ°λΌκ°κ² λ§λ ¨μ΄λ€. κ²λ€κ° λΆλͺ¨ν΄λμ€μ μμν΄λμ€ λ λ€ int xλΌλ 곡ν΅λ λ©€λ²λ₯Ό μ μνκ³ μκΈ°λ νλ€. λ°λ‘ μ¬κΈ°μ λΆλͺ¨ νμ μ pμ μμ νμ μ c μ°Έμ‘°μ°μκ° μ°¨μ΄μ μ΄ λλ¬λλ€. νΈμΆ λμμ΄ λ μΈμ€ν΄μ€ λ³μλ μ°Έμ‘°λ³μ νμ μ λ°λΌ λ¬λΌμ§λ κ²μ΄λ€.
p.x = 100
Child Method *λμ λ°μΈλ©
c.x = 200
Child Method
class Exercise7_20 {
γγpublic static void main(String[] args) {
γγγγParent p = new Child();
γγγγChild c = new Child();
γγγγSystem.out.println("p.x = " + p.x);
γγγγp.method();
γγγγSystem.out.println("c.x = " + c.x);
γγγγc.method();
γγ}
}
class Parent {
γγint x = 100;
γγvoid method() {
γγγγSystem.out.println("Parent Method");
γγ}
}
class Child extends Parent {
γγint x = 200;
γγvoid method() {
γγγγSystem.out.println("Child Method");
γγ}
}
[7-21] λ€μκ³Ό κ°μ΄ attackλ©μλκ° μ μλμ΄ μμ λ, μ΄ λ©μλμ λ§€κ°λ³μλ‘ κ°λ₯ν κ² λ κ°μ§λ₯Ό μ μΌμμ€. β
λ§€κ°λ³μ λ€νμ±μ λν΄ λ¬»λ λ¬Έμ μ΄λ€.
Movable μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€ λλ μμ μΈμ€ν΄μ€, null
interface Movable {
γγvoid move(int x, int y);
}
void attack(Movable f) {
γγ/* λ΄μ© μλ΅ */
}
[7-22] μλλ λνμ μ μν Shapeν΄λμ€μ΄λ€. μ΄ ν΄λμ€λ₯Ό μ‘°μμΌλ‘ νλ Circleν΄λμ€μ Rectangleν΄λμ€λ₯Ό μμ±νμμ€. μ΄ λ, μμ±μλ κ° ν΄λμ€μ λ§κ² μ μ ν μΆκ°ν΄μΌ νλ€: Circle, Rectangle, isSquare ββ
[7-23] λ¬Έμ 7-22μμ μ μν ν΄λμ€λ€μ λ©΄μ μ ꡬνλ λ©μλλ₯Ό μμ±νκ³ ν μ€νΈ νμμ€: sumArea ββ
package ch07_object_oriented_programming;
abstract class Shape {
Point p;
Shape() {
this(new Point(0, 0));
}
Shape(Point p) {
this.p = p;
}
abstract double calcArea();
Point getPosition() {
return p;
}
void setPosition(Point p) {
this.p = p;
}
}
class Point {
int x;
int y;
Point() {
this(0, 0);
}
Point(int x, int y) {
this.x = x;
this.y = y;
}
public String toString() {
return "[" + x + ", " + y + "]";
}
}
class Circle extends Shape {
double r; //λ°μ§λ¦
Circle(double r) {
this(new Point(0, 0), r);
}
Circle(Point p, double r) {
super(p);
this.r = r;
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
@Override
double calcArea() {
return Math.PI * r * r;
}
}
class Rectangle extends Shape {
double width;
double height;
Rectangle(double width, double height) {
this(new Point(0, 0), width, height);
}
Rectangle(Point p, double width, double height) {
super(p);
this.width = width;
this.height = height;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
@Override
double calcArea() {
return width * height;
}
boolean isSquare() {
return width*height != 0 && width == height;
// if(width == height) {
// return true;
// } else {
// return false;
// }
}
}
public class Ex23 {
static double sumArea(Shape[] arr) {
double result = 0.0;
for(int i=0; i < arr.length; i++) {
result += arr[i].calcArea();
}
return result;
}
public static void main(String[] args) {
Shape[] arr = { new Circle(5.0), new Rectangle(3, 4), new Circle(1) };
System.out.println("λ©΄μ μ ν© : " + sumArea(arr));
}
}
[7-24] λ€μ μ€ μΈν°νμ΄μ€μ μ₯μ μ΄ μλ κ²μ? β
β μΈν°νμ΄μ€ μ¬μ© μ΄μ
1. κ°λ°μκ°μ λ¨μΆμν¬ μ μλ€.
μΌλ¨ μΈν°νμ΄μ€κ° μμ±λλ©΄, μ΄λ₯Ό μ¬μ©ν΄μ νλ‘κ·Έλ¨μ μμ±νλ κ²μ΄ κ°λ₯νλ€. λ©μλλ₯Ό νΈμΆνλ μͺ½μμλ λ©μλμ λ΄μ©μ κ΄κ³μμ΄ μ μΈλΆλ§ μλ©΄ λκΈ° λλ¬Έμ΄λ€. κ·Έλ¦¬κ³ λμμ λ€λ₯Έ ν μͺ½μμλ μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€λ₯Ό μμ±νλλ‘ νμ¬, μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€κ° μμ±λ λκΉμ§ κΈ°λ€λ¦¬μ§ μκ³ λ μμͺ½μμ λμμ κ°λ°μ μ§νν μ μλ€.
2. νμ€νκ° κ°λ₯νλ€.
νλ‘μ νΈμ μ¬μ©λλ κΈ°λ³Έ νμ μΈν°νμ΄μ€λ‘ μμ±ν λ€μ, κ°λ°μλ€μκ² μΈν°νμ΄μ€λ₯Ό ꡬννμ¬ νλ‘κ·Έλ¨μ μμ±νλλ‘ ν¨μΌλ‘μ¨ λ³΄λ€ μΌκ΄λκ³ μ ννλ νλ‘κ·Έλ¨μ κ°λ°μ΄ κ°λ₯νλ€.
3. μλ‘ κ΄κ³μλ ν΄λμ€λ€μκ² κ΄κ³λ₯Ό λ§Ίμ΄ μ€ μ μλ€.
μλ‘ μμκ΄κ³μ μμ§λ μκ³ , κ°μ μ‘°μν΄λμ€λ₯Ό κ°μ§κ³ μμ§ μμ μλ‘ μλ¬΄λ° κ΄κ³λ μλ ν΄λμ€λ€μκ² νλμ μΈν°νμ΄μ€λ₯Ό 곡ν΅μ μΌλ‘ ꡬννλλ‘ ν¨μΌλ‘μ¨ κ΄κ³λ₯Ό λ§Ίμ΄ μ€ μ μλ€.
4. λ 립μ μΈ νλ‘κ·Έλλ°μ΄ κ°λ₯νλ€.
μΈν°νμ΄μ€λ₯Ό μ΄μ©νλ©΄ ν΄λμ€μ μ μΈκ³Ό ꡬνμ λΆλ¦¬μν¬ μ μκΈ° λλ¬Έμ, μ€μ ꡬνμ λ 립μ μΈ νλ‘κ·Έλ¨μ μμ±νλ κ²μ΄ κ°λ₯νλ€. ν΄λμ€μ ν΄λμ€κ°μ μ§μ μ μΈ κ΄κ³λ₯Ό μΈν°νμ΄μ€λ₯Ό μ΄μ©ν΄μ κ°μ μ μΈ κ΄κ³λ‘ λ³κ²½νλ©΄, ν ν΄λμ€μ λ³κ²½μ΄ κ΄λ ¨λ λ€λ₯Έ ν΄λμ€μ μν₯μ λ―ΈμΉμ§ μλ λ 립μ μΈ νλ‘κ·Έλλ°μ΄ κ°λ₯νλ€.
a. νμ€νλ₯Ό κ°λ₯νκ² ν΄μ€λ€.
b. μλ‘ κ΄κ³μλ ν΄λμ€λ€μκ² κ΄κ³λ₯Ό λ§Ίμ΄ μ€ μ μλ€.
c. λ
립μ μΈ νλ‘κ·Έλλ°μ΄ κ°λ₯νλ€.
d. λ€μ€μμμ κ°λ₯νκ² ν΄μ€λ€.
e. ν¨ν€μ§κ°μ μ°κ²°μ λμμ€λ€.
[7-25] Outerν΄λμ€μ λ΄λΆ ν΄λμ€ Innerμ λ©€λ²λ³μ ivμ κ°μ μΆλ ₯νμμ€. β
26λ²κ³Ό μ°λ¬μ μΈμ€ν΄μ€ ν΄λμ€μΌ λ-static ν΄λμ€μΌ λ μ°¨μ΄μ μ μ§μ΄λ³Ό μ μλ€.
100
package ch07_object_oriented_programming;
class OuterA { //μΈλΆ ν΄λμ€
class InnerA { //λ΄λΆ ν΄λμ€(μΈμ€ν΄μ€ ν΄λμ€)
int iv=100;
}
}
public class Ex25 {
public static void main(String[] args) {
/* μΈμ€ν΄μ€ μμ± */
OuterA o = new OuterA();
OuterA.InnerA oi = o.new InnerA();
System.out.println(oi.iv);
}
}
[7-26] Outerν΄λμ€μ λ΄λΆ ν΄λμ€ Innerμ λ©€λ²λ³μ ivμ κ°μ μΆλ ₯νμμ€. β
200
package ch07_object_oriented_programming;
class OuterB { //μΈλΆ ν΄λμ€
static class InnerB { //λ΄λΆ ν΄λμ€(static ν΄λμ€)
int iv = 200;
}
}
public class Ex26 {
public static void main(String[] args) {
/* μΈμ€ν΄μ€ μμ± λΆνμ */
OuterB.InnerB oi = new OuterB.InnerB();
System.out.println(oi.iv);
}
}
[7-27] λ€μκ³Ό κ°μ μ€νκ²°κ³Όλ₯Ό μ»λλ‘ μ½λλ₯Ό μμ±νμμ€. β
λ΄λΆ ν΄λμ€κ° μΈλΆ ν΄λμ€μ μΈμ€ν΄μ€ λ³μμ μ κ·Όν λλ μΈλΆν΄λμ€μ΄λ¦.this.λ³μμ΄λ¦ μΌλ‘ μ κ·Όν μ μλ€.
30
20
10
package ch07_object_oriented_programming;
class Outer {
int value = 10;
class Inner {
int value = 20;
void methodA() {
int value = 30;
System.out.println(value);
System.out.println(this.value);
// Outer o = new Outer();
// System.out.println(o.value);
System.out.println(Outer.this.value);
}
}
}
public class Ex27 {
public static void main(String[] args) {
Outer o = new Outer();
Outer.Inner inner = o.new Inner();
inner.methodA();
}
}
[7-28] μλμ EventHandlerλ₯Ό μ΅λͺ ν΄λμ€(anonymous class)λ‘ λ³κ²½νμμ€.
[7-29] μ§μ ν΄λμ€μμ μΈλΆ ν΄λμ€μ μΈμ€ν΄μ€ λ©€λ²μ staticλ©€λ²μ λͺ¨λ μ κ·Όν μ μμ§λ§, μ§μλ³μλ finalμ΄ λΆμ μμλ§ μ κ·Όν μ μλ μ΄μ 무μμΈκ°?
'Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[μλ°μ μ μ] Ch 8. μμΈμ²λ¦¬ μ°μ΅λ¬Έμ νμ΄ (0) | 2022.01.22 |
---|---|
[μλ°μ μ μ] Ch 7. OOP II μμ μμ© νμ΅ (0) | 2022.01.22 |
[JAVA] 14-2. μ μΆλ ₯ | 보쑰 μ€νΈλ¦Ό | μ§λ ¬ν (0) | 2022.01.14 |
[JAVA/μμ κ³Όμ practice] HashMap λ°μ΄ν° κ΄λ¦¬ νλ‘κ·Έλ¨ λ§λ€κΈ° (0) | 2022.01.13 |
[μλ°μ μ μ] Ch 7. κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° II κ°μ λ©λͺ¨ (0) | 2022.01.13 |