jungeunlee95 / java-oop

Pratice OOP with java๐ŸŒผ

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[TOC]



< ์ž๋ฐ”์˜ ๋งฅ๋ฝ >

๊ธฐ๋ณธํ”„๋กœ๊ทธ๋ž˜๋ฐ

๊ฐ์ฒด์ง€ํ–ฅ๊ฐœ๋…

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

Java API

Thread / network programming

servlet / jsp

spring mvc


๊ธฐ๋ณธํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋ณ€์ˆ˜ = ์ €์žฅ๊ณต๊ฐ„์˜ ์‹ฌ๋ณผ์ž„(๋ฉ”๋ชจ๋ฆฌ์ฃผ์†Œ)

uml ์ž๋ฐ” ์ฑ…, cbd ์ฑ… ์ถ”์ฒœ


Swap Test

java-oop/src/swap/SwapTest.java

int๋ฅผ ๋ณด๋‚ผ๊ฒฝ์šฐ, stack์˜์—ญ์— ๊ฐ๊ฐ์˜ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๊ฐ€ ์ƒ๊น€!

Value๊ฐ™์€ ๊ฒฝ์šฐ๋Š” heap์•  ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๋ณ€์ˆ˜๋ฅผ ๋ฌถ์–ด์„œ ์ฃผ์†Œ๊ฐ’์„ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์—

๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ, ๊ทธ ์ฃผ์†Œ์˜ ๊ฐ์ฒด์•ˆ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œํ‚ค๊ธฐ์— ๊ฐ€๋Šฅํ•จ!


์ž๋ฐ” OOP ์—ฐ์Šต

๊ฐ„๋‹จํ•œ ๊ทธ๋ฆผํŒ

1. ๊ฐ„๋‹จํ•œ ์ขŒํ‘œ์— ์  ์ฐ๊ธฐ!

paint/Point.java

package paint;
public class Point {
	private int x;
	private int y;
	
    public Point() {
		super();
	} // ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•จ!
    
	public Point(int x, int y) {
		this.x = x;
		this.y = y;		
	}
	public void show() {
		System.out.println("์  ( " + this.x + ", " + this.y + ")์— ์ ์„ ์ฐ์—ˆ์Šต๋‹ˆ๋‹ค.");
	}
	
}

paint/MainApp.java

package paint;

public class MainApp {

	public static void main(String[] args) {
		Point p1 = new Point(10, 20);
		drawPoint(p1);
	}
	
	public static void drawPoint(Point point) {
		point.show();
	}
}
์  ( 10, 20)์— ์ ์„ ์ฐ์—ˆ์Šต๋‹ˆ๋‹ค.

2. ์ƒ‰์ด ์žˆ๋Š” ์ 

Point ์ ์„ ์ƒ์†๋ฐ›์€ ColorPoint๋ฅผ ๋งŒ๋“ ๋‹ค!

1557455929088

Point.java >> getter, setter๋ฅผ ๋งŒ๋“œ๋Š”๊ฒŒ ์ข‹์ง€๋งŒ ์—ฐ์Šต์ด๋‹ˆ๊นŒ ๊ทธ๋ƒฅ protected!

	protected int x;
	protected int y;

paint/ColorPoint.java

public class ColorPoint extends Point {
	private String color;
    
	public ColorPoint(int x, int y, String color) {
		super(x, y);  // ๋ถ€๋ชจ์— ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์—†์„๊ฒฝ์šฐ, ๊ฑฐ๊ธฐ ์žˆ๋Š” ์ƒ์„ฑ์ž์— ๋งž์ถฐ ๋„ฃ์œผ๋ฉด ๋จ
		this.color = color;
	}
    
    @Override
	public void show() {
		System.out.println("์ขŒํ‘œ ( " + this.x + ", " + this.y + ")์— "+ this.color +"์ ์„ ์ฐ์—ˆ์Šต๋‹ˆ๋‹ค.");
	}
}

Point.java >> getter, setter๋ฅผ ๋งŒ๋“œ๋Š”๊ฒŒ ์ข‹์ง€๋งŒ ์—ฐ์Šต์ด๋‹ˆ๊นŒ ๊ทธ๋ƒฅ protected!

	protected int x;
	protected int y;

MaintApp.java

package paint;
public class MainApp {

	public static void main(String[] args) {
		Point p1 = new Point(10, 20);
		// ์ ์ฐ๊ธฐ
		drawPoint(p1);
		
		ColorPoint p2 = new ColorPoint(50,  100,  "red");
		drawPoint(p2);
	}
	
	public static void drawPoint(Point point) {
		point.show();
	}
	
	public static void drawPoint(ColorPoint colorPoint) {
		colorPoint.show();
	}
}
์ขŒํ‘œ ( 10, 20)์— ์ ์„ ์ฐ์—ˆ์Šต๋‹ˆ๋‹ค.
์ขŒํ‘œ ( 50, 100)์— red์ ์„ ์ฐ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ!!

ColorPoint p2 = new ColorPoint(50, 100, "red"); ์—์„œ ๋ถ€๋ชจ๋กœ ๋ฐ›์œผ๋ฉด ์ข‹์ž–์•„??

Point p2 = new ColorPoint(50, 100, "red");

๊ทธ๋Ÿผ Main์—์„œ drawPoint()๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ ํ•  ํ•„์š” ์—†์Œ!

MainApp.java

package paint;
public class MainApp {
    
	public static void main(String[] args) {
		Point p1 = new Point(10, 20);
		// ์ ์ฐ๊ธฐ
		drawPoint(p1);
		
		Point p2 = new ColorPoint(50,  100,  "red");
		drawPoint(p2);
	}
	
	public static void drawPoint(Point point) {
		point.show();
	}

}

3. ์  ์ง€์šฐ๊ธฐ

Point.java

public void show(boolean visible) {
    if(visible) {			
        System.out.println("์ขŒํ‘œ (" + this.x + ", " + this.y + ")์— ์ ์„ ์ฐ์—ˆ์Šต๋‹ˆ๋‹ค.");
    }else {
        System.out.println("์ขŒํ‘œ (" + this.x + ", " + this.y + ")์— ์ ์„ ์ง€์› ์Šต๋‹ˆ๋‹ค.");
    }
}

MainApp.java

		p1.show(false);
		p2.show(false);

p2.show(true); ๋ฅผ ๋ถ€๋ฅด๋ฉด ์ƒ‰๊น”์ ์ด ์•ˆ์ฐํžˆ๊ณ  ๊ทธ๋ƒฅ ์ ๋งŒ ์ฐํž˜

--> ColorPoint.java ์—์„œ๋„ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์•ผํ•จ!

Point.java ์—์„œ ์˜ค๋ฒ„๋ผ์ด๋“œ๋ฅผ ์ด๋ฏธ ํ•œ show() ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ฉด ๋จ!!

public void show(boolean visible) {
    if(visible) {			
//System.out.println("์ขŒํ‘œ (" + this.x + ", " + this.y + ")์— ์ ์„ ์ฐ์—ˆ์Šต๋‹ˆ๋‹ค.");
        show();
        return;
    }
    System.out.println("์ขŒํ‘œ (" + this.x + ", " + this.y + ")์— ์ ์„ ์ง€์› ์Šต๋‹ˆ๋‹ค.");
}

4. ๋„ํ˜• ๊ทธ๋ฆฌ๊ธฐ

- ์‚ผ๊ฐํ˜•

์ด์ œ๋ถ€ํ„ด ์ขŒํ‘œ(๋ฐ์ดํ„ฐ) ์‹ ๊ฒฝ ์•ˆ์“ฐ๊ณ  ํ™•์ธ๋งŒ ํ•˜๊ฒ ์Œ

Triangle.java

package paint;
public class Triangle {
	private int x1;
	private int x2;
	private int x3;
	private int y1;
	private int y2;
	private int y3;
	
	private String fillColor;
	private String lineColor;
	
	public void draw() {
		System.out.println("์‚ผ๊ฐํ˜•์„ ๊ทธ๋ ธ์Šต๋‹ˆ๋‹ค.");
	}
}

MainApp.java

		Triangle triangle = new Triangle();
		drawTriangle(triangle);
	public static void drawTriangle(Triangle triangle) {
		triangle.draw();
	}

๊ทผ๋ฐ! ์‚ผ๊ฐํ˜•๋งŒ ๋งŒ๋“ค๊ฑฐ์•ผ?

์‚ฌ๊ฐํ˜•, ์˜ค๊ฐํ˜• .. ๋“ฑ ๋„ํ˜•์€ ๊ณ„์† ์ƒ๊ธฐ์ž–์•„

๋„ํ˜•์„ ์ถ”์ƒํด๋ž˜์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉด ์–ด๋–จ๊นŒ?

- ์‚ฌ๊ฐํ˜•

Shape.java

package paint;

public abstract class Shape {
	
	private String fillColor;
	private String lineColor;
	
	public abstract void draw();
	
}

ํ˜„์žฌ ์–ด๋–ค ๋„ํ˜•์„ ๊ทธ๋ฆด์ง€ ์•„์ง ๋ชฐ๋ผ, ๊ตฌํ˜„์€ ์ž์‹์—๊ฒŒ ๋งก๊ธด๋‹ค!

Triangle.java

package paint;
public class Triangle extends Shape {
	private int x1;
	private int x2;
	private int x3;
	private int y1;
	private int y2;
	private int y3;
	
	@Override
	public void draw() {
		System.out.println("์‚ผ๊ฐํ˜•์„ ๊ทธ๋ ธ์Šต๋‹ˆ๋‹ค.");
	}
}

Rect.java

package paint;

public class Rect extends Shape {
	private int x1;
	private int x2;
	private int x3;
	private int x4;
	
	private int y1;
	private int y2;
	private int y3;
	private int y4;
	
	@Override
	public void draw() {
		// TODO Auto-generated method stub
		System.out.println("์‚ฌ๊ฐํ˜•์„ ๊ทธ๋ ธ์Šต๋‹ˆ๋‹ค.");
	}
}

MainApp.java

package paint;

public class MainApp {

	public static void main(String[] args) {
		// ์  ์ฐ๊ธฐ
		Point p1 = new Point(10, 20);
		drawPoint(p1);
		
		// ์ƒ‰๊น” ์  ์ฐ๊ธฐ
		Point p2 = new ColorPoint(50,  100,  "red");
//		drawPoint(p2);
		p2.show(true);
		
		// ์  ์ง€์šฐ๊ธฐ
		p1.show(false);
		p2.show(false);
		
		Shape triangle = new Triangle();
		draw(triangle);
		
		Shape rect = new Rect();
		draw(rect);
		
	}
	
	public static void drawPoint(Point point) {
		point.show();
	}
	
	public static void draw(Shape shape) {
		shape.draw();
	}
}

- ์›

Circle.java

package paint;
public class Circle extends Shape {
	private int x;
	private int y;
	private int radius;
	
	@Override
	public void draw() {
		System.out.println("์›์„ ๊ทธ๋ ธ์Šต๋‹ˆ๋‹ค.");
	}
}

MainApp.java

		Shape circle = new Circle();
		draw(circle);

๋ฌธ์ œ!!

Point๊นŒ์ง€ ํฌํ•จํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์œผ๋ฉด

interface๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•จ

-> Shape๋ฅผ Point๊ฐ€ ์ƒ์†๋ฐ›์œผ๋ฉด fillColor ๋“ฑ ํ•„์š”์—†๋Š”๊ฒƒ๋„ ์ƒ์†๋ฐ›์•„์•ผํ•˜์ž–์•„!


5. interface

Drawable.java

package paint;

public interface Drawable{
	void draw();
}

Shape.java

package paint;

public abstract class Shape implements Drawable{
	
	private String fillColor;
	private String lineColor;
    
    public abstract float calcArea();
	// ์ž์‹์—์„œ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•˜๋ฉด ๋จ
}

์ž์‹ ํด๋ž˜์Šค๋“ค

	@Override
	public float calcArea() {
		return 0.f;
	}

Point.java

package paint;

public class Point implements Drawable {
    ...
    ...
        
	@Override
	public void draw() {
		show();
	}

}

MainApp.java ์ˆ˜์ •

package paint;

public class MainApp {

	
	public static void main(String[] args) {
		// ์  ์ฐ๊ธฐ
		Point p1 = new Point(10, 20);
		draw(p1);
		
		// ์ƒ‰๊น” ์  ์ฐ๊ธฐ
		Point p2 = new ColorPoint(50,  100,  "red");
		draw(p2);
		
		// ์  ์ง€์šฐ๊ธฐ
		p1.show(false);
		p2.show(false);
		
		Shape triangle = new Triangle();
		draw(triangle);
		
		Shape rect = new Rect();
		draw(rect);
		
		Shape circle = new Circle();
		draw(circle);
		
	}
	
	public static void draw(Drawable drawable) {
		drawable.draw();
	}

}

๋ฉ”์†Œ๋“œ ํ•˜๋‚˜๋กœ ๋ชจ๋‘ ๋‹ค ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ๋จ!!!!!!


์–ผ๋งˆ๋‚˜ ํ™•์žฅ์„ฑ์ด ๋†’์•„์ง€๊ณ  ๊ฐ„ํŽธํ•ด ์กŒ๋Š”์ง€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด๋ณผ๊นŒ??


6. ํ…์ŠคํŠธ ๊ทธ๋ฆฌ๊ธฐ

GraphicString.java

package paint;

public class GraphicString implements Drawable {
	
	private String text;

	public GraphicString(String text) {
		this.text = text;
	}

	@Override
	public void draw() {
		System.out.println(text + "๋ฅผ ๊ทธ๋ ธ์Šต๋‹ˆ๋‹ค.");

	}
}

MainApp.java

draw(new GraphicString("hello~~"));

์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€, ์ˆ˜์ •์—†์ด ๋”ฑ ํ•œ์ค„๋กœ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ!


package ๋‚˜๋ˆ„๊ธฐ

1557464968766


Object

1. ObjectTest01.java

- getClass()

reflection : ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ํด๋ž˜์Šค๋กœ ์ƒ์„ฑ๋๋Š”์ง€

package object.text;
public class ObjectTest01 {
    public static void main(String[] args) {
        Point p = new Point(10, 20);

        System.out.println(p.getClass()); 
    }
}

class object.text.Point

- hashCode()

address ๊ธฐ๋ฐ˜์˜ hashing๊ฐ’

: hashing? = ์•Œ๊ณ ๋ฆฌ์ฆ˜์ƒ ๋นจ๋ฆฌ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ

๋งคํ•‘์œผ๋กœ ๋ณ€์ˆ˜์— ์ €์žฅ๋˜๋Š” ๊ฐ’์€ reference๊ฐ’์ด ๋งž์ง€๋งŒ,

์ถœ๋ ฅ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์€ reference๊ฐ’์ด ์•„๋‹๊ฑฐ๋ผ๊ณ  ์ถ”์ธกํ•œ๋‹ค!

(๋ฌผ๋ก  ์ฃผ์†Œ๋„ ์•„๋‹๋“ฏ)

System.out.println(p.hashCode());

366712642

- toString()

getClass() + "@" + hashCode()

		System.out.println(p);
		System.out.println(p.toString());

println์— ๊ฐ์ฒด๋ฅผ ๋„ฃ์œผ๋ฉด ์ž๋™์œผ๋กœ toString()์„ ๋ถˆ๋Ÿฌ์˜ด

object.text.Point@15db9742



2. ObjectTest02.java

- ==

๋‘ ๊ฐ์ฒด์˜ ๋™์ผ์„ฑ ๋น„๊ต (๊ฐ™์€ ๊ฐ์ฒด๋ƒ!)

package object.text;

public class ObjectTest02 {

	public static void main(String[] args) {
		Point p1 = new Point(10, 20);
		Point p2 = new Point(10, 20);
		Point p3 = p2;
		
		System.out.println(p1==p2);
		System.out.println(p2==p3);
	}
}
false
true

- equals()

๋‘ ๊ฐ์ฒด์˜ ๋™์งˆ์„ฑ์„ ๋น„๊ตํ•œ๋‹ค. (๋‚ด์šฉ ๋น„๊ต)

	System.out.println(p1.equals(p2));
	System.out.println(p2.equals(p3));
false
true

โ€‹ ๋ญ์•ผ! ๋‹ค ๊ฐ™์€๋ฐ ์™œ fasle๋‚˜์˜ค๋Š”๋ฐ?

1557466155366

โ€‹ equals์˜ ์›๋ž˜ ๊ตฌํ˜„์€ ๋™์ผ์„ฑ(==) ๊ณผ ๊ฐ™๊ฒŒ ๊ตฌํ˜„๋˜์–ด์žˆ์–ด

โ€‹ ๊ทธ๋ž˜์„œ ์˜ค๋ฒ„๋ผ์ด๋“œ๋ฅผ ํ•ด์ค˜์•ผํ•ด ๋‚ด์šฉ๋น„๊ต๋ฅผ ํ•˜๊ณ ์‹ถ์œผ๋ฉด

Point.java -> alt+s ๋กœ ์˜ค๋ฒ„๋ผ์ด๋“œ ์ถ”๊ฐ€

...	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + x;
		result = prime * result + y;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Point other = (Point) obj;
		if (x != other.x)
			return false;
		if (y != other.y)
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "Point [x=" + x + ", y=" + y + "]";
	} // ๋‚ด์šฉ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

equals๋Š” hashcode์™€ ๊ฐ™์ด ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์ค˜์•ผ ์„ฑ๋Šฅ์ด ์ข‹์•„์ง

-> ์–ด๋–ค ๊ฐ์ฒด์˜ ๋™์งˆ์„ฑ์„ ๋น„๊ตํ• ๋•Œ๋Š” ํ•ญ์ƒ hashcode๋ฅผ ๋ฝ‘์•„์„œ ๋น„๊ต๋ฅผํ•จ

- String / hashCode()

		// String
		String s1 = new String("ABC");
		String s2 = new String("ABC");
		System.out.println(s1 == s2);
		System.out.println(s1.equals(s2));
		System.out.println(s1.hashCode() + " : " + s2.hashCode());
        System.out.println(System.identityHashCode(s1) + " : " + System.identityHashCode(s2) );
false
true  
64578 : 64578
366712642 : 1829164700

๋‹ค๋ฅธ ๊ฐ์ฒด๋‹ˆ๊นŒ ๋™์ผ์„ฑ์—์„  false

  • identityHashCode : override๋˜๊ธฐ ์ „ ํ•ด์‹œ์ฝ”๋“œ!

HashCode / identityHashCode

  • HashCode๋Š” ๋‚ด์šฉ๊ธฐ๋ฐ˜
  • identityHashCode ๋Š” ์ฃผ์†Œ๊ธฐ๋ฐ˜!

๊ทผ๋ฐ

String s = "ABC"; ์ด๊ฑด ์–ด๋–ป๊ฒŒ ๊ฐ€๋Šฅํ•ด! ๊ฐ์ฒด์— new๋ฅผ ์•ˆํ•˜๊ณ !!!!

    String s3 = "ABC";
    String s4 = "ABC";

    System.out.println(s3 == s4);
    System.out.println(s3.equals(s4));
    System.out.println(s3.hashCode() + " : " + s4.hashCode());
    System.out.println(System.identityHashCode(s3) + " : " + System.identityHashCode(s4) );	
true
true
64578 : 64578
2018699554 : 2018699554

๋ญ์•ผ! ๋‚ด๋ถ€์ ์œผ๋กœ ์•Œ์•„์„œ new ํ•˜๊ณ  ๋งŒ๋“ ๋‹ค๋ฉด,, ์™œ ์ด ๊ฐ’์ด ๋‹ค ๊ฐ™์€๊ฑฐ์•ผ?

--> String Constant Pool์„ ์•ˆ๊ฑฐ์น˜๊ธฐ๋•Œ๋ฌธ!!!

1557468977429


3. ObjectTest03.java

- HashSet

package object.text;

import java.util.HashSet;
import java.util.Set;

public class ObjectTest03 {

	public static void main(String[] args) {
		Set<Point> set = new HashSet<Point>();
		
		Point p1 = new Point(10,20);
		set.add(p1);
		
		Point p2 = new Point(100,200);
		set.add(p2);
		
		Point p3 = p1;
		set.add(p3);
		
		for(Point p : set) {
			System.out.println(p);
		}
	}
}
Point [x=100, y=200]
Point [x=10, y=20]

๋งŒ์•ฝ Point์˜ HashCode() ๋ฉ”์†Œ๋“œ๋ฅผ ์ง€์šฐ๊ณ  ์‹คํ–‰ํ•˜๋ฉด?

Point [x=100, y=200]
Point [x=10, y=20]
Point [x=10, y=20]

3๊ฐœ๊ฐ€ ๋“ค์–ด๊ฐ!


About

Pratice OOP with java๐ŸŒผ


Languages

Language:Java 100.0%