객체를 생성하는 시점에 어떤 작업을 하고 싶다면 생성자(Constructor)를 이용하면 된다.
생성자를 알아보기 전에 먼저 생성자가 왜 필요한지 코드로 간단히 알아보자.
package construct;
public class Construct01 {
String name;
int age;
int grade;
}
package construct;
public class ConstaructMain {
public static void main(String[] args) {
Construct01 member1 = new Construct01();
member1.name = "user1";
member1.age = 15;
member1.grade = 90;
Construct01 member2 = new Construct01();
member2.name = "user2";
member2.age = 22;
member2.grade = 87;
Construct01[] members = {member1, member2};
{
for (Construct01 s : members) {
System.out.println("이름:" + s.name + " 나이:" + s.age + " 성적:" + s.grade);
}
}
}
}
위에서 같이 회원 객체를 생성하면,
member1.name = "user1";
member1.age = 15;
member1.grade = 90;
변수 초기값을 설정해야한다. 메서드를 사용해서 반복을 제거해보면,
package construct;
public class ConstaructMain {
public static void main(String[] args) {
Construct01 member1 = new Construct01();
initMember(member1, "yun", 14, 90);
//member1.name = "user1";
//member1.age = 15;
//member1.grade = 90;
Construct01 member2 = new Construct01();
initMember(member2, "user2", 22, 87);
//member2.name = "user2";
//member2.age = 22;
//member2.grade = 87;
Construct01[] members = {member1, member2};
{
for (Construct01 s : members) {
System.out.println("이름:" + s.name + " 나이:" + s.age + " 성적:" + s.grade);
}
}
}
//static 메서드는 main 메서드 밖에서 정의 해야함
static void initMember(Construct01 member, String name, int age, int grade) {
member.name = name;
member.age = age;
member.grade = grade;
}
}
initMember 메서드를 사용해서 반복을 제거했지만, 이 메서드는 대부분 Member객체의 멤버 변수를 사용한다.
정리하면,
생성자는 메서드와 비슷하다. 하지만 메서드는 아니다!! 그렇기 때문에 void 는 사용하면 안된다.
생성자는 클래스가 객체로 생성될 때 자동으로 호출되는 메서드이다.
객체의 초기 상태를 설정하는 역할을 한다.
예를들어
주의할 점
- 생성자는 static이 되면 안된다
→ 생성자는 객체가 생성될 때 실행되는 것이기 때문에 static 키워드를 쓰면 안된다.
static은 객체를 만들어지도 않아도 생성되는 것인데, 생성자는 객체를 만들때 실행되는 것이라 사용하면 안된다. - 반환 타입이 없어야한다 (void도 쓰면 안 됨)
→ 생성자는 반환 타입(void 같은 것)이 없어야한다 - 클래스 이름과 같은 이름으로 생성해야한다!
→ Test1(int num, String name)
class Test1 {
int num; // 숫자 변수
String name; // 이름 변수
// 생성자 (이름이 클래스 이름과 같아야 해!)
Test1(int num, String name) {
this.num = num; // this는 현재 객체의 num을 의미
this.name = name;
System.out.println("생성자 호출: " + name + ", " + num);
}
}
public class Main {
public static void main(String[] args) {
// 객체 생성 -> 생성자가 자동으로 실행됨
Test1 t = new Test1(10, "홍길동");
}
}
'JAVA' 카테고리의 다른 글
[Java] 캡슐화 (1) | 2024.10.27 |
---|---|
[Java] 생성자 (0) | 2024.10.23 |
[Java] 객체 지향 프로그래밍 (1) | 2024.10.20 |
[Java] 문제와 풀이2 (1) | 2024.10.20 |
[Java] NullPointerException (0) | 2024.10.20 |