시작하며
여러분 안녕하세요!
DreamHanks의254cm입니다.
이번에는 컨스트랙터에 대해서 알아보도록 하겠습니다.
Java의 전체 기사는 여기를 클릭해 주세요.
이전 기사는 [Java 개발] 제5회 클래스 에 대해서 배워봤습니다.
컨스트럭터 (생성자)
・컨스트럭터란?
컨스트럭터는 클래스의 인스턴스를 생성하기 위해 사용하는 메서드입니다.
컨스트럭터는「new」키워드를 사용해 호출합니다.
컨스트럭터 호출법
1 |
클래스명 변수명 = new 클래스명(인수); // new 오른쪽에 컨스트럭터가 위치하다 |
컨스트럭터 쓰는 법
1 2 3 |
접근제어자 클래스명(인수) { 처리 } |
메서드를 쓰는 방식이 비슷하지만 컨스트럭터는 반환값이 존재하지 않습니다.
샘플을 보면서 설명해드릴게요.
・샘플
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class 메인 클래스 이름{ public static void main(String[] args) { //인스턴스 생성 Cat mugi = new Cat(3, "grey"); } } class Cat{ int age; String color; //생성자 (인스턴스 생성시에 실행되는) public Cat(int age, String color){ this.age = age; this.color = color; } } |
위와 같이 작성하면 Cat 클래스의 인스턴스를 생성하자마자 mugi의 age와 color에 값이 설정됩니다.
컨스트럭터는 인스턴스를 생성할 때마다 호출되며,
인스턴스 작성 시 수행할 처리를 지정할 수 있습니다.
즉, 작성자가 의도한 대로 인스턴스를 생성할 수 있습니다.
※디폴트 생성자(default constructor)
java 컴파일러는 컨스트럭터를 만들지 않은 클래스에 대하여,
디폴트 컨스트럭터를 추가시킵니다.
디폴트 컨스트럭터는 실제 소스 코드에서는 보이지 않지만,
이하와 같은 것이 추가됩니다.
1 2 3 |
public 클래스명() { } |
위와 같은 빈 컨스트럭터가 추가되며,
컨스트럭터를 생성하지 않고도 클래스의 인스턴스를 생성할 수 있습니다.
기본 컨스트럭터는 인스턴스 생성 이외의 동작은 하지 않습니다.
・샘플
1 2 3 4 5 6 7 |
class Test { int test; } public void main (String args[]) { Test t1 = new Test(); } |
위와 같은 컨스트럭터가 생성되지 않았어도 인스턴스 생성을 할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 |
class Test { int test; public Test () { //실제 소스 코드에서는 보이지 않지만, 이런 //컨스트럭터가 추가됩니다. } } public void main (String args[]) { Test t1 = new Test(); } |
기본 컨스트럭터는 일반 컨스트럭터가 생성되어 있을 경우에는 사용할 수 없습니다.
클래스 생성자가 인스턴스 생성 시 의도한 처리를 실행시키고 싶어서 컨스트럭터를
작성합니다만, 디폴트 컨스트럭터를 사용하고자 의도한 처리를
실행시킬 수 없으니까요.
this
・this란?
this는 인스턴스가 자신을 참조하기 위해 사용되는 변수입니다.
this는 인스턴스의 주소를 나타내고 있습니다.
・샘플
1 2 3 4 5 6 7 8 9 10 11 |
public class Dog { public int age; public String name; public String species; public Dog(int age, String name, String species) { this.age = age; this.name = name; this.species = species; } } |
위의 샘플을 보면
this 변수를 이용하여 자신(Dog)의 age, name, species에 접속하여
파라미터의 age, name, species를 대입하였습니다.
위의 샘플과 같이 컨스트럭터의 파라미터와 클래스 필드 이름이 중복된 경우
this 변수를 이용하여 구분할 수 있습니다.
this 변수는 나중에 공부하는 static 메서드에서는 사용할 수 없습니다.
static 메서드 이외의 메서드는 안에서 this 변수가 숨겨져 있어
this 변수를 사용할 수 있습니다.
コメント