티스토리 뷰

Java/문법

3 . 생성자 : Constructor

알 수 없는 사용자 2018. 10. 3. 17:52


이제는 본격적인 자바 문법 내용을

다루도록 하겠습니다.

변수형 등과 같은 초반 내용은 생략하고

객체에 대한 설명부터 진행하도록 하겠습니다.

오늘은 객체에서 기본이 되는 생성자에 대해 

알아보도록 하겠습니다.


================================================


Constructor : 생성자



1. Constructor가 무엇일까?


 우리는 앞서 포스팅한 객체지향 프로그래밍으로 객체를 생성할 때 new 연산자를 사용하여 생성하게 됩니다.

간단히 말해 new 연산자를 이용해 객체를 생성할 때 넘겨받은 파라미터의 패턴에 따른 설계해둔 생성자가 자동으로 호출되어 객체 변수들의 값이 초깃값으로 지정되는 것입니다.


"클래스 객체변수 = new 클래스();"

 

앞의 예제에서는 Robot 객체를 생성하여 객체의 변수에 직접 접근하여 값을 지정해 주었습니다. 

하지만 이때 Robot 클래스에는 생성자를 호출할 만한 기능을 추가하지 않았는데 생성자 호출이 일어나지 않았던 걸까요?


아닙니다. 만약 클래스에 생성자를 설계하지 않았다면 컴파일러가 자동으로 Default Constructor를 생성합니다. 이 때문에 new Robot(); 을 통해 객체를 생성할 수 있었던것입니다.



2. Constructor의 장점은?


class Robot {                    // 객체명
// 객체가 가지고 있는 데이터
String name;
int type;

// 객체가 작업해야 할 메소드
String greet(){
String ment = "안녕하세요. 당신의 ";
switch(type){ // 객체 데이터를 이용 가능
case 1:
ment += "전투로봇!! ";
break;
case 2:
ment += "청소로봇!! ";
break;
default :
ment += "로봇 ";
}
ment += name + " /가 인사드립니다.";

return ment;
}
}


 Robot 클래스를 가지고 살펴보겠습니다. Robot이 가지고 있는 변수는 String 타입의 name과 int 타입의 type입니다.

생성자를 지정하지 않고 객체를 생성했기 때문에 기본 생성자를 컴파일러가 생성하게 되고 name에는 null 값, type에는 0이 자동으로 저장되게 됩니다.

그렇기 때문에 메인 클래스에서 각 로봇마다 변수를 직접 접근하여 변수에 값을 저장해야 하는 작업을 해주어야 합니다. 매우 비효율적인 작업이죠.

이 때문에 생성자라는 것이 존재합니다.




3. Constructor 설계 방법은 무엇일까?


 Constructor의 설계 규칙은 매우 간단합니다. 마치 new Robot(); 처럼 객체를 생성할 때 Robot() 메소드를 호출한다고 생각하면 편합니다.

어디까지나 이해하기 쉽게 하기 위해 말한 것이지 실제로 생성자는 반환타입이 없고 접근 제어자만 올 수 있으며, 생성자의 이름은 클래스 명과 동일해야 합니다.

그렇기 때문에 컴파일러가 생성하는 기본 생성자도 다음과 같다고 생각할 수 있습니다.


Robot() {
name = null;
type = 0;
}


기본 생성자는 매개변수가 없는 타입으로 변수(name과 type)를 정해진 디폴트 값으로 초기화해주는 기능이라고 생각하면 됩니다.


생성자는 반환 타입은 없지만 파라미터값은 존재할 수 있습니다. 파라미터로 받은 값을 변수에 저장하여 객체를 생성하며 초깃값을 결정합니다.

Robot(String n, int t) {
name = n;
type = t;
}


생성자도 전달되는 파라미터에 따라 다른 생성자가 호출되기 때문에 객체를 생성할 시 전달할 파라미터의 조건에 따라 생성자를 설계해두면 변수의 값을 일일이

설정하지 않아도 초깃값을 설정할 수 있습니다. 이 특징이 생성자 오버로딩입니다.

(오버로딩에 대한 설명은 차후에 따로 포스팅하겠습니다!)


class Source03_RobotUse {
public static void main(String[] args) {
Robot r1 = new Robot("네모", 2);
System.out.println(r1.greet());
}
}


만약 위의 Robot 생성자가 클래스에 정의되어 있다면 다음과 같이 Robot 객체를 생성할 수 있습니다. 전달되는 파라미터가 String과 int형으로 패턴에 맞는 생성자가 클래스에 정의되어 있기 때문이죠.


여기서 참고할 점이 만약 기본생성자를 정의하지 않고 String과 int 값을 받는 생성자만 정의했다면 new Robot(); 으로 객체를 생성할 수 없습니다.

기본생성자는 클래스 내에 어떠한 생성자도 존재하지 않을 때 자동으로 컴파일러가 생성해 주는 것으로 만약 new Robot()과 같이 객체를 생성하고 싶다면

직접 기본생성자를 정의해주어야 합니다.



공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함