자바에서 클래스의 3대 구성요소는 필드와 메소드 그리고 생성자로 이루어져 있는데요. 저번글에서 필드의 선언, 전역변수와 지역변수의 차이, 필드의 사용 예제들을 다루었고 이번에는 제일 중요한 생성자에 대해서 정리를 해볼까 합니다.
링크 → 자바(Java)〃필드와 변수의 선언위치와 초기값(전역변수,지역변수)
생성자는 말그대로 객체를 생성하고 초기화를 하는 역활을 담당하고 있으며, 생성자를 실행할 수 없다면 클래스는 객체를 생성할 수가 없습니다. 그렇기 때문에 모든 클래스에는 생성자가 한개 이상 반드시 존재하며 따로 선언을 하지 않더라도 보이지 않는 디폴트 생성자가 자동으로 추가됩니다.
■ 디폴트 생성자(Default Constructor)
기본 생성자라고도 부르며 디폴트 생성자는 클래스에 매개변수나 아무 생성자가 없을때 따로 정의 하지 않더라도 자바 컴파일러에 의해 기본적으로 만들어지는 생성자입니다. 그러나 클래스 내부에 선언한 생성자가 하나라도 있으면 디폴트 생성자는 생성되지 않습니다.
앞에서부터 차례대로 보시면..
첫번째는 디폴트 생성자를 알아보기 위한 사진입니다. class내부에 생성자가 없어도 오류가 뜨지 않는 모습을 볼 수 있습니다. 보이지 않는 디폴트 생성자가 존재하기 때문이죠.
두번째는 클래스명과 객체의 이름을 다르게 주었더니 오류가 생겼습니다. 그 뜻은 클래스명과 동일한 이름으로 생성자를 만들어 주어야 된다는 것입니다.
세번째는 오류가 사라졌습니다. 하지만 void가 선언된 메소드는 리턴할값이 없다는 것을 의미하기 때문에 생성자의 의미보다는 메소드에 더 가깝다고 볼 수 있겠네요. 생성자는 리턴타입이 없어요. 말나온김에 생성자의 조건에 대해 정리해보겠습니다.
void에 대해 정리한 글 → 자바(Java)〃리턴값이 없을때는 void를 사용
■ 생성자의 조건
생성자는 다음과 같은 조건을 가지고 있는데요. 위에서 언급한 3가지를 제외한 나머지도 정말 중요한 부분이기 때문에 한번 알아두시면 좋을것 같습니다.
매개변수는 변수와 변수와의 관계를 정리하는 또 다른 하나의 변수입니다. 생성자 Student(String name, int age){}로 예를 들어보면 name과 age가 매개변수입니다. 이 매개변수의 이름과 타입이 다른 생성자를 여러개 만들때 오버로딩을 이용하는 것이고, new연산자를 이용해서 생성자를 선언을 해야 한다는 내용입니다.
this와 super는 글이 길어져서 다음글에서 정리해보도록 하고 생성자의 주된 목적인 필드의 초기화를 사용한 예제를 보도록 할게요.
■ 필드 초기화
필드 초기화를 하는 이유는 말이죠. 동일한 이름을 가지는 클래스안의 객체들은 처음에 모두 똑같은 데이터를 가지고 있는데 그 객체마다 값을 변경 해주기 위해 초기화를 합니다.
위와 같이 new 연산자를 이용해 sc1, sc2 두개의 생성자를 만들었지만 필드를 초기화 해주지 않아 데이터가 동일한걸 볼 수 있습니다. 만약에 초기화를 한다면?
필드를 초기화 해줌으로 기존에 있던 "지훈"과 "27"의 값이 메인 메소드에서 제가 입력한 값으로 변경되어 출력되었습니다. 다시한번 정리하자면 매개변수의 값을 다르게 하고 싶다 할때 필드의 초기화를 하는것이고 이것이 생성자의 역활이라고 보시면 되겠습니다.
다음글 → 자바(Java)〃생성자 오버로딩과 메소드 오버로딩
다음글 → 자바(Java)〃오버로딩과 오버라이딩의 차이
글이 길어지기도 했고 이만 잘시간이 되서 여기까지 끊고, 내일은 오버로딩과 this와 super에 대해서 정리해볼 생각입니다.
'프로그래밍 > Java' 카테고리의 다른 글
자바(Java)〃static final과 final의 사용법 (3) | 2015.11.09 |
---|---|
자바(Java)〃리턴값이 없을때는 void를 사용 (0) | 2015.11.05 |
자바(Java)〃오버로딩과 오버라이딩의 차이 (4) | 2015.11.04 |
자바(Java)〃생성자 오버로딩과 메소드 오버로딩 (1) | 2015.11.04 |
자바(Java)〃필드와 변수의 선언위치와 초기값(전역변수,지역변수) (5) | 2015.11.02 |
자바(Java)〃객체지향 특징 상속/캡슐화/다형성 (0) | 2015.10.29 |
자바(Java)〃객체지향 vs 절차지향 비교+장점과 단점 (0) | 2015.10.28 |
자바(Java) Heap영역과 Stack영역 정리 (9) | 2015.10.19 |