โถ Class ํด๋์ค
๋ชจ๋ฅด๋ ํด๋์ค์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์ ํด๋์ค ์ ๋ณด๋ฅผ ์ง์ ์ฐพ์์ผํ๋๋ฐ ์ด๋ Class ํด๋์ค๋ฅผ ํ์ฉํ๋ค.
Class ํด๋์ค๋ฅผ ์ ์ธํ๊ณ ํด๋์ค ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด ์ธ ๊ฐ์ง๊ฐ ์๋ค.
โ
1. Object ํด๋์ค์ getClass( ) ๋ฉ์๋ ์ฌ์ฉํ๊ธฐ
2. ํด๋์ค ํ์ผ ์ด๋ฆ์ Class ๋ณ์์ ์ง์ ๋์ ํ๊ธฐ
3. Class.forName("ํด๋์ค ์ด๋ฆ") ๋ฉ์๋ ์ฌ์ฉํ๊ธฐ
-1๋ฒ์ ๊ฒฝ์ฐ Object์ ์ ์ธํ getClass( ) ๋ฉ์๋๋ ๋ชจ๋ ํด๋์ค๊ฐ ์ฌ์ฉํ ์ ์๋ ๋ฉ์๋์ด๋ค. ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ด๋ฏธ ์์ฑ๋ ์ธ์คํด์ค๊ฐ ์์ด์ผ ํ๋ค. 2, 3๋ฒ์ ๊ฒฝ์ฐ์๋ ์ปดํ์ผ๋ ํด๋์ค ํ์ผ์ด ์๋ค๋ฉด ํด๋์ค ์ด๋ฆ๋ง์ผ๋ก Class ํด๋์ค๋ฅผ ๋ฐํ๋ฐ๋๋ค.
package classex;
public class Person {
private String name;
private int age;
public Person() { // ๋ํดํธ ์์ฑ์
}
public Person(String name) { // ์ด๋ฆ๋ง ์
๋ ฅ๋ฐ๋ ์์ฑ์
this.name = name;
}
public Person(String name, int age) { // ์ด๋ฆ๊ณผ ๋์ด๋ฅผ ์
๋ ฅ๋ฐ๋ ์์ฑ์
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package classex;
public class ClassTest {
public static void main(String[] args) throws ClassNotFoundException { // forName() ๋ฉ์๋์์ ๋ฐ์ํ๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํจ. ์ด๋ฆ๊ณผ ์ผ์นํ๋ ํด๋์ค๊ฐ ์๋ ๊ฒฝ์ฐ ClassNotFoundException ๋ฐ์
Person person = new Person();
Class pClass1 = person.getClass(); // Object์ getClass() ๋ฉ์๋ ์ฌ์ฉํ๊ธฐ
System.out.println(pClass1.getName());
Class pClass2 = Person.class; // ์ง์ class ํ์ผ ๋์
ํ๊ธฐ
System.out.println(pClass2.getName());
Class pClass3 = Class.forName("classex.Person"); // ํด๋์ค ์ด๋ฆ ๊ฐ์ ธ์ค๊ธฐ
System.out.println(pClass3.getName());
}
}
<์คํ ๊ฒฐ๊ณผ>
โ
*Class ํด๋์ค๋ฅผ ํ์ฉํด ํด๋์ค ์ ๋ณด ์์๋ณด๊ธฐ
ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค ๋ณด๋ฉด ๋ด๊ฐ ์ฌ์ฉํ ํด๋์ค์ ์๋ฃํ์ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ด ์ปดํจํฐ์ ์ ์ฅ๋์ด ์์ง ์์ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๊ณ ์์ฑํ๋ ๊ฒฝ์ฐ ๊ทธ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ์ ์ ์๋ค. ์ด ๋ Class ํด๋์ค๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ฉด ํด๋น ํด๋์ค ์ ๋ณด, ์ฆ ์์ฑ์·๋ฉ์๋·๋ฉค๋ฒ ๋ณ์ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์๋ค. ์ด๋ ๊ฒ ์ฌ์ฉํ๋ ค๋ ํด๋์ค์ ์๋ฃํ์ ๋ชจ๋ฅด๋ ์ํ์์ Class ํด๋์ค๋ฅผ ํ์ฉํ์ฌ ๊ทธ ํด๋์ค์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ด ์ ๋ณด๋ฅผ ํ์ฉํ์ฌ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ '๋ฆฌํ๋ ์ '์ด๋ผ๊ณ ํ๋ค.
โ
package classex;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Field;
public class StringClassTest {
public static void main(String[] args) throws ClassNotFoundException {
Class strClass = Class.forName("java.lang.String"); // ํด๋์ค ์ด๋ฆ ๊ฐ์ ธ์ค๊ธฐ
Constructor[] cons = strClass.getConstructors(); // ๋ชจ๋ ์์ฑ์ ๊ฐ์ ธ์ค๊ธฐ
for (Constructor c : cons) {
System.out.println(c);
}
System.out.println();
Field[] fields = strClass.getFields(); // ๋ชจ๋ ๋ฉค๋ฒ๋ณ์ ๊ฐ์ ธ์ค๊ธฐ
for (Field f : fields) {
System.out.println(f);
}
System.out.println();
Method[] methods = strClass.getMethods(); // ๋ชจ๋ ๋ฉ์๋ ๊ฐ์ ธ์ค๊ธฐ
for (Method m : methods) {
System.out.println(m);
}
}
}
<์คํ ๊ฒฐ๊ณผ>
โ-String ํด๋์ค์ ์ ๋ณด๋ฅผ ์ ์ ์๋ค.
โ
๋ ํผ์ ์ฝ๋ฉ) Person ํด๋์ค ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
379์ชฝ์์ ๋ง๋ Person ํด๋์ค์ Class ํด๋์ค๋ฅผ ๊ฐ์ ธ์์ getConstructor( ), getMethods( ), getFields( ) ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์์ฑ์, ๋ฉ์๋, ๋ฉค๋ฒ ๋ณ์(ํ๋) ์ ๋ณด๋ฅผ ์ถ๋ ฅํด ๋ณด๋ผ.
package classex;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class PersonClassTest {
public static void main(String[] args) {
Class strClass = Person.class;
Constructor[] cons = strClass.getConstructors();
for (Constructor c : cons) {
System.out.println(c);
}
System.out.println();
Field[] fields = strClass.getFields();
for (Field f : fields) {
System.err.println(f);
}
System.out.println();
Method[] methods = strClass.getMethods();
for (Method m : methods) {
System.out.println(m);
}
}
}
<์คํ ๊ฒฐ๊ณผ>
*newInstance( )๋ฅผ ์ฌ์ฉํด ํด๋์ค ์์ฑํ๊ธฐ
newInstance( ) ๋ฉ์๋๋ ํญ์ Object๋ฅผ ๋ฐํํ๋ฏ๋ก ์์ฑ๋ ๊ฐ์ฒดํ์ผ๋ก ํ ๋ณํํด์ผ ํ๋ค.
package classex;
public class NewInstanceTest {
public static void main(String[] args)
throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Person person1 = new Person(); // ์์ฑ์๋ก ์์ฑํ๊ธฐ
System.out.println(person1);
Class pClass = Class.forName("classex.Person");
Person person 2 = (Person) pClass.newInstance(); // Class ํด๋์ค์ newInstance() ๋ฉ์๋๋ก ์์ฑํ๊ธฐ
System.out.println(person2);
}
}
<์ฑ ๋ด์ฉ์ ์ ์๋์ด ์์ ํ์ ๊ฒ>
package classex;
public class NewInstanceTest {
public static void main(String[] args)
throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Person person1 = new Person();
System.out.println(person1);
Class pClass = Class.forName("classex.Person");
Object obj = pClass.newInstance();
Person person2 = null;
if (obj instanceof Person) {
person2 = (Person) obj;
}
System.out.println(person2);
}
}
-๋ค์ด์บ์คํ ํด์ฃผ๋ฉด ์ข ๋ ์ข๋ค.
<์คํ ๊ฒฐ๊ณผ>
โ
์ฐ์ต๋ฌธ์ Q4) ๋ค์ ์ฝ๋์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๊ฐ '์ง๋๊ฐ ๋ฉ๋ฉ์ด' ๊ฐ ๋๋๋ก MyDog ํด๋์ค๋ฅผ ์์ ํ๋ผ.
<๋ด๊ฐ ํ ๊ฒ>
package classex;
class MyDog {
String name;
String type;
public MyDog(String name, String type) {
this.name = name;
this.type = type;
}
public String toString() {
return name + ", " + type;
}
}
public class Q4 {
public static void main(String[] args) {
MyDog dog = new MyDog("๋ฉ๋ฉ์ด", "์ง๋๊ฐ");
System.out.println(dog);
}
}
<์คํ ๊ฒฐ๊ณผ>
โ
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java-๊ธฐ์ด] ์ ๋ค๋ฆญ ๋ฉ์๋ ํ์ฉํ๊ธฐ (0) | 2021.02.21 |
---|---|
[Java-๊ธฐ์ด] ์ ๋ค๋ฆญ (0) | 2021.02.21 |
[Java-๊ธฐ์ด] Wrapper ํด๋์ค (0) | 2021.02.21 |
[Java-๊ธฐ์ด] ๊ทธ ๋ฐ์ ๋ค๋ฅธ String ๊ด๋ จ ๋ฉ์๋ (0) | 2021.02.21 |
[Java-๊ธฐ์ด] String ํด๋์ค (0) | 2021.02.21 |
๋๊ธ