패키지

생성자(Constructor) 본문

Server-Side/Java

생성자(Constructor)

업단업업 2015. 8. 1. 21:48


1. 생성자는 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메소드이다.


인스턴스 생성 기본 형식

클래스이름 변수 = new 클래스이름();


new는 인스턴스 생성 명령이고, 클래스이름()은 생성자 호출 명령이다.

-> 모든 클래스는 내부적으로 생성자가 필수 조건이다.


2. 인스턴스 변수의 초기화 작업에 주로 사용된다. 멤버변수는 자동 초기화가 지원되므로 생성자가 없어도 초기화 할 수 있다.


3. 기본형식


public 클래스이름() {

}

public 클래스이름(매개변수) {

this.멤버변수 = 매개변수;

}


4. 매개변수가 없는 생성자를 기본생성자라고 하고, 생성자가 전혀 없는 클래스인 경우에만 컴파일 과정에서 기본생성자는 자동 생성된다.

매개변수가 있는 생성자를 만드는 경우는 반드시 기본 생성자가 같이 존재해야 합니다. 기본 생성자가 컴파일 과정에서 자동 생성되지 않기 때문이다.


5. 생성자가 두 개 이상을 정의하는 것을 생성자 오버로딩(overloading)이라고 한다. 오버로딩 상태는 메소드 시그니처(signature)가 다른 상태를 뜻한다. 시그니처는 매개변수 구성을 뜻한다. 매개변수 구성은 매개변수 자료형, 개수, 순서에만 영향을 받는다.


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

//Sample82.java

package com.test;


public class Sample82 {


//생성자가 없는 클래스 작성

//(-> 내부적으로 기본생성자-매개변수가 없는 생성자- 자동 생성)

/*

public Sample82() {

}

*/

//멤버변수(자동 초기화 지원)

private int a;

//getter-> 멤버변수에 대한 간접적인 노출

public int getA() {

//멤버변수 a의 값을 외부에 노출시키기 전에

//가공 처리가 가능한 부분

return this.a;

}

}


//Main82.java

package com.test;


public class Main82 {


public static void main(String[] args) {


//객체 생성(new) 및 생성자 호출(Sample82())

Sample82 sample = new Sample82();

//멤버변수 a의 값(sample.getA())을 출력

//멤버변수 a는 내부적으로 자동 초기화 실행

System.out.println(sample.getA()); //0

//System.out.println(sample.a); //X

}


}



//Sample83.java

package com.test;


public class Sample83 {


//인스턴스 멤버변수(자동 초기화 지원)

private int a;


//기본생성자가 있는 클래스 작성

//인스턴스 멤버변수에 대한 초기화 지원

//객체 생성시 자동 호출 및 실행

public Sample83() {

this.a = 10;

}

//getter-> 멤버변수에 대한 간접적인 노출

public int getA() {

//멤버변수 a의 값을 외부에 노출시키기 전에

//가공 처리가 가능한 부분

return this.a;

}

}


//Main83.java

package com.test;


public class Main83 {


public static void main(String[] args) {

//객체 생성(new) 및 생성자 호출(Sample83())

//생성자에 의한 멤버변수 초기화 과정 실행

Sample83 sample = new Sample83();


//멤버변수 a의 값(sample.getA())을 출력

//멤버변수 a는 내부적으로 자동 초기화 실행

System.out.println(sample.getA()); //10

}


}

//Sample84.java

package com.test;


public class Sample84 {


//인스턴스 멤버변수(자동 초기화 지원)

private int a;


//매개변수가 있는 생성자가 있는 클래스 작성

//인스턴스 멤버변수에 대한 초기화 지원

//객체 생성시 자동 호출 및 실행

//외부에서 전달된 값을 가지고 멤버변수 초기화

//주의)매개변수가 있는 생성자 작성시 기본생성자 같이 작성할 것

public Sample84() {

}

public Sample84(int a) {

this.a = a;

}

//getter-> 멤버변수에 대한 간접적인 노출

public int getA() {

//멤버변수 a의 값을 외부에 노출시키기 전에

//가공 처리가 가능한 부분

return this.a;

}

}


//Main84.java

package com.test;


public class Main84 {


public static void main(String[] args) {

//객체 생성(new) 및 생성자 호출(Sample84())

//매개변수가 있는 생성자에 의한 멤버변수 초기화 과정 실행

//멤버변수 초기화에 사용될 데이터 전달

Sample84 sample = new Sample84(20);

//멤버변수 a의 값(sample.getA())을 출력

//멤버변수 a는 외부에서 전달된 값으로 초기화

System.out.println(sample.getA()); //20


}


}


//Sample85.java

package com.test;


public class Sample85 {


//인스턴스 멤버변수(자동 초기화 지원)

private int a;

private int b;


//생성자 오버로딩

//생성자가 두 개 이상 정의된 상태

//->매개변수 구성(자료형, 갯수, 순서)이 다른 경우만 인정

public Sample85() {

}

public Sample85(int a) {

this.a = a;

}

public Sample85(int a, int b) {

this.a = a;

this.b = b;

}


//매개변수 구성이 같은 경우는 오버로딩이 되지 않는다.

/*

public Sample85(int b) {

this.b = b;

}

public Sample85(int b, int a) {

this.b = b;

this.a = a;

}

*/

//getter-> 멤버변수에 대한 간접적인 노출

public int getA() {

//멤버변수 a의 값을 외부에 노출시키기 전에

//가공 처리가 가능한 부분

return this.a;

}

public int getB() {

return this.b;

}

}



//Main85.java

package com.test;


public class Main85 {


public static void main(String[] args) {


Sample85 sample1 = new Sample85();

System.out.printf("a:%d, b:%d %n"

,sample1.getA(), sample1.getB()); //0, 0

Sample85 sample2 = new Sample85(10);

System.out.printf("a:%d, b:%d %n"

,sample2.getA(), sample2.getB()); //10, 0

Sample85 sample3 = new Sample85(20, 30);

System.out.printf("a:%d, b:%d %n"

,sample3.getA(), sample3.getB()); //20, 30


//문제) 멤버변수 b만 20으로 초기화하려면

//생성자 호출 과정?

Sample85 sample4 = new Sample85(0, 20);

System.out.printf("a:%d, b:%d %n"

,sample4.getA(), sample4.getB()); //0, 20


}


}


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-요약

1. 생성자 

- 생성자  객체 생성시에 호출되는  메소드 이다.

2. 기본 형식

기본 생성자, 매개변수가 있는 생성자


3. 매개변수가 있는 생성자는 외부에서 전달된 값으로 멤버변수를 초기화할 때 사용.


4. this 키워드 생성자 호출시 사용 가능.

-> 생성자 오버로딩 상태인 경우




'Server-Side > Java' 카테고리의 다른 글

객체 지향 프로그래밍_기초개념  (3) 2015.08.04
메소드 오버로딩(Overloading)  (0) 2015.08.03
메소드 오버라이딩(Overriding)  (0) 2015.07.29
이클립스 한글깨짐 현상  (0) 2015.07.29
eclipse 설치  (0) 2015.07.13
Comments