생성자 (Constructor)
인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드이다.
메소드 이름이 클래스 이름과 동일하고 리턴 자료형이 없는 메서드이다.
1 2 3 4 5 6 7 8 9 10 11 | class Card { String kind; int number; card (){ } // 매개변수가 없는 생성자 card (String k, int n) { // 매개변수가 있는 생성자 kind = k; number = n; } } | cs |
card() 같은 생성자 경우 컴파일러가 제공하는 기본 생성자로서,
클래스에 생성자가 없을 경우 컴파일러가 자동적으로 기본 생성자를 추가하여 컴파일한다.
즉, card(String kind, int number) 같은 생성자가 정의된 경우 컴파일러는 자동적으로 기본 생성자를 추가하지 않는다.
1 | Card c = new Card(); | cs |
연산자 new에 의해 메모리(heap)에 Card 클래스의 인스턴스가 생성되고, 생성자 Card()가 호출되어 수행된다.
연산자 new의 결과로 생성된 Card 인스턴스 주소가 반환되어 참조변수 c에 저장된다.
즉, 생성자가 인스턴스를 생성하는 것이 아니다.
this(): 같은 클래스의 다른 생성자를 호출할 때 사용한다.
this: 인스턴스를 가리키는 참조변수로, 모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Car { String color; int doorNum; Car(){ this("white", 4); // Car(String color, int doorNum) 호출 } Car(String color) { this(color, 4); // 다른 생성자를 호출할 때는 반드시 첫 줄에만 호출이 가능 } Car(String color, int doorNum) { // 매개변수 이름을 다르게 하는 것보다 this를 사용해 구별되도록 하여 코드의 가독성을 높인다. this.color = color; this.doorNum = doorNum; } } | cs |
참고도서: 자바의 정석
'Java' 카테고리의 다른 글
접근 제어자 (Access Modifier)와 캡슐화(Encapsulation) (0) | 2018.11.27 |
---|---|
JVM (Java Virtual Machine) 개념과 JVM 메모리 구조 (0) | 2018.11.27 |
상속 (Inheritance) (0) | 2018.11.27 |
객체지향 프로그래밍 (Object-Oriented Programming) (0) | 2018.11.26 |
객체지향 설계 (0) | 2018.11.15 |