์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Absolute
- AGI
- ai
- AI agents
- AI engineer
- AI researcher
- ajax
- algorithm
- Algorithms
- aliases
- Array ๊ฐ์ฒด
- ASI
- bayes' theorem
- Bit
- Blur
- BOM
- bootstrap
- canva
- challenges
- ChatGPT
- Today
- In Total
A Joyful AI Research Journey๐ณ๐
[35] 230216 Java Ch. 7 ์์: 2. ํ์ ๋ณํ๊ณผ ๋คํ์ฑ [K-๋์งํธ ํธ๋ ์ด๋ 35์ผ] ๋ณธ๋ฌธ
[35] 230216 Java Ch. 7 ์์: 2. ํ์ ๋ณํ๊ณผ ๋คํ์ฑ [K-๋์งํธ ํธ๋ ์ด๋ 35์ผ]
yjyuwisely 2023. 2. 16. 12:50230216 Thu 35th class
Ch. 7 ์์
์ง๋: p. 332 ~ (๊ต์ฌ: ํผ์ ๊ณต๋ถํ๋ ์๋ฐ, ์ ์: ์ ์ฉ๊ถ)
ํ๋น๋ฏธ๋์ด_ํผ๊ณต์_์ฉ์ด์ง.pdf
์ฉ์ด ์ฐธ๊ณ
์ค๋ ๋ฐฐ์ด ๊ฒ ์ค ๊ธฐ์ตํ ๊ฒ์ ์ ๋ฆฌํ๋ค.
์ง๋ ์์ ๋ ๋ฐฐ์ด ๊ฒ ์ค ๋ค์ ๊ธฐ์ตํ ๊ฒ
- Widening Casting (automatically) - converting a smaller type to a larger type size
์๋ ํ์ ๋ณํ: ํฐ ํ์ = ์์ ํ์ (์์ ํ์ → ํฐ ํ์ )
byte → short → char → int → long → float → double
Widening casting is done automatically when passing a smaller size type to a larger size type.
int myInt = 9;
double myDouble = myInt; // Automatic casting: int to double
System.out.println(myInt); // Outputs 9
System.out.println(myDouble); // Outputs 9.0
- Narrowing Casting (manually) - converting a larger type to a smaller size type
๊ฐ์ ํ์ ๋ณํ: ์์ ํ์ = (์์ ํ์ )ํฐ ํ์ (ํฐ ํ์ → ์์ ํ์ )
double → float → long → int → char → short → byte
Narrowing casting must be done manually by placing the type in parentheses in front of the value.
double myDouble = 9.78d;
int myInt = (int) myDouble; // Manual casting: double to int
System.out.println(myDouble); // Outputs 9.78
System.out.println(myInt); // Outputs 9
ํ์
๋ณํ
byte → short → char → int → long → float → double
int a = 10;
long b = a; (์์ -> ํฐ: ์๋)
char c = 'A';
int d = c; (์์ -> ํฐ: ์๋)
int e = 65;
char f = e; (ํฐ -> ์์: ๊ฐ์ )
2023.02.10 - [1. Revision 2023/Java] - [31] 230210 Ch. 6 ํด๋์ค(2): ๋ฉ์๋
void: Used at method declaration and definition to specify that the method does not return any type.
๋ฆฌํด๊ฐ์ด ์๋ ๋ฉ์๋๋ ๋ฆฌํด ํ์
์ผ๋ก void๋ฅผ ์ฌ์ฉํ๋ค.
void๋ก ์ ์ธ๋ ๋ฉ์๋์์๋ return๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค. ๋ฆฌํด๊ฐ์ ์ง์ ํ๋ ๊ฒ์ด ์๋๋ผ ๋ฉ์๋ ์คํ์ ๊ฐ์ ๋ก ์ข
๋ฃ์ํค๋ ์ญํ ์ด๋ค.
๋ฆฌํด๋ฌธ: ๋ฉ์๋ ์ ์ธ๋ถ์ ๋ฆฌํด ํ์
์ด ์๋ค๋ฉด ๋ฆฌํด๊ฐ์ ์ง์ ํ๊ธฐ ์ํด return๋ฌธ์ด ๋ฐ๋์ ์์ด์ผ ํ๋ค. ๋ฆฌํด ํ์
์ด void๋ผ๋ฉด return๋ฌธ์ ํ์ ์์ง๋ง, ๋ฉ์๋ ์คํ ์ข
๋ฃ๋ฅผ ์ํด ์ฌ์ฉํ ์ ์๋ค.
return (null): null๋ก returnํ๋ค.
submit์ ํ์ง ๋ชปํ๊ณ null์ ๋ฐํํ๋ค. ํด๋น return ์๋๋ฅผ ์ ๋ถ ์คํํ์ง ์๊ณ return ์ค์์ ํด๋์ค๋ฅผ ๋๋ด๋ฒ๋ฆฐ๋ค.
return true: submit ํ๊ธฐ ์ ์ ํจ์์์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ๊ณ ํต๊ณผ๊ฐ ๋๋ฉด true(=submit true)๋ก ๋ฆฌํดํ๋ค๋ ๋ป์ด๋ค.
return false: ๊ฐ์ด ๋ค์ด๊ฐ ์์ง ์์ผ๋ฉด submit์ ํ์ง ์๊ณ fasle๋ก ๋ฆฌํดํ๋ค๋ ๋ป(return null๊ณผ ์์ฃผ ์กฐ๊ธ ์ฐจ์ด๊ฐ ์๋ค.)์ด๋ค.
์ฐธ๊ณ : https://diaryofgreen.tistory.com/80
Java์์ sysout + [Ctrl] + [space] = System.out.println(); ์ด ์๋์ผ๋ก ์์ฑ๋๋ค.
new๋ ํด๋์ค๋ก๋ถํฐ ๊ฐ์ฒด๋ฅผ ์์ฑ์ํค๋ ์ฐ์ฐ์์ด๋ค. (์์ฑ์: ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋๋ง๋ค ์คํ๋๋ ๋ฉ์๋)
new ์ฐ์ฐ์๋ ํ ์์ญ์ ๊ฐ์ฒด๋ฅผ ์์ฑ์ํจ ํ ๊ฐ์ฒด์ ๋ฒ์ง๋ฅผ ๋ฆฌํดํ๋๋ก ๋์ด ์๋ค.
//ํด๋์ค๋ก ์ ์ธ๋ ๋ณ์์ new ์ฐ์ฐ์๊ฐ ๋ฆฌํดํ ๊ฐ์ฒด์ ๋ฒ์ง๋ฅผ ์ ์ฅํ๋ค.
ํด๋์ค ๋ณ์;
๋ณ์ = new ํด๋์ค();
//1๊ฐ์ ์คํ๋ฌธ์ผ๋ก ์์ฑํ ์ ์๋ค.
ํด๋์ค ๋ณ์ = new ํด๋์ค();
this, this() ์ฐจ์ด
this๋ ์ธ์คํด์ค ์์ ์ ๊ฐ๋ฅดํค๋ ์ฐธ์กฐ ๋ณ์์ด๊ณ this()๋ ์์ฑ์๋ฅผ ๋ปํ๋ค.
์ฐธ๊ณ : https://lowelllll.github.io/java/2018/12/09/java-this-%EC%B0%A8%EC%9D%B4%EC%A0%90/
์ฐธ๊ณ : https://itprogramming119.tistory.com/149
Ch. 7 ์์
์ฑ ์ ๋ชฉ์ฐจ
07-1 ์์
07-2 ํ์ ๋ณํ๊ณผ ๋คํ์ฑ
07-3 ์ถ์ ํด๋์ค
7.2 ํ์ ๋ณํ(type conversion)๊ณผ ๋คํ์ฑ(polymorphism)
์์์ด ์ด๋ฃจ์ด์ ธ์ผํ๋ค. → ํฌ๋ค(๋ถ๋ชจ), ์๋ค(์์)์ด ๋๋ค.
๋ถ๋ชจ(ํผ) → ์์(์์): ๊ฐ์
๋ถ๋ชจ(์์) → ์์(ํผ): ์๋
๋คํ์ฑ(polymorphism): ๊ฐ์ ํ์
์ด์ง๋ง ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ค์ํ ๊ฐ์ฒด๋ฅผ ์ด์ฉํ ์ ์๋ ์ฑ์ง์ ๋งํ๋ค. ์ฝ๋ ์ธก๋ฉด์์ ๋ณด๋ฉด ๋คํ์ฑ์ ํ๋์ ํ์
์ ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๋์
ํจ์ผ๋ก์จ ๋ค์ํ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์๋๋ก ํด์ค๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋์ผํ์ง๋ง ๋ค์ํ ๊ฐ์ฒด๋ฅผ ์ด์ฉํด์ ๋ค์ํ ์คํ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ก ํ๋ ์ฑ์ง์ด๋ค.
class ๋๋ฌผ{
}
class ๊ณ ์์ด extends ๋๋ฌผ{
}
class ๊ฐ์์ง extends ๋๋ฌผ{
}
class ๋๋ฌผํ ์คํธ(){
๋๋ฌผ = ๊ณ ์์ด
๋๋ฌผ = ๊ฐ์์ง
}
1) ์๋ ํ์ ๋ณํ(Promotion)
ํ์
๋ณํ: ํ์
์ ๋ค๋ฅธ ํ์
์ผ๋ก ๋ณํํ๋ ํ์
ํด๋์ค๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์
๋ณํ์ด ์๋๋ฐ, ํด๋์ค์ ๋ฐํ์ ์์ ๊ด๊ณ์ ์๋ ํด๋์ค ์ฌ์ด์์ ๋ฐ์ํ๋ค.
์์์ ๋ถ๋ชจ ํ์
์ผ๋ก ์๋ ํ์
๋ณํ์ด ๊ฐ๋ฅํ๋ค.
์๋ ํ์
๋ณํ: ํ๋ก๊ทธ๋จ ์คํ ๋์ค์ ์๋์ ์ผ๋ก ํ์
๋ณํ์ด ์ผ์ด๋๋ ๊ฒ
์กฐ๊ฑด:
<- ์๋ ํ์ ๋ณํ <- |
๋ถ๋ชจํ์ ๋ณ์ = ์์ ํ์ ; |
Cat cat = new Cat();
Animal animal = cat;
//์๋์ ๊ฐ๋ค.
Animal animal = new Cat();
์์์ ๋ถ๋ชจ์ ํน์ง๊ณผ ๊ธฐ๋ฅ์ ์์๋ฐ๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ์ ๋์ผํ๊ฒ ์ทจ๊ธ๋ ์ ์๋ค.
cat == animal //true
์ฐธ์กฐ ๋ณ์์ == ์ฐ์ฐ์ ์ฐธ์กฐ ๋ฒ์ง๊ฐ ๊ฐ์ ๊ฒฝ์ฐ true๋ฅผ ์ฐ์ถํ๋ฏ๋ก ๋ ๋ณ์๊ฐ ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ค.
๋ฐ๋ก ์์ ๋ถ๋ชจ๊ฐ ์๋๋๋ผ๊ณ ์์ ๊ณ์ธต์์ ์์ ํ์
์ด๋ผ๋ฉด ์๋ ํ์
๋ณํ์ด ์ผ์ด๋ ์ ์๋ค.
์์ 1) ์๋ ํ์
๋ณํ
class A {}
// ์์ < ๋ถ๋ชจ
class B extends A {}
//์์ < ๋ถ๋ชจ
class C extends A {}
//์์ < ๋ถ๋ชจ
class D extends B {}
//์์ < ๋ถ๋ชจ
class E extends C {}
public class PromotionExample {
public static void main(String[] args) {
B b = new B();
C c = new C();
D d = new D();
E e = new E();
//int a = 10;
A a1 = b; //A: ํด๋์ค ํ์
, ์ฐธ์กฐ ํ์
, a1: ์ฐธ์กฐ ๋ณ์
A a2 = c;
A a3 = d;
A a4 = e;
B b1 = d;
C c1 = e;
//์์ ๊ด๊ณ์ ์์ง ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์๋ฌ ๋ฐ์
//B b3 = e;
//C c2 = d;
}
}
[์ค์!] ๋ถ๋ชจ ํ์
์ผ๋ก ์๋ ํ์
๋ณํ๋ ์ดํ์๋ ๋ถ๋ชจ ํด๋์ค์ ์ ์ธ๋ ํ๋์ ๋ฉ์๋๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
๋น๋ก ๋ณ์๋ ์์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ์ง๋ง ๋ณ์๋ก ์ ๊ทผ ๊ฐ๋ฅํ ๋ฉค๋ฒ๋ ๋ถ๋ชจ ํด๋์ค ๋ฉค๋ฒ๋ก ํ์ ๋๋ค.
์์ธ) ๋ฉ์๋๊ฐ ์์ ํด๋์ค์์ ์ฌ์ ์(์ค๋ฒ๋ผ์ด๋ฉ)๋์๋ค๋ฉด ์์ ํด๋์ค์ ๋ฉ์๋๊ฐ ๋์ ํธ์ถ๋๋ค.
์์ 1) ์๋ ํ์ ๋ณํ ํ์ ๋ฉค๋ฒ ์ ๊ทผ Parent.java
public class Parent {
int a = 10;
public void method1() {
System.out.println("Parent-method1()");
}
public void method2() {
System.out.println("Parent-method2()");
}
}
์์ 2) ์๋ ํ์ ๋ณํ ํ์ ๋ฉค๋ฒ ์ ๊ทผ Child.java
public class Child extends Parent{
int a = 20;
public void method2(){
System.out.println("Child-method2()");
}
public void method3(){
System.out.println("Child-method3()");
}
}
์์ 3) ์๋ ํ์ ๋ณํ ํ์ ๋ฉค๋ฒ ์ ๊ทผ ChildExample.java
public class ChildExample {
public static void main(String[] args) {
//int a = 10;
Child child = new Child();
Parent parent = child; //์๋ ํ์
๋ณํ
System.out.println(parent.a);
parent.method1();
parent.method2(); //์ฌ์ ์๋ ๋ฉ์๋๊ฐ ํธ์ถ๋จ
//parent.method3(); //ํธ์ถ ๋ถ๊ฐ๋ฅ
}
}
๊ฒฐ๊ณผ)
10
Parent-method1()
Child-method2()
2) ํ๋์ ๋คํ์ฑ p. 337
๋คํ์ฑ์ ๊ตฌํํ๊ธฐ ์ํด ๋ถ๋ชจ ํ์
์ผ๋ก ๋ณํํด์ ์ฌ์ฉํ๋ค.
ํ๋์ ํ์
์ ๋ถ๋ชจ ํ์
์ผ๋ก ์ ์ธํ๋ฉด ๋ค์ํ ์์ ๊ฐ์ฒด๋ค์ด ์ ์ฅ๋ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋ ์ฌ์ฉ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค. (=ํ๋์ ๋คํ์ฑ)
ํ๋ก๊ทธ๋จ์ ์๋ง์ ๊ฐ์ฒด๋ค์ด ์๋ก ์ฐ๊ฒฐ๋๊ณ ๊ฐ์์ ์ญํ ์ ํ๊ฒ ๋๋๋ฐ, ์ด ๊ฐ์ฒด๋ค์ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ๊ต์ฒด๋ ์ ์์ด์ผ ํ๋ค.
ex) ์๋์ฐจ ํด๋์ค๋ฅผ ์ฒ์ ์ค๊ณํ ๋ ์ฌ์ฉํ ํ์ด์ด ๊ฐ์ฒด๋ ์ธ์ ๋ ์ง ์ฑ๋ฅ์ด ์ข์ ๋ค๋ฅธ ํ์ด์ด ๊ฐ์ฒด๋ก ๊ต์ฒดํ ์ ์์ด์ผ ํ๋ค.
์๋ก ๊ต์ฒด๋๋ ํ์ด์ด ๊ฐ์ฒด๋ ๊ธฐ์กด ํ์ด์ด์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋์ผํ์ง๋ง ์คํ ๊ฒฐ๊ณผ๋ ๋ ์ฐ์ํ๊ฒ ๋์์ผ ํ ๊ฒ์ด๋ค.
→ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ตฌํํ๊ธฐ ์ํด ์์๊ณผ ์ฌ์ ์, ํ์
๋ณํ์ ์ด์ฉํ๋ค.
[๋คํ์ฑ์ ๊ตฌํํ ์ ์๋ ๊ธฐ์ ์ ์กฐ๊ฑด]
1. ๋ถ๋ชจ ํด๋์ค๋ฅผ ์์ํ๋ ์์ ํด๋์ค๋ ๋ถ๋ชจ๊ฐ ๊ฐ์ง๊ณ ์๋ ํ๋์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ ์ฌ์ฉ ๋ฐฉ๋ฒ์ด ๋์ผํ๋ค.
2. ์์ ํด๋์ค๋ ๋ถ๋ชจ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํด์ ๋ฉ์๋์ ์คํ ๋ด์ฉ์ ๋ณ๊ฒฝํจ์ผ๋ก์จ ๋ ์ฐ์ํ ์คํ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ฒ ํ ์๋ ์๋ค.
3. ์์ ํ์
์ ๋ถ๋ชจ ํ์
์ผ๋ก ๋ณํํ ์ ์๋ค
๋คํ์ฑ: ์ ์ฒด ์์ ์ด ์๋, ํน์ ๋ถ๋ถ์ ์์ ํ๋ค. (์ ์ง๋ณด์), ํจ์จ์ ์ธ์ง ํ๋จํ๋ค.
ex) ํ์ด์ด 4๊ฐ์ ์๋์ฐจ์ ๊ฒฝ์ฐ ์ ํ์ด์ด 2๊ฐ, ๋ท ํ์ด์ด 2๊ฐ ๋๋๋ ๊ฒฝ์ฐ
์ฑ
์ ์๋ ์์ ์์๋ ํ์ด์ด๋ฅผ 4๊ฐ๋ก ๋๋์๋ค.
1) Tire ํด๋์ค
์ต๋ ํ์ ์ = ํ์ด์ด์ ์๋ช , ์ต๋ ํ์ ์์ ๋๋ฌํ๋ฉด ํ์ด์ด์ ํํฌ๊ฐ ๋๋ค.
์์ 1) Tire.java
if, else์ผ ๋ ๊ฐ๊ฐ return true; return false; ์ด๋ค.
package ch07_2;
//[1]
public class Tire {
//ํ๋(๊ธฐ๋ณธ ํ์
)
public int maxRotation;//์ ๊ทผ์ ํ์๊ฐ public์ธ ์ธ์คํด์ค ํ๋: ์ต๋ ํ์ ์๋ฅผ ์ ์ฅํ๋ ํ๋(ํ์ด์ด ์๋ช
)
public int accumulatedRotation;//์ ๊ทผ์ ํ์๊ฐ public์ธ ์ธ์คํด์ค ํ๋: ๋์ ํ์ ์
public String location;//์ ๊ทผ์ ํ์๊ฐ public์ธ ์ธ์คํด์ค ํ๋: ํ์ด์ด์ ์์น(์์ผ์ชฝ, ์์ค๋ฅธ์ชฝ, ๋ค์ผ์ชฝ, ๋ค์ค๋ฅธ์ชฝ)
//์์ฑ์(๋งค๊ฐ๋ณ์ 2๊ฐ์ธ ์์ฑ์: ํ์ด์ด์์น, ์ต๋ ํ์ ์๋ฅผ ์ด๊ธฐํํ๋ ์์ฑ์)
public Tire(String location, int maxRotation) {
//ํ์ด์ด์ ์์น ์ด๊ธฐํ
this.location = location;
//์ต๋ ํ์ ์ ์ด๊ธฐํ
this.maxRotation = maxRotation;
}
//๋ฉ์๋
public boolean roll() {//์ ๊ทผ์ ํ์๊ฐ public์ด๊ณ , ๋ฆฌํดํ์
์ boolean์ธ roll์ด๋ผ๋ ์ด๋ฆ์ ๋ฉ์๋
//๋์ ํ์ ์ 1์ฉ ์ฆ๊ฐ์์ผ์ ๋์ ํ์ ์ ํ๋์ ์ ์ฅํ๋ค.
++accumulatedRotation;
//๋์ ํ์ ์๊ฐ ์ต๋ ํ์ ์๋ณด๋ค ์์ผ๋ฉด (์ ์ ํ์ (๋์ <์ต๋)์ผ ๊ฒฝ์ฐ) ์คํํ๋ค.
if(accumulatedRotation < maxRotation) {
System.out.println(location + " Tire ์๋ช
: "+(maxRotation-accumulatedRotation) + "ํ");
return true;//๋ฆฌํดํ์
๊ณผ returnํค์๋ ๋ค์ ์๋ ํ์
์ด ์ผ์นํ๋ค.
}else {//๊ทธ๋ ์ง ์์ผ๋ฉด = ๋์ ํ์ ์๊ฐ ์ต๋ ํ์ ์์ ๊ฐ๊ฑฐ๋ ํฌ๋ฉด (ํํฌ(๋์ =์ต๋)์ผ ๊ฒฝ์ฐ) ์คํํ๋ค.
System.out.println("***" + location + " Tire ํํฌ ***");
return false;
}
}
}
๋ฒ์ธ) ์๋ ๋ฐฉ์์ผ๋ก๋ if, else๋ฌธ์ด ๊ฐ๋ฅํ๋ค.
if, else์ ๊ฐ๊ฐ result = true; result = false; ๋ฃ๊ณ return result;๋ฅผ ์ด๋ค.
public boolean roll() {//์ ๊ทผ์ ํ์๊ฐ public์ด๊ณ , ๋ฆฌํดํ์
์ boolean์ธ roll์ด๋ผ๋ ์ด๋ฆ์ ๋ฉ์๋
//๋์ ํ์ ์ 1์ฉ ์ฆ๊ฐ์์ผ์ ๋์ ํ์ ์ ํ๋์ ์ ์ฅํ๋ค.
++accumulatedRotation;
//๋์ ํ์ ์๊ฐ ์ต๋ ํ์ ์๋ณด๋ค ์์ผ๋ฉด (์ ์ ํ์ (๋์ <์ต๋)์ผ ๊ฒฝ์ฐ) ์คํํ๋ค.
if(accumulatedRotation < maxRotation) {
System.out.println(location + "Tire ์๋ช
: "+(maxRotation-accumulatedRotation) + "ํ");
result = true;//๋ฆฌํดํ์
๊ณผ returnํค์๋ ๋ค์ ์๋ ํ์
์ด ์ผ์นํ๋ค.
}else {//๊ทธ๋ ์ง ์์ผ๋ฉด = ๋์ ํ์ ์๊ฐ ์ต๋ ํ์ ์์ ๊ฐ๊ฑฐ๋ ํฌ๋ฉด (ํํฌ(๋์ =์ต๋)์ผ ๊ฒฝ์ฐ) ์คํํ๋ค.
System.out.println("***" + location + "Tire ํํฌ ***");
result = false;
}
return result;
}
2) Car ํด๋์ค
์์ 2) Tire๋ฅผ ๋ถํ์ผ๋ก ๊ฐ์ง๋ ํด๋์ค Car.java
int run() {//์ ๊ทผ์ ํ์๊ฐ default์ด๊ณ , ๋ฆฌํดํ์
์ด int์ธ run์ด๋ผ๋ ์ด๋ฆ์ ๋ฉ์๋
System.out.println("[์๋์ฐจ๊ฐ ๋ฌ๋ฆฝ๋๋ค.]");
if(frontLeftTire.roll()==false) {stop(); return 1;}
if(frontRightTire.roll()==false) {stop(); return 2;}
if(backLeftTire.roll()==false) {stop(); return 3;}
if(backRightTire.roll()==false) {stop(); return 4;}
return 0; //์ ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ 0์ด ํ์ํ๋ฏ๋ก ๋ฃ์ด์ค๋ค.
}
[1] Tire.java์ ๋ฉ์๋๊ฐ return false;๊ฐ ๋ ๊ฒฝ์ฐ (false๋ฅผ ๋ฆฌํดํ๋ roll()์ด ์์ ๊ฒฝ์ฐ)
stop() ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ํด๋น ํ์ด์ด ๋ฒํธ๋ฅผ ๋ฆฌํดํ๋ค.
package ch07_2;
//[2]
public class Car {
//ํ๋(์ฐธ์กฐ ํ์
): ์๋์ฐจ๋ 4๊ฐ์ ํ์ด์ด๋ฅผ ๊ฐ์ง๋ค.
Tire frontLeftTire = new Tire("์์ผ์ชฝ", 6); //new ๋ค์ ์๋ ๊ฒ: ์์ฑ์ ํธ์ถ
Tire frontRightTire = new Tire("์์ค๋ฅธ์ชฝ", 2);
Tire backLeftTire = new Tire("๋ค์ผ์ชฝ", 3);
Tire backRightTire = new Tire("๋ค์ค๋ฅธ์ชฝ", 4);
//์์ฑ์
//๋ฉ์๋: ๋ชจ๋ ํ์ด์ด๋ฅผ 1ํ ํ์ ์ํค๊ธฐ ์ํด ๊ฐ Tire ๊ฐ์ฒด์ roll() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
//false๋ฅผ ๋ฆฌํดํ๋ roll()์ด ์์ ๊ฒฝ์ฐ stop()๋ฉ์๋๋ฅผํธ์ถํ๊ณ ํด๋น ํ์ด์ด ๋ฒํธ๋ฅผ ๋ฆฌํดํ๋ค.
int run() {//์ ๊ทผ์ ํ์๊ฐ default์ด๊ณ , ๋ฆฌํดํ์
์ด int์ธ run์ด๋ผ๋ ์ด๋ฆ์ ๋ฉ์๋
System.out.println("[์๋์ฐจ๊ฐ ๋ฌ๋ฆฝ๋๋ค.]");
if(frontLeftTire.roll()==false) {stop(); return 1;}
if(frontRightTire.roll()==false) {stop(); return 2;}
if(backLeftTire.roll()==false) {stop(); return 3;}
if(backRightTire.roll()==false) {stop(); return 4;}
return 0; //์ ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ 0์ด ํ์ํ๋ฏ๋ก ๋ฃ์ด์ค๋ค.
}
//ํํฌ ๋ฌ์ ๋ ์คํ: ์ ๊ทผ์ ํ์๊ฐ default์ด๊ณ , ๋ฆฌํดํ์
์ด void์ธ run์ด๋ผ๋ ์ด๋ฆ์ ๋ฉ์๋
void stop() {//void์ด๋ฏ๋ก return์ด ์๋ค.
System.out.println("[์๋์ฐจ๊ฐ ๋ฉ์ถฅ๋๋ค.]");
}
}
new๋ก ์๋์ฒ๋ผ ์๋ก์ด ์๋ฅผ ๊ณ์ ๋ง๋ ๋ค.
Tire frontLeftTire = new Tire("์์ผ์ชฝ", 6);
0x100 | |||
frontLeftTire | 0x100 <--- | Tire1 | |
maxRotation | 6 | ||
accumulatedRotation | 0 | ||
location | ์์ผ์ชฝ |
Tire frontRightTire = new Tire("์์ค๋ฅธ์ชฝ", 2);
0x200 | |||
frontRightTire | 0x200 <--- | Tire1 | |
maxRotation | 2 | ||
accumulatedRotation | 0 | ||
location | ์์ค๋ฅธ์ชฝ |
Tire backLeftTire = new Tire("๋ค์ผ์ชฝ", 3);
0x300 | |||
BackLeftTire | 0x300 <--- | Tire1 | |
maxRotation | 3 | ||
accumulatedRotation | 0 | ||
location | ๋ค์ผ์ชฝ |
Tire backRightTire = new Tire("๋ค์ค๋ฅธ์ชฝ", 4);
0x400 | |||
BackRightTire | 0x400 <--- | Tire1 | |
maxRotation | 4 | ||
accumulatedRotation | 0 | ||
location | ๋ค์ค๋ฅธ์ชฝ |
3) HankookTire, KumhoTire ํด๋์ค
์ด ๋ ํด๋์ค๋ Tire ํด๋์ค๋ฅผ ์์๋ฐ๋๋ค.
์์ฑ์๋ ํ์ด์ด์ ์์น, ์ต๋ ํ์ ์๋ฅผ ๋งค๊ฐ๊ฐ์ผ๋ก ๋ฐ์์ ๋ถ๋ชจ์ธ Tire ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํ ๋ ๋๊ฒจ์ฃผ์๋ค.
roll ๋ฉ์๋๋ ์ฌ์ ์๋์ด ์ ์ ํ์ ๊ณผ ํํฌ๊ฐ ๋ฌ์ ๋ ์ถ๋ ฅํ๋ ๋ด์ฉ์ด Tire ํด๋์ค์ roll() ๋ฉ์๋์ ๋ค๋ฅด๋ค.
(๋ฉ์๋๊ฐ ์์ ํด๋์ค์์ ์ฌ์ ์(์ค๋ฒ๋ผ์ด๋ฉ)๋์๋ค๋ฉด ์์ ํด๋์ค์ ๋ฉ์๋๊ฐ ๋์ ํธ์ถ๋๋ค.)
(์ถ๋ ฅํ๋ ๋ด์ฉ์ ์๋์ ๊ฐ๊ณ ์ ํ ์ด๋ฆ์ด ์๋ Tire ํด๋์ค์ roll() ๋ฉ์๋ ์ถ๋ ฅ ๋ด์ฉ๊ณผ๋ ๋ค๋ฅด๋ค.)
System.out.println(location + "HankookTire ์๋ช
: "+(maxRotation-accumulatedRotation)+"ํ");
System.out.println("***" + location + "HankookTire ํํฌ ***");
System.out.println(location + "KumhoTire ์๋ช
: "+(maxRotation-accumulatedRotation)+"ํ");
System.out.println("***" + location + "KumhoTire ํํฌ ***");
์์ 3) Tire์ ์์ ํด๋์ค HankookTire.java
package ch07_2;
//[3]
public class HankookTire extends Tire {
//ํ๋
//์์ฑ์
public HankookTire(String location, int maxRotation) {
super(location, maxRotation);
}
//๋ฉ์๋: ๋ค๋ฅธ ๋ด์ฉ์ ์ถ๋ ฅํ๊ธฐ ์ํด ์ฌ์ ์ํ roll() ๋ฉ์๋
public boolean roll() {
++accumulatedRotation;
if (accumulatedRotation < maxRotation) {
System.out.println(location + " HankookTire ์๋ช
: "+(maxRotation-accumulatedRotation)+"ํ");
return true;
}else {
System.out.println("***" + location + "HankookTire ํํฌ ***");
return false;
}
}
}
์์ 4) Tire์ ์์ ํด๋์ค KumhoTire.java
package ch07_2;
//[4]
public class KumhoTire extends Tire {
//ํ๋
//์์ฑ์
public KumhoTire(String location, int maxRotation) {
super(location, maxRotation);
}
//๋ฉ์๋: ๋ค๋ฅธ ๋ด์ฉ์ ์ถ๋ ฅํ๊ธฐ ์ํด ์ฌ์ ์ํ roll() ๋ฉ์๋
public boolean roll() {
++accumulatedRotation;
if (accumulatedRotation < maxRotation) {
System.out.println(location + " KumhoTire ์๋ช
: "+(maxRotation-accumulatedRotation)+"ํ");
return true;
}else {
System.out.println("***" + location + "KumhoTire ํํฌ ***");
return false;
}
}
}
4) CarExample ํด๋์ค
๋ฉ์ธ ๋ฉ์๋๊ฐ ์๋ ํด๋์ค๋ฅผ ๋จผ์ ์คํํ๋ค. (CarExample)
์ฌ๊ธฐ์ ๊ทธ ํ์ ์คํ ์์๋ฅผ ๋์ดํ๋ค.
๋ง์ง๋ง์ผ๋ก CarExample ํด๋์ค๋ฅผ ๋ณด๋ฉด ์ง๊ธ๊น์ง ์์ฑํ Tire, Car, HankookTire, KumhoTire ํด๋์ค๋ฅผ ์ด์ฉํ๋ ์คํํด๋์ค์ด๋ค.
์์ 5) ์คํ ํด๋์ค CarExample.java
package ch07_2;
//[5]
public class CarExample {
public static void main(String[] args) {
//Car ๊ฐ์ฒด ์์ฑ
Car car = new Car();
//Car ๊ฐ์ฒด์ run() ๋ฉ์๋ 5๋ฒ ๋ฐ๋ณต ์คํ
for(int i=1; i<=5; i++) {
int problemLocation = car.run();
switch(problemLocation) {
case 1: //์์ผ์ชฝ ํ์ด์ด๊ฐ ํํฌ ๋ฌ์ ๋ HankookTire๋ก ๊ต์ฒด
System.out.println("์์ผ์ชฝ HankookTire๋ก ๊ต์ฒด");
car.frontLeftTire = new HankookTire("์์ผ์ชฝ", 15);
break;
case 2: //์์ค๋ฅธ์ชฝ ํ์ด์ด๊ฐ ํํฌ ๋ฌ์ ๋ KumhoTire๋ก ๊ต์ฒด
System.out.println("์์ค๋ฅธ์ชฝ KumhoTire๋ก ๊ต์ฒด");
car.frontRightTire = new HankookTire("์์ผ์ชฝ", 13);
break;
case 3: //๋ค์ผ์ชฝ ํ์ด์ด๊ฐ ํํฌ ๋ฌ์ ๋ HankookTire๋ก ๊ต์ฒด
System.out.println("๋ค์ผ์ชฝ HankookTire๋ก ๊ต์ฒด");
car.backLeftTire = new HankookTire("๋ค์ผ์ชฝ", 14);
break;
case 4: //๋ค์ค๋ฅธ์ชฝ ํ์ด์ด๊ฐ ํํฌ ๋ฌ์ ๋ KumhoTire๋ก ๊ต์ฒด
System.out.println("๋ค์ค๋ฅธ์ชฝ KumhoTire๋ก ๊ต์ฒด");
car.backRightTire = new KumhoTire("์์ผ์ชฝ", 17);
break;
}
//1ํ์ ์ ์ถ๋ ฅ๋๋ ๋ด์ฉ์ ๊ตฌ๋ถํ๋ค.
System.out.println("------------------------------");
}
}
}
๊ฒฐ๊ณผ)
[์๋์ฐจ๊ฐ ๋ฌ๋ฆฝ๋๋ค.]
์์ผ์ชฝ Tire ์๋ช
: 5ํ
์์ค๋ฅธ์ชฝ Tire ์๋ช
: 1ํ
๋ค์ผ์ชฝ Tire ์๋ช
: 2ํ
๋ค์ค๋ฅธ์ชฝ Tire ์๋ช
: 3ํ
------------------------------
[์๋์ฐจ๊ฐ ๋ฌ๋ฆฝ๋๋ค.]
์์ผ์ชฝ Tire ์๋ช
: 4ํ
***์์ค๋ฅธ์ชฝ Tire ํํฌ ***
[์๋์ฐจ๊ฐ ๋ฉ์ถฅ๋๋ค.]
์์ค๋ฅธ์ชฝ KumhoTire๋ก ๊ต์ฒด
------------------------------
[์๋์ฐจ๊ฐ ๋ฌ๋ฆฝ๋๋ค.]
์์ผ์ชฝ Tire ์๋ช
: 3ํ
์์ผ์ชฝ HankookTire ์๋ช
: 12ํ
๋ค์ผ์ชฝ Tire ์๋ช
: 1ํ
๋ค์ค๋ฅธ์ชฝ Tire ์๋ช
: 2ํ
------------------------------
[์๋์ฐจ๊ฐ ๋ฌ๋ฆฝ๋๋ค.]
์์ผ์ชฝ Tire ์๋ช
: 2ํ
์์ผ์ชฝ HankookTire ์๋ช
: 11ํ
***๋ค์ผ์ชฝ Tire ํํฌ ***
[์๋์ฐจ๊ฐ ๋ฉ์ถฅ๋๋ค.]
๋ค์ผ์ชฝ HankookTire๋ก ๊ต์ฒด
------------------------------
[์๋์ฐจ๊ฐ ๋ฌ๋ฆฝ๋๋ค.]
์์ผ์ชฝ Tire ์๋ช
: 1ํ
์์ผ์ชฝ HankookTire ์๋ช
: 10ํ
๋ค์ผ์ชฝ HankookTire ์๋ช
: 13ํ
๋ค์ค๋ฅธ์ชฝ Tire ์๋ช
: 1ํ
------------------------------
3) ๋งค๊ฐ ๋ณ์์ ๋คํ์ฑ p. 345
void add(int x){
}
add(10)
// ๋ถ๋ชจ ํด๋์ค์ ์ฐธ์กฐ ํ์
void add(Car x){
}
// ์์ ํด๋์ค์ ์ฐธ์กฐ ํ์ (์์์ด ๋์ด์ผ ๊ฐ๋ฅํ๋ค.)
add(HankookTire ht);
add(KumhoTire ht);
์๋ ํ์
๋ณํ์ ํ๋์ ๊ฐ์ ๋์
ํ ๋์๋ ๋ฐ์ํ์ง๋ง, ์ฃผ๋ก ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ๋ง์ด ๋ฐ์ํ๋ค.
๋ฉ์๋๋ฅผ ํธ์ถํ ๋์๋ ๋งค๊ฐ ๋ณ์์ ํ์
๊ณผ ๋์ผํ ๋งค๊ฐ๊ฐ์ ์ง์ ํ๋ ๊ฒ์ด ์ ์์ด์ง๋ง,
๋งค๊ฐ๊ฐ์ ๋ค์ํํ๊ธฐ ์ํด ๋งค๊ฐ ๋ณ์์ ์์ ๊ฐ์ฒด๋ฅผ ์ง์ ํ ์๋ ์๋ค.
ex) Driver ํด๋์ค์๋ drive() ๋ฉ์๋๊ฐ ์ ์๋์ด ์๋๋ฐ Vehicle ํ์
์ ๋งค๊ฐ ๋ณ์๊ฐ ์ ์ธ๋์ด ์๋ค.
drive() ๋ฉ์๋๋ฅผ ์ ์์ ์ผ๋ก ํธ์ถํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
class Driver{
void drive(Vehicle vehicle)
vehicle.run();
}
}
//์ฐธ์กฐ ํ์
Driver driver = new Driver();
//์ฐธ์กฐ ํ์
Vehicle vehicle = new Vehicle();
* Driver ํด๋์ค์ Vehicle ํด๋์ค ๊ฐ์ ์์์ด ์๋ ๊ฒฝ์ฐ *
driver.drive(vehicle);(O) //driver ๋ฉ์๋์ ๋งค๊ฐ๋ณ์ ํ์
๊ณผ ์ธ์์ ํ์
์ผ์น
driver.drive(driver);(X) //driver ๋ฉ์๋์ ๋งค๊ฐ๋ณ์ ํ์
๊ณผ ์ธ์์ ํ์
๋ถ์ผ์น
void drive(Vehicle vehicle)๊ณผ Vehicle ์ผ์น, Driver ๋ถ์ผ์น
๊ฐ์ ํ์
์ด๋ฉด ๋๋ค. ์ฐธ์กฐ ๋ณ์๋ ์์์ ํตํด์ ๋๋ค. (์์์ ํ๋ฉด ๋คํ์ฑ์ด ์ ๋๋ฏ๋ก ์์ ์ฝ๋ ์์์ ๊ฐ๋ค.)
class Calculator{
void add(int x){}
}
Car car = new Car();
Calculator cal = new Calculator();
cal.add(10) (O)
cal.add(10.5) (X)
//๊ธฐ๋ณธ ํ์
int a = 10;
//๊ธฐ๋ณธ ํ์
float b = 10.5;
cal.add(a) (O) //๊ฐ์ int ํ์ ์ด๋ฏ๋ก ๋๋ค.
cal.add(b) (X)
๋งค๊ฐ ๋ณ์์ ํ์
์ด ํด๋์ค์ผ ๊ฒฝ์ฐ, ํด๋น ํด๋์ค์ ๊ฐ์ฒด๋ฟ๋ง ์๋๋ผ ์์ ๊ฐ์ฒด๊น์ง๋ ๋งค๊ฐ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
์์ ๊ฐ์ฒด๊ฐ ๋ถ๋ชจ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ค๋ฉด ๋ฉ์๋ ๋ด๋ถ์์ ์ ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํจ์ผ๋ก์จ ๋ฉ์๋์ ์คํ ๊ฒฐ๊ณผ๋ ๋ค์ํด์ง๋ค.
์์๊ด๊ณ X -> ๋คํ์ฑ X
Vehicle vehicle = new Bus();๋ Driver.java์ DriverExample.java์ ๋ค์ด๊ฐ์๋ค.
์์ 1) ๋ถ๋ชจ ํด๋์ค Vehicle.java
package ch07_2;
//[1]
public class Vehicle {
public void run() {
System.out.println("์ฐจ๋์ด ๋ฌ๋ฆฝ๋๋ค.");
}
}
์์ 2) Vehicle์ ์ด์ฉํ๋ ํด๋์ค Driver.java
package ch07_2;
//[2]
public class Driver {
// int a
// ํ์
๋ณ์๋ช
(๋ฐ๊ฟ ์ ์๋ค.)
//public void driver(int a) {
public void driver(Vehicle vehicle) {
vehicle.run();
}
}
์์ 3) ์์ ํด๋์ค Bus.java
package ch07_2;
//[3]
public class Bus extends Vehicle {
//public class Bus{
//๋ฉ์๋ ์ฌ์ ์(์ค๋ฒ๋ผ์ด๋ฉ)
public void run() {
System.out.println("๋ฒ์ค๊ฐ ๋ฌ๋ฆฝ๋๋ค.");
}
}
์์ 4) ์์ ํด๋์ค Taxi.java
package ch07_2;
//[4]
public class Taxi extends Vehicle {
//public class Taxi{
//๋ฉ์๋ ์ฌ์ ์(์ค๋ฒ๋ผ์ด๋ฉ)
public void run() {
System.out.println("ํ์๊ฐ ๋ฌ๋ฆฝ๋๋ค.");
}
}
์์ 5) ์คํ ํด๋์ค DriverExample.java
package ch07_2;
//[5]
public class DriverExample {
public static void main(String[] args) {
Driver d = new Driver();
Bus bus = new Bus();
Taxi taxi = new Taxi();
//Vehicle vehicle = new Vehicle();
//d.driver(10);
d.driver(bus); //Vehicle ํด๋์ค์ Bus ํด๋์ค๊ฐ ์์๊ด๊ณ๊ฐ ์๋๋ฉด X ์๋ํ์
๋ณํ: Vehicle vehicle = bus;
d.driver(taxi); //Vehicle ํด๋์ค์ Taxi ํด๋์ค๊ฐ ์์๊ด๊ณ๊ฐ ์๋๋ฉด X ์๋ํ์
๋ณํ: Vehicle vehicle = taxi;
//d.driver(vehicle);
}
}
๊ฒฐ๊ณผ)
๋ฒ์ค๊ฐ ๋ฌ๋ฆฝ๋๋ค.
ํ์๊ฐ ๋ฌ๋ฆฝ๋๋ค.
4) ๊ฐ์ ํ์ ๋ณํ(Casting) p. 348
๊ฐ์ ํ์
๋ณํ: ๋ถ๋ชจ ํ์
์ ์์ ํ์
์ผ๋ก ๋ณํํ๋ ๊ฒ
์์ ๊ฐ์ฒด๊ฐ ๋ถ๋ชจ ํ์
์ผ๋ก ๋ณํ๋ ์ํ์์ ๋ค์ ์๋๋๋ก ์์ ํ์
์ผ๋ก ๋ณํํ๊ณ ์ ํ ๋
์บ์คํ
() ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ ํ์
๋ณํํ ์ ์๋ค.
์์ํ์
๋ณ์ = (์์ํ์
) ๋ถ๋ชจํ์
; //๋ถ๋ชจ ํ์
์ ์์ ํ์
์ผ๋ก ๋ณํ
ex) ์ฐธ์กฐ ํ์
: ์์ ํด๋์ค ← (์์ ํด๋์ค) ๋ถ๋ชจ ํด๋์ค
์์ ) p.355 3๋ฒ ๋ฌธ์
A ๋ถ๋ชจ ํด๋์ค, B ์์ ํด๋์ค์ธ ์ํฉ์์
A a = new B(); //์ ํ ํ
B b = (B) a; ๊ฐ๋ฅํ๋ค.
byte → short → char → int → long → float → double
int a = 10;
//8 <- 4
long b = a; (์๋)
char c = 'A'
//4 <- 2
int d = c; (์๋)
int e = 65;
//2 <- 4
char d = (char)e; (๊ฐ์ )
์์ 1) ๋ถ๋ชจ ํด๋์ค Parent.java
package ch07_2;
public class Parent1 {
public String field1;
public void method1() {
System.out.println("Parent-method1()");
}
public void method2() {
System.out.println("Parent-method1()");
}
}
์์ 2) ์์ ํด๋์ค Child.java
package ch07_2;
public class Child1 extends Parent1 {
public String field2;
public void method3() {
System.out.println("Child-method3()");
}
}
์์ 3) ๊ฐ์ ํ์ ๋ณํ ChildExample.java
package ch07_2;
public class ChildExample1 {
public static void main(String[] args) {
//์๋ ํ์
๋ณํ(์ฐธ์กฐ ํ์
: ๋ถ๋ชจํด๋์ค <- ์์ ํด๋์ค)
Parent1 parent = new Child1();
parent.field1 = "data1"; //Parent1.java์ filed1
parent.method1(); //๋ถ๋ชจ ํด๋์ค์ ์๋ค.
parent.method2(); //๋ถ๋ชจ ํด๋์ค์ ์๋ค.
//parent.field2 = "data2"; parent์ field2๊ฐ ์์ผ๋ฏ๋ก ์ฌ์ฉX
//parent.method3(); ๋ถ๋ชจ ํด๋์ค์ ์๋ค.
//๊ฐ์ ํ์
๋ณํ(์ฐธ์กฐ ํ์
: ์์ ํด๋์ค <- (์์ ํด๋์ค) ๋ถ๋ชจ ํด๋์ค)
Child1 child = (Child1) parent;
child.field2 = "yyy";
child.method3();
}
}
๊ฒฐ๊ณผ)
Parent-method1()
Parent-method1()
Child-method3()
5) ๊ฐ์ฒด ํ์ ํ์ธ (instanceof)
๊ฐ์ ํ์ ๋ณํ์ ์์ ํ์ ์ด ๋ถ๋ชจ ํ์ ์ผ๋ก ๋ณํ๋์ด ์๋ ์ํ์์๋ง ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ ๋ถ๋ชจ ํ์ ์ผ๋ก ์์ฑ๋ ๊ฐ์ฒด๋ ์์ ํ์ ์ผ๋ก ๋ฐํํ ์ ์๋ค.
Parent parent = new Parent();
Child child = (Child) parent; //๊ฐ์ ํ์
๋ณํ X
๋ถ๋ชจ ๋ณ์๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๊ฐ ๋ถ๋ชจ ๊ฐ์ฒด์ธ์ง ์์ ๊ฐ์ฒด์ธ์ง ํ์ธํ๋ ๋ฐฉ๋ฒ: instanceof ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค.
(์ฐ์ฐ์: ์ฐ์ฐ์ ์ฌ์ฉ๋๋ ํ์๋ ๊ธฐํธ)
์ฐ์ฐ์์ ์ขํญ์๋ ๊ฐ์ฒด๊ฐ ์ค๊ณ ์ฐํญ์๋ ํ์
์ด ์ค๋๋ฐ, ์ขํญ์ ๊ฐ์ฒด๊ฐ ์ฐํญ์ ์ธ์คํด์ค์ด๋ฉด, (์ฆ ์ฐํญ์ ํ์
์ผ๋ก ๊ฐ์ฒด๊ฐ ์์ฑ๋์๋ค๋ฉด) true๋ฅผ ๋ฆฌํดํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฆฌํดํ๋ค.
boolean result = ์ขํฅ(๊ฐ์ฒด) instanceof ์ฐํฅ(ํ์
)
instanceof ์ฐ์ฐ์๋ ์ฃผ๋ก ๋งค๊ฐ๊ฐ์ ํ์
์ ์กฐ์ฌํ ๋ ์ฌ์ฉํ๋ค.
๋ฉ์๋ ๋ด์์ ๊ฐ์ ํ์
๋ณํ์ด ํ์ํ ๊ฒฝ์ฐ ๋ฐ๋์ ๋งค๊ฐ๊ฐ์ด ์ด๋ค ๊ฐ์ฒด์ธ์ง instanceof ์ฐ์ฐ์๋ก ํ์ธํ๊ณ ์์ ํ๊ฒ ๊ฐ์ ํ์
๋ณํ์ ํด์ผํ๋ค.
๋ง์ฝ ํ์
์ ํ์ธํ์ง ์๊ณ ๊ฐ์ ํ์
๋ณํ์ ์๋ํ๋ค๋ฉด ClassCastException์ด ๋ฐ์ํ ์ ์๋ค.
์ด๋ฌํ ๋คํ์ฑ์ผ๋ก ์ธํด ๋ฐํ์์ ์ฐธ์กฐ ๋ณ์๊ฐ ์ค์ ๋ก ์ฐธ์กฐํ๊ณ ์๋ ์ธ์คํด์ค์ ํ์ ์ ํ์ธํ ํ์์ฑ์ด ์๊ธด๋ค. ์๋ฐ์์๋ instanceof ์ฐ์ฐ์๋ฅผ ์ ๊ณตํ์ฌ, ์ฐธ์กฐ ๋ณ์๊ฐ ์ฐธ์กฐํ๊ณ ์๋ ์ธ์คํด์ค์ ์ค์ ํ์ ์ ํ์ธํ ์ ์๋๋ก ํด์ค๋ค.
์๋ฐ์์ instanceof ์ฐ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ค.
์ฐธ์กฐ๋ณ์ instanceof ํด๋์ค์ด๋ฆ
์ผ์ชฝ์ ์ ๋ฌ๋ ์ฐธ์กฐ ๋ณ์๊ฐ ์ค์ ๋ก ์ฐธ์กฐํ๊ณ ์๋ ์ธ์คํด์ค์ ํ์ ์ด ์ค๋ฅธ์ชฝ์ ์ ๋ฌ๋ ํด๋์ค ํ์ ์ด๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ์๋๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค. ๋ง์ฝ์ ์ฐธ์กฐ ๋ณ์๊ฐ null์ ๊ฐ๋ฆฌํค๊ณ ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
์์ 1) ๋ถ๋ชจ ํด๋์ค
public class Parent {
}
์์ 2) ์์ ํด๋์ค
public class Child extends Parent{
}
์์ 3) ๊ฐ์ฒด ํ์ ํ์ธ
public class InstanceofExample {
public static void method1(Parent parent) { //static: new ์ ์ฐ๊ณ ํธ์ถํ๋ ค๊ณ ์ด๋ค.
if(parent instanceof Child) {//๊ฒ์ฆ: ๋ง์ผ๋ฉด true, ํ๋ฆฌ๋ฉด false
Child child = (Child) parent;
System.out.println("method1 - Child๋ก ๋ณํ ์ฑ๊ณต");
} else {
System.out.println("method1 - Child๋ก ๋ณํ๋์ง ์์");
}
}
public static void method2(Parent parent) {//๊ฒ์ฆX
Child child = (Child) parent; //์๋ฌ, ์์ธ์ฒ๋ฆฌ
System.out.println("method1 - Child๋ก ๋ณํ ์ฑ๊ณต");
}
public static void main(String[] args) { //๋จผ์ ์คํ
//๋ถ๋ชจ ํด๋์ค <- ์์ ํด๋์ค
Parent parentA = new Child();
method1(parentA); //๊ฐ์ ํด๋์ค์์ ํธ์ถ์ด๋ฏ๋ก ํด๋์ค ์ด๋ฆ ์๋ตํจ.
method2(parentA);
Parent parentB = new Parent();
method1(parentB); //false๊ฐ ์คํ: "Child๋ก ๋ณํ๋์ง ์์"
method2(parentB); //์์ธ ๋ฐ์
}
}
๊ฒฐ๊ณผ)
method1 - Child๋ก ๋ณํ ์ฑ๊ณต
method1 - Child๋ก ๋ณํ ์ฑ๊ณต
method1 - Child๋ก ๋ณํ๋์ง ์์
Exception in thread "main" java.lang.ClassCastException: ch07_2_5.Parent cannot be cast to ch07_2_5.Child
at ch07_2_5.InstanceofExample.method2(InstanceofExample.java:14)
at ch07_2_5.InstanceofExample.main(InstanceofExample.java:25)
๋ง๋ฌด๋ฆฌ p. 353
5๊ฐ์ง ํค์๋๋ก ๋๋ด๋ ํต์ฌ ํฌ์ธํธ
1) ํด๋์ค ํ์
๋ณํ: ๋ค๋ฅธ ํด๋์ค ํ์
์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋์
ํ๋ ๊ฒ์ ๋งํ๋ค.
2) ์๋ ํ์
๋ณํ: ์์ ๊ฐ์ฒด๋ฅผ ๋ถ๋ชจ ํ์
๋ณ์์ ๋์
ํ ๋์๋ ์๋์ผ๋ก ํ์
์ด ๋ณํ๋๋ค.
(์ฐธ์กฐ ํ์
: ๋ถ๋ชจํด๋์ค ← ์์ ํด๋์ค)
3) ๊ฐ์ ํ์
๋ณํ: ์์ ๊ฐ์ฒด๊ฐ ๋ถ๋ชจ ํ์
์ผ๋ก ๋ณํ๋ ์ํ์์ ๋ค์ ์๋๋๋ก ์์ ํ์
์ผ๋ก ๋ณํํ๊ณ ์ ํ ๋ ์บ์คํ
() ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ๊ฐ์ ํ์
๋ณํํ ์ ์๋ค.
๊ฐ์ ํ์
๋ณํ (์ฐธ์กฐ ํ์
: ์์ ํด๋์ค ← (์์ ํด๋์ค) ๋ถ๋ชจ ํด๋์ค)
์์ ) p.355 3๋ฒ ๋ฌธ์
A ๋ถ๋ชจ ํด๋์ค, B ์์ ํด๋์ค์ธ ์ํฉ์์
A a = new B(); //์ ํ ํ
B b = (B) a; ๊ฐ๋ฅํ๋ค.
4) instanceof ์ฐ์ฐ์: ๊ฐ์ฒด๊ฐ ์ด๋ค ํ์
์ธ์ง ์กฐ์ฌํ ๋ instanceof ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค. ์ฃผ๋ก ๊ฐ์ ํ์
๋ณํ ์ ์ ๋ณํ์ด ๊ฐ๋ฅํ์ง ์กฐ์ฌํ ๋ ์ฌ์ฉํ๋ค.
5) ๋คํ์ฑ: ๊ฐ์ฒด ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋์ผํ์ง๋ง ์คํ๊ฒฐ๊ณผ๊ฐ ๋ค์ํ๊ฒ ๋์ค๋ ์ฑ์ง์ ๋งํ๋ค.
๋คํ์ฑ์ ๊ตฌํํ๋ ๊ธฐ์ ์ 1. ๋ฉ์๋ ์ฌ์ ์์ 2. ํ์
๋ณํ์ด๋ค.
์์ ๊ฐ์ฒด๊ฐ ์ฌ์ ์๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ ๊ฒฝ์ฐ, ๋ถ๋ชจ ํ์
์ผ๋ก ์๋ ํ์
๋ณํ ํ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ฌ์ ์๋ ์์ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด์ ๋ค์ํ ์คํ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
//๋ถ๋ชจ ํด๋์ค
class Tire{
}
//์์ ํด๋์ค
class HankookTire extends Tire{
}
//์์ ํด๋์ค
class KumhoTire extends Tire{
}
class CarExample{
public static void main(String[] args){
//๋ถ๋ชจํด๋์ค = ์์ํด๋์ค
Tire t = new HankookTire
Q2) ์ถ๋ ฅ ๊ฒฐ๊ณผ ์์๋ณด๊ธฐ
์ฝ๋ 1)
public class Tire {
public void run() {
System.out.println("์ผ๋ฐ ํ์ด์ด๊ฐ ๊ตด๋ฌ๊ฐ๋๋ค.");
}
}
์ฝ๋ 2)
public class SnowTire extends Tire{
//๋ฉ์๋ ์ฌ์ ์(์ค๋ฒ๋ผ์ด๋ฉ)
public void run() {
System.out.println("์ค๋
ธ์ฐ ํ์ด์ด๊ฐ ๊ตด๋ฌ๊ฐ๋๋ค.");
}
}
์ฝ๋ 3)
public class SnowTireExample {
public static void main(String[] args) {
SnowTire snowTire = new SnowTire();
//์ฐธ์กฐ ์๋ ํ์
๋ณํ
Tire tire = snowTire;
snowTire.run();
tire.run();
}
}
๊ฒฐ๊ณผ)
์์ ๊ฐ์ฒด๊ฐ ์ฌ์ ์๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ ๊ฒฝ์ฐ, ๋ถ๋ชจ ํ์
์ผ๋ก ์๋ ํ์
๋ณํ ํ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ฌ์ ์๋ ์์ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด์ ๋ค์ํ ์คํ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ค๋
ธ์ฐ ํ์ด์ด๊ฐ ๊ตด๋ฌ๊ฐ๋๋ค.
์ค๋
ธ์ฐ ํ์ด์ด๊ฐ ๊ตด๋ฌ๊ฐ๋๋ค.
Q3)
A ๋ถ๋ชจ ํด๋์ค, B ์์ ํด๋์ค์ธ ์ํฉ์์
A a = new B(); //์ ํ ํ
B b = (B) a; ๊ฐ๋ฅํ๋ค.
Q5) service.login() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ถ๋ ฅ๋๋ ๋ด์ฉ์ ๊ตฌํ๋ผ.
(๋ถ๋ชจ) Service ← MemberService ← AService (์์)
์ ์ฒด ์ฝ๋)
์ฝ๋ 1) Service.java
package ch07_exercise;
//[1]
public class Service {
public void login() {
System.out.println("๋ก๊ทธ์ธ");
}
}
์ฝ๋ 2) MemberSerive.java
package ch07_exercise;
//[2]
public class MemberService extends Service {
public void login() {
System.out.println("๋ฉค๋ฒ ๋ก๊ทธ์ธ");
}
}
์ฝ๋ 3) AService.java
package ch07_exercise;
//[3]
public class AService extends MemberService {
public void login() {
System.out.println("A ๋ก๊ทธ์ธ");
}
}
์ฝ๋ 4) ServiceExample.java
0x100 | ||
controller | 0x100 <--- | Controller |
service | ||
public void setService(MemberService service) { this.service = service; } |
package ch07_exercise;
//[4]
public class ServiceExample {
public static void main(String[] args) {
Controller controller = new Controller();
controller.setA(10);
controller.setService(new MemberService());
controller.service.login();//์ถ๋ ฅ ๊ฒฐ๊ณผ: ๋ฉค๋ฒ ๋ก๊ทธ์ธ
controller.setService(new AService());
controller.service.login();//์ถ๋ ฅ ๊ฒฐ๊ณผ: A ๋ก๊ทธ์ธ
}
}
์ฝ๋ 5) Controller.java
์ฝ๋ [4]์ ํจ๊ป ๋ณด๊ธฐ :)
int a = 10;
MemberService service = new MemberService()
MemberService service = new AService()
package ch07_exercise;
//[5]
public class Controller {
public MemberService service;
public void setA(int a) {
this.a = a;
}
public void setService(MemberService service) {
this.service = service;
}
}
๊ฒฐ๊ณผ)
๋ฉค๋ฒ ๋ก๊ทธ์ธ
A ๋ก๊ทธ์ธ