Java OOP
๐ Java OOP
๐ Java OOP
- ๐ Java OOP * ํ์ค์ ๊ทธ๋๋ก ์ฎ๊ธด๋ค * โป๏ธ ์ฌ์ฌ์ฉํ๋ค๋ ์๋ฏธ * ์ผ๋ฐํ์ ์ถ์ ํด๋์ค * Referencing ํด์ ๋ถ๋ชจ๊ฐ์ฒด(์ถ์ ํด๋์ค)๋ฅผ ์ฌ์ฉํ๊ธฐ
ํ์ค์ ๊ทธ๋๋ก ์ฎ๊ธด๋ค
ํ์ค์ ๊ฐ์ฒด๋ค์ด ๊ฐ์ง๊ณ ์๋ ์์ฑ
๊ณผ ๊ธฐ๋ฅ
๋ค ์ค์์ ์ค์ํ ๊ฒ๋ค๋ง ๋จ๊ธฐ๊ณ ๋ถํ์ํ ๊ฒ์ ์์ ๊ฒ ๋๋ค. ์ด๋ฌํ ๊ณผ์ ์ โ์ถ์ํ ํ๋ค.โ ๋ผ๊ณ ๋งํ๋ค.
โป๏ธ ์ฌ์ฌ์ฉํ๋ค๋ ์๋ฏธ
ํด๋์ค๋ฅผ ๋ค์ ์ฌ์ฉํ๋๊ฒ์ด ์๋๋ผ ์ถ์ํ๋ฅผ ํตํด ํ์ฅ์ํค๋๊ฒ์ ์๋ฏธ์ด๋ค
์ผ๋ฐํ์ ์ถ์ ํด๋์ค
์ธ์คํด์ค๊ฐ ๋ ์ ์๋ ํด๋์ค๋ฅผ “์ถ์ ํด๋์ค"๋ผ๊ณ ํ๋ค.
์ถ์ ํด๋์ค : ์์์ ํตํด ํ์ฅํ๋ ๊ฐ๋ ์ ํด๋์ค๋ก ์ด๋ค๊ฒ์ ๊ดํ ๊ณตํต์ ์ธ ๊ธฐ๋ฅ, ์์ฑ์ ๋ด๊ณ ์์ด “์ผ๋ฐํ"๋ ๊ฒ์ด๋ค.
Referencing ํด์ ๋ถ๋ชจ๊ฐ์ฒด(์ถ์ ํด๋์ค)๋ฅผ ์ฌ์ฉํ๊ธฐ
Car c = new Bus();
๊ฐ์ฒด์์ฑ์์ ์ ์ฐํ๊ณ , ํ์ฅ์ฑ ์๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ ์๋ค๋ ์ฅ์
Car c = new Bus();
c.๋ฌ๋ฆฌ๋ค();
c.์๋ด๋ฐฉ์กํ๋ค(); // ๋ถ๊ฐ
c.์ฃผ์ฐจ(); // ์ค๋ฒ๋ผ์ด๋
โญ SOLID by ๐ Limky
์๊ธฐ ์์ ํด๋์ค ์์ ์์ง๋๋ ๋ด๋ถ์ ์ผ๋ก ๋์ด๊ณ , ํ ํด๋์ค๋ค ๊ฐ ๊ฒฐํฉ๋๋ ๋ฎ์ถ๋ High Cohesion - Loose Coupling ์์น์ ๊ฐ์ฒด ์งํฅ์ ๊ด์ ์์ ๋์ ํ ๊ฒ์ด๋ค.
โ๏ธ ๋ค์๋งํด ์์ง๋๊ฐ ๋์ ๊ฐ ๋ชจ๋์ ์ฌ์ฌ์ฉํจ์ผ๋ก์จ, ์์ ์ ์ต์ํํ์ฌ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ธฐ ์ํจ์ด๋ค.
SRP (Single Responsibility Principle) ๋จ์ผ ์ฑ ์ ์์น
ํ๋์ ํด๋์ค์์ ๋ง์ ์์ฑ์ ๋ฃ์ง๋ง๊ณ , ํ์ํ ํด๋์ค์ ์ญํ ๊ณผ ๋ชฉ์ ์ ๋ง๋ ์์ฑ๊ณผ ๋ฉ์๋๋ค์ ์ถ๋ ค ํ๋์ ํด๋์ค๋ค๋ก ๊ฐ๊ฐ ๋ง๋ค์ด์ผ ํ๋ค.
โ Father harry = new Son(); - ํด๋ฆฌ๋ผ๋ ์ด๋ฆ์ ์๋ค์ด ์๋ฒ์ง์ ํ๋์ํ๋ค. โญ Animal mickey = new Rat(); - ๋ฏธํค๋ผ๋ ์ด๋ฆ์ ์ฅ๊ฐ ๋๋ฌผ์ ํ๋์ ํ๋ค.
โ๏ธ ํด๋์ค์ํ์ ์ด๋ฆ = new ํ์ํด๋์ค();๋ก ๊ธฐ์ตํ์.
ISP (Interface Segregation Principle) ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
SRP์ ๊ฐ์ ์์ธ์ ๋ํ ๋ค๋ฅธ ํด๊ฒฐ์ฑ ์ ์ ์ํ๋ค. ์ด๋ฏธ ๋ง๋ค์ด์ง ์ฌ๋ฌ๊ฐ์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ
์ธํฐํ์ด์ค
๋ฅผ ํตํด ํํฐ๋งํ์ฌ ์ํฉ์ ๋ง๊ฒ ์ฌ์ฉํ๋ค๋ ๋ฐฉ์
โ๏ธ ์๋ฏธ์ ์ผ๋ก OCP ๊ฐ๋ฐฉ ํ์ ์์น
๊ณผ ์ ์ฌํ๋ค.
๐ ๊ฐ์ฒด Reflection
ํด๋์ค์ ๋ด๋ถ์ ๋ณด๋ฅผ ์กฐํํ๊ฑฐ๋ ์กฐ์ํ๋ ๊ธฐ๋ฒ
#๏ธโฃ HASHING
text, address, ๊ฐ์ฒด๋ด์ int, string, boolean๊ฐ๋ค์
int๊ฐ
์ผ๋ก ๋ง๋ ๊ฒ.
- ๊ฒ์์ ๋นจ๋ฆฌํ๊ธฐ์ํด์ ์ฌ์ฉํ๋ค
- ์ค๋ณต๋ ์์๋ค
- ๋ฐ์ดํฐ ์์ฒด๊ฐ ๊ฐ์์ง ๋น๊ตํ๊ณ ๊ฐ๋ค๋ฉด ๋ฐ์ดํฐ์ ๋ด์ฉ์ด ๊ฐ์์ง๋ฅผ ๋ค์ ๋น๊ตํ๋์์ผ๋ก ๊ฒ์
๐ Hashcode() ์ Equals()
=
equals
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);
//equals : ๋ ๊ฐ์ฒด์ ๋์ง์ฑ ๋น๊ตํ๋ค. (๋ด์ฉ๋น๊ต)
System.out.println(p1.equals(p2));
System.out.println(p2.equals(p3));
โ๏ธ String์ equals()
๋ฉ์๋๋ก ๋น๊ตํ ๋, String ๋ฌธ์์ด
๋ผ๋ฆฌ ๋น๊ต๋๋ ๋ฐ๋ฉด
โ๏ธ Point๊ฐ์ฒด
๋ Override๊ฐ ์๋์ด์๊ธฐ ๋๋ฌธ์ == ๋ก ๋น๊ต๋์ด false๋ฅผ ๋ฐํํ๋ค.
โ ์ hashcode๋ฅผ equals์ ๊ฐ์ด ์ค๋ฒ๋ผ์ด๋ ํด์ผ๋๋์ง
hashmap
,hashset
๊ฐ์ ์๋ฃ๊ตฌ์กฐ๋ค์ ๋น๊ต ๊ณผ์ ์์ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ๋ฌธ์ ๋๋ฌธ์ hashcode๋ฅผ ๊ตฌํํด์ ๊ฐ์ด ์ด๋ค.
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 = new Point(10, 20);
set.add(p3);
for(Point p : set) {
System.out.println(p);
}
Point [x=100, y=200]
Point [x=10, y=20]
hashcode()๊ฐ Override ๋์ด์์๊ฒฝ์ฐ ๋๊ฐ๋ง ์ถ๋ ฅ๋๋ค
Point [x=100, y=200]
Point [x=10, y=20]
Point [x=100, y=200]
equals๋ง ์๋ค๋ฉด ์ธ๊ฐ๊ฐ ๋ชจ๋ ์ถ๋ ฅ
String str1 = new String("ABC");
String str2 = new String("ABC");
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
System.out.println(str1.hashCode() + " : " + str2.hashCode());
System.out.println(System.identityHashCode(str1) + " : "+System.identityHashCode(str2));
false
true
64578 : 64578 //์ด๋ฏธ Override๋์ด์๊ธฐ ๋๋ฌธ
366712642 : 1829164700
String str3 = "ABC";
String str4 = "ABC";
System.out.println(str3 == str4);
System.out.println(str3.equals(str4));
System.out.println(str3.hashCode() + " : " + str4.hashCode());
System.out.println(System.identityHashCode(str3) + " : "+System.identityHashCode(str4));
true
true
64578 : 64578
2018699554 : 2018699554
//๋ชจ๋ ๊ฐ์ ๊ฐ์ฒด์ด๋ค.
String str3 = “ABC”; ์ ๊ณผ์ ์์๋ ABC๋ผ๋ string์ hashcode๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค.
์ดํ String str4 = “ABC”; ์ step์์๋ ๊ฐ์๊ฐ์ฒด๊ฐ ์๋์ง ํ์ธํ๋ค ์๋ค๋ฉด ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋๋ก ํ๋ค.
์์๊ฐ์ ๊ณผ์ ์ ๋ณ์์ ์ธ์ Literal๋ก ํ๋ ๋ฐฉ๋ฒ์ด ๋ณ์๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ ์ฉํ๋ค๋ ์ ์ ์์ฌํ๋ค.