โ๏ธ ๊น์ํ์ ์ค์ ์๋ฐ - ์ค๊ธ 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 ๋ฅผ ๋ฐํํด์ผ ํ๋ค
'๐ฑ ์ธํ๋ฐ > โ๏ธ ๊น์ํ์ ์ค์ ์๋ฐ - ์ค๊ธ 1ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ ๋ํผ, Class ์ด์ ๋ฆฌ (0) | 2025.07.19 |
---|---|
์๋ฐ ์์ธ์ฒ๋ฆฌ ์ด์ ๋ฆฌ (1) | 2025.07.11 |
์๋ฐ ์ด๊ฑฐํ ENUM ์ด์ ๋ฆฌ (2) | 2025.07.10 |
์๋ฐ ์ค์ฒฉ ํด๋์ค์ ๋ด๋ถ ํด๋์ค (3) | 2025.07.09 |
์๋ฐ ๋ ์ง์ ์๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด์ ๋ฆฌ (0) | 2025.07.07 |