Post

[Java] 09. 생성자(Constructor)

[Java] 09. 생성자(Constructor)

1. 생성자(Constructor)에 대해

클래스를 새로 만들고 변수를 하나씩 넣어주면서 값을 초기화하려고 합니다
그런데 계속 p.age = 20; p.name = "길동"; 이런식으로 추가해줘야 하는걸까요

게다가 저번 글에서 배웠다시피 이렇게 작성하려면 변수는 public으로 써줘야하니 보안도 문제입니다
하지만 인스턴스를 생성함과 동시에 해당 객체에 있는 메서드를 실행시키며 값을 넣어주는 방법이 있으니 알아봅시다



2. 생성자를 사용하는 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Person 클래스
public class Person {
    private int age;
    private String name;

    public Person(int a, String b) {
        age = a;
        name = b;
    }

    public void print() {
        System.out.println("제 이름은 "+name+"이고, 나이는 "+age+"살 입니다.");
    }
}

// Main 클래스
public class Main {
    public static void main(String[] args) {

        Person p = new Person(20, "길동");
        p.print();  // 출력 결과 : 제 이름은 길동이고, 나이는 20살 입니다.
    }
}

생성자를 사용하는 방법은 클래스명과 같은 이름으로 메서드를 작성해주면 됩니다
그러면 클래스가 만들어지면서, private로 보호된 변수에 값을 각각 넣을 수 있습니다!


3. 생성자를 사용할 때에는 this.변수

보통 생성자를 사용할 떄에는 메서드에 있는 변수와 클래스에 있는 변수의 이름을 통일시키며 사용합니다
하지만 같은 이름으로 작성하면 ‘메서드의 변수’인지 ‘클래스의 변수’인지 알아보기 힘드니 this를 사용해야 합니다

1
2
3
4
5
6
7
8
9
public class Person {
    private int age;
    private String name;

    public void Person(int age, String name) {
        this.age = age;     // this.age은 Person의 age 변수를, age는 생성자 메서드의 age 변수를 의미
        this.name = name;
    }
}



4. 여담

그런데 생성자를 이렇게 사용하면 객체를 만들 때마다 생성자에 값을 꾸준하게 넣어줘야하는 단점이 있습니다
만약 이메일은 기본값을 ‘X’로 지정하고 따로 추가할 때에만 기본값을 바꿔주고 싶을 때도 있는거죠

만약 메서드를 (이름) 또는 (나이), (이름, 나이), (이름, 나이, 이메일) 이렇게 여러가지로 작성하고 싶다면
‘메서드 오버로딩’ 기술을 사용해야 하는데, 이건 다음에 알아보도록 합시다

This post is licensed under CC BY 4.0 by the author.