본문 바로가기

코딩 공부/Java

[Java] 16_생성자

생성자

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

#01. 생성자 이름 규칙

  • 생성자는 클래스의 이름과 동일해야 한다.
  • 리턴형을 명시하지 않는다.
  • 필요하다면 파라미터를 정의할 수 있다.

#02. 생성자의 주 용도.

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

SimpleConstructor.java

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);
    }
}
출력결과
----- 생성자가 실행되었습니다. -----
자바 교과서
400
자바 강사

#03. 기본 생성자

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

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

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

class foo{
    Foo() {
        // 생성자는 있지만, 내용이 비어있다.
    }
}

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

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

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

ConstructorParams.java

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.age, s1.level);
        System.out.printf("%s %d세, %d학년\n", s2.name, s2.age, s2.level);
    }
}
출력결과
----- 생성자가 실행되었습니다. -----
----- 생성자가 실행되었습니다. -----
민철 24세, 4학년
영민 22세, 3학년

'코딩 공부 > Java' 카테고리의 다른 글

[Java] 18_MyBatis 설정하기  (0) 2020.05.12
[Java] 17_DAO 패턴  (0) 2020.05.12
[Java] 17_은닉성  (0) 2020.05.08
[Java] 14_재귀호출  (0) 2020.05.08
[Java] 13_값 복사, 참조 복사  (0) 2020.05.08