호쌤
호쌤 Just For Fun

[Java] 생성자

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[Java] 생성자≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

[Java] 생성자

생성자

생성자는 객체가 생성될 때 자동으로 실행되는 특수한 형태의 메서드를 말합니다.

#01. 생성자 이름 규칙

  • 생성자는 클래스의 이름과 동일해야 한다.
  • 리턴형을 명시하지 않는다.
  • 필요하다면 파라미터를 정의할 수 있다.
1
2
3
4
5
6
class Foo {
    /** 생성자 */
    Foo() {

    }
}

#02. 생성자의 주 용도

객체가 생성될 때 멤버변수의 값을 초기화(가장 처음에 값을 할당하는 행위)하기 위해 사용한다.

SimpleConstructor.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class MyBook {
    String title;
    int pages;
    String author;

    // 생성자
    MyBook() {
        System.out.println("----- 생성자가 실행되었습니다. -----");
        this.title = "자바 교과서";
        this.pages = 400;
        this.author = "자바 강사";
    }
}

public class SimpleConstructor {
    public static void main(String[] args) {
        MyBook myBook = new MyBook();
        System.out.println(myBook.title);
        System.out.println(myBook.pages);
        System.out.println(myBook.author);
    }
}
출력결과
1
2
3
4
----- 생성자가 실행되었습니다. -----
자바 교과서
400
자바 강사

#03. 기본 생성자

모든 클래스는 반드시 하나 이상의 생성자를 포함해야 한다. (하지만 지금까지의 예제들은 생성자를 포함하지 않고 있다.)

만약 소스코드 상에 생성자가 정의되지 않았다면 자바 컴파일러는 다음과 같이 파라미터와 구현부({})가 비어 있는 생성자가 있다고 간주한다.

이를 기본 생성자라고 한다.

1
2
3
4
5
class Foo {
  Foo() {
    // 생성자는 있지만, 내용이 비어 있다.
  }
}

#04. 파라미터를 갖는 생성자

생성자도 메서드의 한 종류이므로 파라미터를 함께 정의하는 것이 가능하다.

생성자의 파라미터를 맴버변수에 복사하는 것으로 객체의 초기화를 외부적인 요인에 의해 처리할 수 있다.

ConstructorParams.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Student {
    String name;
    int level;
    int age;

    // 생성자 --> 주로 멤버변수에 할당할 값들을 파라미터로 정의
    Student(String n, int l, int a) {
        System.out.println("----- 생성자가 실행되었습니다. -----");
        this.name = n;
        this.level = l;
        this.age = a;
    }
}

public class ConstructorParams {
    public static void main(String[] args) {
        Student s1 = new Student("민철", 4, 24);
        Student s2 = new Student("영민", 3, 22);

        System.out.printf("%s, %d학년, %d세\n", s1.name, s1.level, s1.age);
        System.out.printf("%s, %d학년, %d세\n", s2.name, s2.level, s2.age);
    }
}

크리에이티브 커먼즈 라이선스 ITPAPER(호쌤,쭈쌤)에 의해 작성된 ≪[Java] 생성자≫은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
이 라이선스의 범위 이외의 이용허락을 얻기 위해서는 leekh4232@gmail.com으로 문의하십시오.

comments powered by Disqus