1. java.lang ํจํค์ง
- ์๋ฐ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ๊ฒ๋ค์ ๋ชจ์
- jaba.lang ํจํค์ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์๋ ์ํฌํธ ๋๋ฏ๋ก ์ํฌํธ๋ฅผ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
* java.lang ํจํค์ง ์๊ฐ
- Object : ๋ชจ๋ ์๋ฐ ๊ฐ์ฒด์ ๋ถ๋ชจ ํด๋์ค
- String : ๋ฌธ์์ด
- Integer, Long, Double : ๊ธฐ๋ณธํ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์ฒด๋ก ๋ง๋ ๊ฒ
- Class : ํด๋์ค ๋ฉํ ์ ๋ณด
- System : ์์คํ ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ณธ ๊ธฐ๋ฅ๋ค์ ์ ๊ณต
2. Object ํด๋์ค
- ์๋ฐ์์ ๋ชจ๋ ์ต์์ ๋ถ๋ชจ ํด๋์ค๋ ํญ์ Object ํด๋์ค์ด๋ค.
- ํด๋์ค์์ ์์ ๋ฐ์ ๋ถ๋ชจ ํด๋์ค๊ฐ ์๋ค๋ฉด ๋ฌต์์ ์ผ๋ก Object ํด๋์ค๋ฅผ ์์ ๋ฐ๋๋ค.
1) Object ํด๋์ค๊ฐ ์ต์์ ํด๋์ค์ธ ์ด์
* ๊ณตํต ๊ธฐ๋ฅ ์ ๊ณต
- toString(), eqals(), getClass() ๋ฑ...
* ๋คํ์ฑ์ ๊ธฐ๋ณธ ๊ตฌํ
- Object ๋ ๋ชจ๋ ํด๋์ค์ ๋ถ๋ชจ ํด๋์ค์ด๋ฏ๋ก ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
- Object ํด๋์ค๋ ๋คํ์ฑ์ ์ง์ํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์๋ฐ ๊ฐ์ฒด๋ Object ํ์ ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์๋ค.
- Object ๋ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋ค ๋ด์ ์ ์๋ค. ํ์ ์ด ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ ์ด๋๊ฐ์ ๋ณด๊ดํด์ผ ํ๋ค๋ฉด Object ์ ๋ณด๊ดํ๋ฉด ๋๋ค.
2) Object์ ๋คํ์ฑ
*์ฅ์
- ์ด๋ค ๊ฐ์ฒด๋ ์ง ์ธ์๋ก ์ ๋ฌ์ด ๊ฐ๋ฅํ๋ค.
* ํ๊ณ
- ์์ํด๋์ค๋ฅผ Object๊ฐ ๋งค๊ฐ๋ณ์๋ก ์๋ ๋ฉ์๋์์์ ํธ์ถํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
Object ์์๋ ์์ํด๋์ค์ ๋ฉ์๋๊ฐ ์๊ธฐ ๋๋ฌธ.
- Object๋ฅผ ํตํด ์ ๋ฌ ๋ฐ์ ๊ฐ์ฒด๋ฅผ ํธ์ถํ๊ธฐ ์ํด์๋ ๋ค์ด์บ์คํ ์ ์งํํ์ฌ์ผํ๋ค.
- ๋คํ์ฑ์ ์ ๋๋ก ํ์ฉํ๊ธฐ ์ํด์๋ ๋คํ์ ์ฐธ์กฐ + ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ํจ๊ผ ์ฌ์ฉํด์ผํ๋ค.
3) Object์ ๋ฐฐ์ด
- Object๋ ๋ชจ๋ ํ์ ์ ๊ฐ์ฒด๋ฅผ ๋ด์ ์ ์์ผ๋ฏ๋ก Object[]๋ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋ด์ ์ ์๋ ๋ฐฐ์ด๋ก ๋ง๋ค ์ ์๋ค.
class Dog {
private void sound(){
system.out.println("๋ฉ๋ฉ);
}
class Car {
private void car(){
system.out.println("์ด๋");
}
public class ObjectPolyExample {
public static void main(String[] args) {
Dog dog = new Dog();
Car car = new Car();
Object object = new Object();
Object[] objects = {dog, car, object};
size(objects);
}
private static void size(Object[] object) {
System.out.println("์ ๋ฌ๋ ๊ฐ์ฒด์ ์๋ : " + object.length); // 3
}
}
3. toString
- ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๋ฌธ์์ด ํํ๋ก ์ ๊ณตํ๋ค.
public class ObjectPolyExample {
public static void main(String[] args) {
Object object = new Object();
String string = object.toString();
system.out.println(string); //java.lang.Object@a38d7a3
system.out.println(object); //java.lang.Object@a38d7a3
}
}
- toString์ getClass().getName(), hashCode(๊ฐ์ฒด์ ์ฐธ๊ณ ๊ฐ)์ ๋ฐํํ์ฌ ์ ๊ณตํจ.
- println() ๋ฉ์๋ ์์ toString()์ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉด ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.
1) toString() ์ค๋ฒ๋ผ์ด๋ฉ
- toString()์ ์ ๋ณด๋ง์ผ๋ก๋ ๊ฐ์ฒด์ ์ํ๋ฅผ ์ ์ ํ๊ฒ ๋ํ๋ด์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์ฌ์ ์(์ค๋ฒ๋ผ์ด๋ฉ)ํด์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
public class Dog {
private String dogName;
private int age;
public Dog(String dogName, int age) {
this.dogName = dogName;
this.age = age;
}
@Override //java ๊ธฐ๋ณธ๊ธฐ๋ฅ ์ฌ์ฉ
public String toString() {
return "Dog [dogName=" + dogName + ", age=" + age + "]";
}
}
- ์๋ฐ์ ๊ธฐ๋ณธ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์์ ๊ฐ์ด toString ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ฐ๋ก ์งํํ ์ ์๋ค.
- ์ด๋ฏธ ์ค๋ฒ๋ผ์ด๋ฉ ๋ ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ์ ์์๋ด๊ธฐ ์ํด์๋
String refValue = Integer.System.identitHashCode();
๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
3. Object ์ OCP
1) OCP ์์น
- Open : ์๋ก์ด ํด๋์ค๋ฅผ ์ถ๊ฐํ๊ณ , toString()์ ์ค๋ฒ๋ผ์ด๋ฉํด์ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์๋ค.
- Close : ์๋ก์ด ํด๋์ค๋ฅผ ์ถ๊ฐํด๋ Object์ toString()์ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ ์ฝ๋๋ ๋ณ๊ฒฝํ์ง ์์๋ ๋๋ค.
- ๋คํ์ ์ฐธ์กฐ, ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ, ํด๋ผ์ด์ธํธ ์ฝ๋ ๋ชจ๋ ์ถ์์ ์ธ Object์ ์์กดํ๋ฉด์ OCP์์น์ ์งํจ๋ค.
2) System.out.println()
- Object ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ๋ด๋ถ์์ toString()์ ํธ์ถํ๋ค.
- ์ฆ System.out.println()์ ํตํด ์ธ์์ ๋ชจ๋ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.
4. equals()
1) ๋์ผ์ฑ๊ณผ ๋๋ฑ์ฑ
* ์๋ฐ์์ ๋ ๊ฐ์ฒด๊ฐ ๊ฐ๋ค๋ ๊ฒ์ 2๊ฐ์ง๋ก ํํํ๋ค.
- ๋์ผ์ฑ(Identity) : == ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ๋ ๊ฐ์ฒด์ ์ฐธ์กฐ๊ฐ ๋์ผํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋์ง ํ์ธ (์ฐธ์กฐ๊ฐ ์์ฒด๋ฅผ ํ์ธ)
- ๋๋ฑ์ฑ(Eqality) : .equals() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ฒด๊ฐ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋๋ฑํ์ง ํ์ธ
public class User {
private String id;
public User(String id){
this.id = id;
}
}
public class EqualsName {
public static void(String[] args) {
User user1 = new User("id-100"); //์ฐธ์กฐ๊ฐ : x001
User user2 = new User("id-100"); //์ฐธ์กฐ๊ฐ : x002
System.out.println(user1 == user2); //false, ์ฐธ์กฐ๊ฐ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ
System.out.println(user1.equals(user2);// false
}
}
- equals() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด๋ false๊ฐ ๋์ค๋ ์ด์ ๋ Object๊ฐ ์ ๊ณตํ๋ equals()๋ == ์ผ๋ก ๋์ผ์ฑ ๋น๊ต๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ด๋ค.
//Object class์ equals()
public boolean equals(Object obj) {
return (this == obj);
}
- ๋๋ฑ์ฑ์ด๋ผ๋ ๊ฐ๋ ์ ๊ฐ๊ฐ์ ํด๋์ค ๋ง๋ค ๋ค๋ฅด๊ธฐ ๋๋ฌธ.
- ๋๋ฌธ์ ๋๋ฑ์ฑ ๋น๊ต๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ผ๋ฉด equals() ๋ฉ์๋๋ฅผ ์ฌ์ ์ํด์ผํ๋ค.
- IDE์ ๊ธฐ๋ณธ๊ธฐ๋ฅ์ ์ฌ์ฉํด ์์ฑ ๊ฐ๋ฅํ๋ค.
public class User {
private String id;
public User(String id){
this.id = id;
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
Dog other = (Dog) obj;
return Objects.equals(id, other.id);
}
}
* equals() ๋ฉ์๋๋ฅผ ๊ตฌํํ ๋ ์ง์ผ์ผ ํ๋ ๊ท์น (IDE๊ฐ ๋ง๋ค์ด์ฃผ๊ธฐ ๋๋ฌธ์ ์์ธํ๊ฒ ์ ํ์ X)
- ๋ฐ์ฌ์ฑ(Reflexivity) : ๊ฐ์ฒด๋ ์๊ธฐ ์์ ๊ณผ ๋๋ฑํด์ผ ํ๋ค. ( `x.equals(x)` ๋ ํญ์ `true` ).
- ๋์นญ์ฑ(Symmetry): ๋ ๊ฐ์ฒด๊ฐ ์๋ก์ ๋ํด ๋์ผํ๋ค๊ณ ํ๋จํ๋ฉด, ์ด๋ ์๋ฐฉํฅ์ผ๋ก ๋์ผํด์ผ ํ๋ค.
( `x.equals(y)` ๊ฐ `true` ์ด๋ฉด `y.equals(x)` ๋ `true` ).
- ์ถ์ด์ฑ(Transitivity) : ๋ง์ฝ ํ ๊ฐ์ฒด๊ฐ ๋ ๋ฒ์งธ ๊ฐ์ฒด์ ๋์ผํ๊ณ , ๋ ๋ฒ์งธ ๊ฐ์ฒด๊ฐ ์ธ ๋ฒ์งธ ๊ฐ์ฒด์ ๋์ผํ๋ค๋ฉด, ์ฒซ๋ฒ์งธ ๊ฐ
์ฒด๋ ์ธ ๋ฒ์งธ ๊ฐ์ฒด์๋ ๋์ผํด์ผ ํ๋ค.
- ์ผ๊ด์ฑ(Consistency) : ๋ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋ ํ, `equals()` ๋ฉ์๋๋ ํญ์ ๋์ผํ ๊ฐ์ ๋ฐํํด์ผํ๋ค.
- null์ ๋ํ ๋น๊ต : ๋ชจ๋ ๊ฐ์ฒด๋ `null` ๊ณผ ๋น๊ตํ์ ๋ `false` ๋ฅผ ๋ฐํํด์ผ ํ๋ค.
๋๊ธ