πŸ‘¨‍πŸ’» Web Development/Java

[Day17] Java 17 - μ˜μ‘΄μ„± μ£Όμž…, 상속, μ˜€λ²„λΌμ΄λ”©, μ–΄λ…Έν…Œμ΄μ…˜@

Kim_dev 2022. 9. 12. 16:36

[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

- μ •μ˜ : ν”„λ‘œκ·Έλž¨μ˜ μ†ŒμŠ€μ½”λ”© μ•ˆμ— λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ„ μœ„ν•œ 정보λ₯Ό 미리 μ•½μ†λœ ν˜•μ‹μœΌλ‘œ ν¬ν•¨μ‹œν‚¨ 것 

- μž₯점 : μ–΄λ…Έν…Œμ΄μ…˜μ€ 마치 μ£Όμ„μ²˜λŸΌ ν”„λ‘œκ·Έλž˜λ° 언어에 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμœΌλ©΄μ„œλ„ λ‹€λ₯Έ ν”„λ‘œκ·Έλž¨μ—κ²Œ μœ μš©ν•œ 정보λ₯Ό 제곡