μλ° Object ν΄λμ€
βοΈ κΉμνμ μ€μ μλ° - μ€κΈ 1νΈ μ λ£κ³ μμ±νλ λ³΅μ΅ λΈλ‘κ·Έ μ λλ€.
1. java.lang ν¨ν€μ§
- java.lang ν¨ν€μ§λ μλ°κ° κΈ°λ³ΈμΌλ‘ μ 곡νλ λΌμ΄λΈλ¬λ¦¬μ κ°μ₯ κΈ°λ³Έ
- μλ° μΈμ΄λ₯Ό μ΄λ£¨λ κ°μ₯ κΈ°λ³Έμ΄ λλ ν΄λμ€λ€μ 보κ΄νλ ν¨ν€μ§
- java.lang ν¨ν€μ§μ λνμ μΈ ν΄λμ€λ€λ‘λ Object (λͺ¨λ μλ° κ°μ²΄μ λΆλͺ¨ ν΄λμ€) , String (λ¬Έμμ΄), Integer (λνΌνμ ), Class (ν΄λμ€ λ©ν μ 보) , System (μμ€ν κ΄λ ¨ κΈ°λ³Έ κΈ°λ₯) λ€μ΄ μλ€
- java.lang ν¨ν€μ§μ μλ ν΄λμ€λ€μ λͺ¨λ μλ° μ ν리μΌμ΄μ μ μλμΌλ‘ μν¬νΈλκΈ° λλ¬Έμ μν¬νΈ ꡬ문μ λ°λ‘ μ¬μ©νμ§ μμλ λλ€
// import ꡬ문 λ―Έμ¬μ© κ°λ₯
public class LangMain {
public static void main(String[] args) {
System.out.println("hello java");
}
}
2. Object ν΄λμ€
- μλ°μμ λͺ¨λ ν΄λμ€μ μ΅μμ λΆλͺ¨ ν΄λμ€λ νμ Object
- Object λ λͺ¨λ ν΄λμ€μ 묡μμ μμλλ€
2-1. 묡μμ μμ
π₯ 묡μμ (Implicit)
κ°λ°μκ° μ½λμ μ§μ κΈ°μ νμ§ μμλ μμ€ν λλ μ»΄νμΌλ¬μ μν΄ μλμΌλ‘ μνλλ κ²
class Test {
}
λ§μ½ μ΄λ° ν΄λμ€κ° μ‘΄μ¬νκ³ , ν΄λμ€μ μμ λ°μ λΆλͺ¨ ν΄λμ€κ° μλ κ²½μ°
class Test extends Object {
}
μμ²λΌ μ»΄νμΌλ¬κ° μ»΄νμΌ μμ μ extends Object λ₯Ό μ½μ€μ 묡μμ μΌλ‘ μΆκ°ν΄μ€λ€
κ·Έλ κΈ° λλ¬Έμ Test ν΄λμ€λ€μ μλμΌλ‘ Object μ λ©μλλ€μ μμλ°κ³ μ¬μ©ν μ μκ² λλ€ (toString(), equals() λ±)
2-2. λͺ μμ μμ
π₯ λͺ μμ (Explicit)
κ°λ°μκ° μ½λμ μ§μ κΈ°μ ν΄μ μλνλ κ²
class Test extends Parent {
}
μμ²λΌ ν΄λμ€μ μμλ°μ λΆλͺ¨ ν΄λμ€λ₯Ό λͺ μμ μΌλ‘ μ§μ νλ κ²½μ°μλ Object λ₯Ό μμλ°μ§ μλλ€
μ΄λ° κ²½μ°μλ Object μ λ©μλλ€μ μ¬μ©ν μ μλ€
2-3. μλ°μμ Object ν΄λμ€κ° μ΅μμ λΆλͺ¨ ν΄λμ€μΈ μ΄μ
- κ³΅ν΅ κΈ°λ₯ μ 곡
- κ°μ²΄λ₯Ό λ§λ€λλ§λ€ κΈ°λ³Έ κΈ°λ₯μ μ μν΄μΌνλ©΄ μλΉν λ²κ±°λ‘λ€
- λ§λ λ€κ³ ν΄λ μΌκ΄μ±μ΄ μλ€
- κ·Έλ κΈ° λλ¬Έμ Object ν΄λμ€λ₯Ό ν΅ν΄ λͺ¨λ κ°μ²΄μ νμν κ³΅ν΅ κΈ°λ₯μ μ 곡νλ€
- λ€νμ±μ κΈ°λ³Έ ꡬν
- Objectλ λͺ¨λ ν΄λμ€μ λΆλͺ¨ ν΄λμ€μ΄κΈ° λλ¬Έμ λͺ¨λ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μλ€
- λ€νμ±μ μ§μνλ κΈ°λ³Έμ μΈ λ§€μ»€λμ¦μ μ§μνλ€
- λͺ¨λ μλ° κ°μ²΄λ Object νμ μΌλ‘ μ²λ¦¬λκ³ , λ€μν νμ μ κ°μ²΄λ₯Ό ν΅ν©μ μΌλ‘ μ²λ¦¬ν μ μλ€
3. Object λ€νμ±
Object λ λͺ¨λ ν΄λμ€μ λΆλͺ¨ ν΄λμ€μ΄κΈ° λλ¬Έμ λͺ¨λ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μλ€
class Test {
}
Test ν΄λμ€λ λΆλͺ¨κ° μκΈ° λλ¬Έμ Object λ₯Ό μλμΌλ‘ μμλ°λλ€
void action(Object obj) {
}
Object λ₯Ό μμλ°κ³ μκΈ° λλ¬Έμ action λ©μλμ λ§€κ°λ³μλ‘ Test ν΄λμ€λ₯Ό λκΈΈ μ μλ€
μ΄λ° κ²½μ° μλμΌλ‘ μ μΊμ€ν λλ€
3-1. Object λ€νμ±μ μ₯μ
Objectλ λͺ¨λ κ°μ²΄μ λΆλͺ¨μ΄κΈ° λλ¬Έμ μ΄λ€ κ°μ²΄λ μ§ μΈμλ‘ μ λ¬ν μ μλ€
class Test { }
public class Main {
public static void main(String[] args) {
Test test = new Test();
action(test);
}
static void action(Object obj) {
System.out.println("λ§€κ°λ³μ νμ
: " + obj.getClass().getName());
}
}
3-2. Object λ€νμ±μ νκ³
μμμ μλ λ©μλλ₯Ό νΈμΆνμ§ λͺ»νλ€.
λ§μΌ, μμμ μλ λ©μλλ₯Ό νΈμΆν΄μΌ νλ€λ©΄ λ€μ΄μΊμ€ν μ ν΄μΌνλ€
if (obj instanceof Test test) {
test.a();
}
- instanceof λ‘ Test ν΄λμ€μΈμ§ νμΈνκ³ , Test ν΄λμ€λ‘ λ€μ΄μΊμ€ν νλ©΄μ μ λ¬νλ€
- test.a() λ₯Ό νΈμΆνλ©΄ Test νμμμ a() λ©μλλ₯Ό μ°Ύμμ νΈμΆνλ€
4. toString()
- κ°μ²΄μ μ 보λ₯Ό λ¬Έμμ΄ ννλ‘ μ 곡νλ€
- λλ²κΉ κ³Ό λ‘κΉ μ μ μ©νκ² μ¬μ©ν μ μλ€
- Object ν΄λμ€μ μ μλλ―λ‘ λͺ¨λ ν΄λμ€μμ μμλ°μ μ¬μ©κ°λ₯νλ€
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
4-1. println λ΄λΆ μ½λ
public void println(Object x) {
String s = String.valueOf(x);
if (getClass() == PrintStream.class) {
// need to apply String.valueOf again since first invocation
// might return null
writeln(String.valueOf(s));
} else {
synchronized (this) {
print(s);
newLine();
}
}
}
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
println λ΄λΆ μ½λμμλ λμ΄μ¨ κ°μ²΄(x) λ₯Ό κ³§λ°λ‘ μΆλ ₯νμ§ μκ³ , String.valueOf(x) λ₯Ό νΈμΆνλ€
- νλΌλ―Έν°λ‘ μ΄λ€ κ°μ²΄λ μ§ λ°λλ€ (Object x)
- String.valueOf(x) λ₯Ό νΈμΆν΄μ null μ νμΈνκ³ toString() μ μ€ννλ€
- toString() μ κ²°κ³Ό λ¬Έμμ΄μ μ€μ λ‘ μΆλ ₯νλ€
→ κ°μ²΄μ μΆλ ₯ ννλ₯Ό μ μ΄νκ³ μΆλ€λ©΄ toString() μ μ€λ²λΌμ΄λ©νλ©΄ λλ€
4-2. toString() μ€λ²λΌμ΄λ©
toString() λ©μλλ ν΄λμ€μ μ 보μ μ°Έμ‘°κ°λ§ μ 곡νκΈ° λλ¬Έμ κ°μ²΄μ μνλ₯Ό μ μ νκ² λνλ΄μ§ λͺ»νλ€
κ·Έλ κΈ° λλ¬Έμ κ° ν΄λμ€μμ toString() μ μ¬μ μ (μ€λ²λΌμ΄λ©) ν΄μ μ μ©ν μ 보λ₯Ό μ 곡ν΄μΌ νλ€
public class Test {
private String name;
private int age;
public Test(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Test{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
Test test = new Test("λ°₯", 25);
System.out.println(test);
- println(Object obj) λ©μλλ‘ test ν΄λμ€κ° μ λ¬λλ€
- λ©μλ λ΄λΆμμ obj.toString() μ νΈμΆνλ€
- μμμμ μ¬μ μλ λ©μλκ° μλμ§ μλμ§ μ°Ύλλ€
- Test ν΄λμ€μ μ¬μ μλ λ©μλκ° μμΌλ―λ‘ Test.toString() μ μ€ννλ€
5. Object μ OCP
public class ObjectPrinter {
public static void print(Object obj) {
String string = "κ°μ²΄ μ 보 μΆλ ₯: " + obj.toString();
System.out.println(string);
}
}
λͺ¨λ κ°μ²΄λ₯Ό μΆλ ₯ν μ μλ ObjectPrinter
μΆμμ μΈ Object ν΄λμ€λ₯Ό μ¬μ©ν΄ μΆμμ μΈ κ²μ μμ‘΄νλ€
μ μ½λλ λ€νμ μ°Έμ‘°μ λ©μλ μ€λ²λΌμ΄λ©μ μ μ νκ² μ¬μ©νλ―λ‘ λ€νμ±μ λ§€μ° μ νμ©νκ³ μλ€
- λ€νμ μ°Έμ‘° : Object νμ μ λ§€κ°λ³μλ‘ μ¬μ©ν΄μ λ€νμ μ°Έμ‘°λ₯Ό μ¬μ©νλ€
- λ©μλ μ€λ²λΌμ΄λ© : Object λ λͺ¨λ ν΄λμ€μ λΆλͺ¨μ΄κΈ° λλ¬Έμ λͺ¨λ ν΄λμ€κ° toString() λ©μλλ₯Ό μ€λ²λΌμ΄λ© ν μ μλ€
5-1. OCP μμΉ
Open : μλ‘μ΄ ν΄λμ€λ₯Ό μΆκ°νκ³ , toString() μ μ€λ²λΌμ΄λ©ν΄μ κΈ°λ₯μ νμ₯ν μ μλ€
Closed : μλ‘μ΄ ν΄λμ€λ₯Ό μΆκ°ν΄λ Object μ toString() μ μ¬μ©νλ ν΄λΌμ΄μΈνΈ μ½λλ λ³κ²½νμ§ μμλ λλ€
5-2. System.out.println()
- System.out.println() λ©μλλ Object λ§€κ°λ³μλ₯Ό μ¬μ©νκ³ , λ΄λΆμμ toString() μ νΈμΆνλ€
- μλ°λ κ°μ²΄μ§ν₯ μΈμ΄λ΅κ² μΈμ΄ μ€μ€λ‘λ κ°μ²΄μ§ν₯μ νΉμ§μ λ§€μ° μ νμ©νλ€
- μλ° μΈμ΄κ° κΈ°λ³Έμ μΌλ‘ μ 곡νλ λ€μν λ©μλλ€μ κ°λ°μκ° νμμ λ°λΌ μ€λ²λΌμ΄λ©ν΄μ μ¬μ©ν μ μλ€
6. equals()
6-1. λμΌμ±κ³Ό λλ±μ±
λμΌμ± (Identity) : == μ°μ°μ
- λ κ°μ²΄μ μ°Έμ‘°κ° λμΌν κ°μ²΄λ₯Ό κ°λ¦¬ν€κ³ μλμ§λ₯Ό νμΈνλ€
- μμ ν κ°μμ μλ―Έ
- 물리μ μΌλ‘ κ°μ λ©λͺ¨λ¦¬μ μλ κ°μ²΄ μΈμ€ν΄μ€μΈμ§ μ°Έμ‘°κ°μ νμΈνλ€
λλ±μ± (Equality) : equals() λ©μλ
- λ κ°μ²΄κ° λ Όλ¦¬μ μΌλ‘ λλ±νμ§ νμΈνλ€
- κ°μ κ°μΉλ μμ€μ μλ―Ένμ§λ§, κ·Έ ννλ μΈκ΄μ΄ μμ ν κ°μ§ μμμλ μλ€
- λ Όλ¦¬μ μΌλ‘ κ°μμ§ νμΈνλ€
User a = new User("id-100"); // x001
User b = new User("id-100"); // x002
μμ μ½λμ κ²½μ° π βοΈ λμΌμ±μ x001, x002 λ‘ λ€λ₯΄μ§λ§ πβοΈ λλ±μ±μ id-100, id-100 μΌλ‘ κ°λ€
6-2. Object equals()
public boolean equals(Object obj) {
return (this == obj);
}
- Object μ equals() λ κΈ°λ³Έμ μΌλ‘ == λ‘ μ 곡νλ€
- λλ±μ± λΉκ΅λ₯Ό μ¬μ©νκ³ μΆμΌλ©΄ equals() λ©μλλ₯Ό μ¬μ μνλ©΄ λλ€
@Override
public boolean equals(Object obj) {
User user = (User) obj;
return this.id.equals(user.id);
}
6-3. equals() λ©μλλ₯Ό ꡬνν λ μ§μΌμΌ νλ κ·μΉ
- λ°μ¬μ± : κ°μ²΄λ μκΈ° μμ κ³Ό λλ±ν΄μΌ νλ€
- λμΉμ± : λ κ°μ²΄κ° μλ‘μ λν΄ λμΌνλ€κ³ νλ¨νλ©΄, μ΄λ μλ°©ν₯μΌλ‘ λμΌν΄μΌ νλ€
- μΆμ΄μ± : λ§μ½ ν κ°μ²΄κ° λ λ²μ§Έ κ°μ²΄μ λμΌνκ³ , λ λ²μ§Έ κ°μ²΄κ° μΈλ²μ§Έ κ°μ²΄μ λμΌνλ€λ©΄ 첫λ²μ§Έ κ°μ²΄λ μΈλ²μ§Έ κ°μ²΄μλ λμΌν΄μΌ νλ€
- μΌκ΄μ± : λ κ°μ²΄μ μνκ° λ³κ²½λμ§ μλ ν, equals() λ©μλλ νμ λμΌν κ°μ λ°νν΄μΌ νλ€
- null μ λν λΉκ΅ : λͺ¨λ κ°μ²΄λ null κ³Ό λΉκ΅νμ λ false λ₯Ό λ°νν΄μΌ νλ€