[Day17] Java 17 - μμ‘΄μ± μ£Όμ , μμ, μ€λ²λΌμ΄λ©, μ΄λ Έν μ΄μ @
[Day17] Java 17 [8/31]
1. has-a κ΄κ³ (μμ κ΄κ³)
μμ‘΄μ± μ£Όμ (DI, Dependency Injection) : https://dev-coco.tistory.com/70
ex) λͺ¨λ μλμ°¨ engine κ΅μ²΄ν΄μΌν λ νλμ© κ΅μ²΄ν μ μκΈ° λλ¬Έμ μμ‘΄μ± μ£Όμ νλ κ²½μ°
Car ν΄λμ€
// μλμ°¨ ν΄λμ€ μ μΈλΆ
public class Car {
// νλ
String name;
String gearType;
int door;
// ν΄λμ€ κ°μ²΄;
private Engine engine = null;
//private Engine engine = new Engine(); // λͺ
μμ μ΄κΈ°ν
// μΈμ€ν΄μ€ μ΄κΈ°ν λΈλ
/*
{
this.engine = new Engine();
}
*/
// getter , setter
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
// μμ±μ
Car(){
// this.engine = new Engine();
}
public Car(String name, String gearType) {
// this.engine = new Engine();
this();
this.name = name;
this.gearType = gearType;
}
public Car(String name, String gearType, Engine engine) {
this(name, gearType);
this.engine = engine;
}
// λ©μλ
void speedUp(int fuel) {
// μ°Έμ‘°ν - μΈμ€ν΄μ€ X, λ°°μ΄ X
// engine λμ΄λ€.
this.engine.moreFuel(fuel); // μ΄ μ½λ©μμ java.lang.NullPointerException μμΈ λ°μνλ€.
}
void speedDown(int fuel) {
this.engine.lessFuel(fuel);
}
void stop() {
this.engine.stop();
}
} // class
Engine ν΄λμ€
// μμ§ ν΄λμ€ μ μΈλΆλΆ
public class Engine {
// νλ
double speed;
// μμ±μ
public Engine() {}
// λ©μλ
void moreFuel( int fuel ) {
this.speed += fuel * 0.05;
}
void lessFuel( int fuel ) {
this.speed -= fuel * 0.05;
}
void stop() {
this.speed = 0;
}
} // class
1) setter μ£Όμ
Car car1 = new Car("K9", "Auto");
car1.setEngine(engine);
2) constructor μ£Όμ (κΆμ₯)
Engine engine = new Engine();
Car car1 = new Car("K9", "Auto", engine);
* νμ©
//μ€νΌλ μ€μ
car1.speedUp(10);
// μ€νΌλ μΆλ ₯
System.out.printf( "> μ°¨ μ€νΌλ = %f \n" , car1.getEngine().speed );
2. is-a κ΄κ³ (μμκ΄κ³)
μμ
1) μμμ΄λ? : κΈ°μ‘΄ ν΄λμ€λ₯Ό μ¬μ¬μ©ν΄μ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±νλ κ²
2) μ₯μ : μ½λ μ¬μ¬μ©, μ€λ³΅ μ κ±° -> μμ°μ± ν₯μ / μ μ§λ³΄μ νμ₯μ± μ©μ΄
3) μ μΈ νμ
[μ μ§] [κΈ°μ ] class ν΄λμ€λͺ
extends superν΄λμ€{
}
4) λͺ μΉ
κΈ°μ‘΄ ν΄λμ€ == λΆλͺ¨(parent) ν΄λμ€ == μμ(super) ν΄λμ€ == κΈ°μ΄(base) ν΄λμ€
μλ‘μ΄ ν΄λμ€ == μμ(child) ν΄λμ€ == νμ(sub) ν΄λμ€ == νμ(derived) ν΄λμ€
5) μ΄λ€ κ±Έ μμ?
super ν΄λμ€μ ꡬμ±μμ(νλ,λ©μλ == λ©€λ²)λ₯Ό μμνλ€.
μμ±μ μμ X (μ΄κΈ°ν λΈλ‘λ μμ X)
6) this VS super
this : μΈμ€ν΄μ€(ν΄λμ€ μκΈ° μμ )μ μ£Όμκ°μ κ°λ μ°Έμ‘°λ³μ
super : λΆλͺ¨ μΈμ€ν΄μ€μ μ£Όμκ°μ κ°λ μ°Έμ‘°λ³μ
7) λ€μ€ μμ
λ€μ€μμ λΆκ°!!
but [μμ -> μμ] μ κ°λ₯
public class Ex06 {
public static void main(String[] args) {
GrandChild gc = new GrandChild();
gc.p = 1; // Parent
gc.c = 2; // Child
gc.g = 3; // GrandChild
} // main
} // class
//class Parent extends Object{
class Parent{
int p;
}
class Child extends Parent{
int c;
}
class GrandChild extends Child{
int g;
}
8) Object ν΄λμ€
λͺ¨λ ν΄λμ€μ μ΅μμ λΆλͺ¨ν΄λμ€λ java.lang.Object ν΄λμ€μ΄λ€.
9) μμ νΈμΆ μμ
employee λΆλͺ¨ κ°μ²΄ λ¨Όμ μ μΈ (λΆλͺ¨ μΈμ€ν΄μ€ λ¨Όμ )-> μμ μΈμ€ν΄μ€ νΈμΆ
μμ
public class Ex07 {
public static void main(String[] args) {
// κ°μ²΄(ν΄λμ€) λ°°μ΄ μ΄κΈ°ν
Point [] p = {
new Point(1,1),
new Point(10, 100),
new Point(120, 15)
};
Triangle t = new Triangle(p);
// Shape μμλ νλ, λ©μλ
t.color = "red";
t.draw();
} // main
} // class
// The type Point is already defined Ex05.java λͺ¨λ μ£Όμ μ²λ¦¬.
class Point{
int x, y;
Point(){}
Point(int x, int y){
this.x = x;
this.y = y;
}
String getPoint() {
return String.format("(%d,%d)", this.x, this.y);
}
}
// λν ν΄λμ€ - μΌκ°ν, μ, μ¬κ°ν, λ§λ¦λͺ¨ λ±λ±
class Shape{
// νλ
String color = "black";
// λ©μλ
void draw() {
System.out.printf("[Color=%s]\n", this.color);
}
}
// class Circle extends Shape extends Point{
// class Circle extends Shape, Point{
// μλ°λ λ€μ€ μμμ μ§μνμ§ μμ΅λλ€.
class Circle extends Shape{
// μμ
Point center; // has-a κ΄κ³
int r; // radius λ°μ§λ¦
Circle(){
this( new Point(0,0) , 100) ;
}
Circle(Point center, int r) {
this.center = center;
this.r = r;
}
}
class Triangle extends Shape{
// μ 3
Point [] p = new Point[3];
Triangle( Point [] p ) {
this.p = p;
}
}
class Rectangle extends Shape{
// μ 4
Point [] p= new Point[3];
Rectangle( Point [] p) {
this.p = p;
}
}
3. μ€λ²λΌμ΄λ© 쑰건
λ§ν¬ : https://m.blog.naver.com/PostView.naverisHttpsRedirect=true&blogId=heartflow89&logNo=220961515893
1) λ©μλλͺ λμΌ
2) 맀κ°λ³μ λμΌ
3) 리ν΄μλ£ν λμΌ
4) μ κ·Όμ§μ μλ λ²μκ° κ°κ±°λ λκ² μ€μ ν μ μλ€.
μ) protected ~ -> public
private < [default] < protected < public
5) μΈμ€ν΄μ€ λ©μλ <-> static λ©μλ X
6) μμΈλ λ λ§μ΄ μ μΈν μ μλ€.
4. μ΄λ Έν μ΄μ
μ΄λ Έν μ΄μ annotation
ex) @Override
- μ μ : νλ‘κ·Έλ¨μ μμ€μ½λ© μμ λ€λ₯Έ νλ‘κ·Έλ¨μ μν μ 보λ₯Ό 미리 μ½μλ νμμΌλ‘ ν¬ν¨μν¨ κ²
- μ₯μ : μ΄λ Έν μ΄μ μ λ§μΉ μ£Όμμ²λΌ νλ‘κ·Έλλ° μΈμ΄μ μν₯μ λ―ΈμΉμ§ μμΌλ©΄μλ λ€λ₯Έ νλ‘κ·Έλ¨μκ² μ μ©ν μ 보λ₯Ό μ 곡