● 생성자
: 객체가 만들어질때 멤버변수의 초기화를 위하여 호출되는 함수이다.
※ 특징
- 클래스의 이름과 동일한 이름의 메소드로 구성한다.
- 함수의 반환값(return value)이 없다.
- 일반적으로 객체를 초기화하는 목적으로 사용된다.
※ 사용 예시
class 클래스 이름 {
클래스 이름 () {
생성자 함수의 내용;
}
}
public class Test {
public Test() {
System.out.println("생성자 호출");
}
public static void main(String[] args) {
Test con = new Test();
}
}
리턴값 없이 public 접근제한자를 적어주고, 클래스명과 동일하게 적어줘서 생성자를 선언해줍니다.
그안에 메시지 출력으로 "생성자 호출"을 적어줍니다.
그리고 Main메소드에서 Test클래스의 객체 new연산자를 통해 호출함과 동시에 "생성자 호출"이라는 메시지가 출력됩니다.
public class Test {
public Test(int num) {
System.out.println(num + "생성자 호출");
}
public static void main(String[] args) {
Test con = new Test(123);
}
}
이번에는 생성자를 선언할때 매개변수로 int형 데이터타입의 num변수로 받아주게 선언했습니다.
그리고 메시지 출력을 위해 매개변수로 받아온 num변수와 "생성자 호출"문구를 넣었습니다.
다시 Main메소드에서 Test클래스의 객체를 선언할때 파라미터로 넘겨줄값을 임의로 123을 적어서 보내면 int num의
매개변수가 받아 메시지를 출력합니다.
public class Test {
public Test(int num) {
System.out.println(num + "생성자");
}
public Test() {
}
public static void main(String[] args) {
Test con = new Test(123);
Test con2 = new Test();
}
}
이번에는 생성자를 두개 선언해보겠습니다.
2개의 생성자를 만든다해도 무조건 클래스명과 동일하게 하고 매개변수만 다르게 입력하면 됩니다.
첫번째 생성자는 매개변수 int데이터타입에 num변수를 받는걸 하나 생성해주고,
두번째 생성자는 그냥 매개변수없이 하나 생성해줍니다.
Main메소드에서 각각 생성할때 파라미터로 하나는 123을, 하나는 그냥 생성해서 확인해보면
다르게 작동하는걸 확인할 수 있습니다.
public class Test {
public Test(int num) {
System.out.println(num + "생성자");
}
public Test() {
System.out.println("매개변수가 없는 생성자 호출");
}
public Test(String n) {
System.out.println(n + "생성자호출");
}
public static void main(String[] args) {
Test con = new Test(123);
Test con2 = new Test();
Test con3 = new Test("오버로딩");
}
}
생성자 3개를 선언해보겠습니다.
하나는 매개변수 int형이 있는 생성자, 다른 하나는 매개변수없이 하나, 또다른 하나는 매개변수 String타입으로 생성자를 만들어줍니다. 그리고나서 Main메소드에서 각각 다르게 생성자를 만들어줍니다.
이때 파라미터로 다르게 넘겨주면 메시지가 각각 출력되는걸 확인할 수 있습니다.
import java.util.Scanner;
public class Test {
private int age;
public Test(int a) {
age = a;
}
public int getAge() {
return age;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("나이 입력 : ");
int age = sc.nextInt();
Test con = new Test(age);
System.out.println("당신의 나이는 "+con.getAge()+"이군요");
}
}
이번에는 좀 더 응용을 해보겠습니다.
int형 데이터타입을 매개변수로 받는 Test생성자를 선언해주고, 매개변수로 받은 a변수를 필드에있는 age변수에 저장해줍니다. 이때 필드에있는 age는 private 접근제한자이기때문에 외부에서 접근할수없습니다. 그래서 생성자를 생성할때 필드에있는 age가 저장되게 해줍니다. 그리고 ageAge메소드로 저장된 age변수값을 받습니다.
Main메소드에서 Scanner를 통해 나이를 입력받고 그값을 Test클래스 객체 생성할때 파라미터로 사용자로부터 받은 age
변수를 파라미터로 넘겨주면 생성자 매개변수 a변수가 그값을 받아 필드에있는 age값을 저장합니다.
그리고나서 메시지를 호출할때 객체.getAge()메소드를 호출하면 저장된 값이 출력됩니다.
public class Test {
private String version;
public Test(String version) {
System.out.println("windows7 입니다.");
this.version = version;
}
public String getVersion() {
return version;
}
public static void main(String[] args) {
Test con = new Test("Server Pack 1");
System.out.println("버젼 : " + con.getVersion());
}
}
위 소스도 전에있던 소스와 비슷합니다.
String타입으로 매개변수를 받아 해당 객체(this)에 있는 필드 version에 저장해줍니다.
( this를 모르시는 분은 아래 링크를 참고해주세요. )
그리고 Main메소드에서 Test클래스의 객체를 생성할때 파라미터로 Server Pack1을 넘겨주면 그값이 Test클래스에서
저장됩니다. 그리고 생성자를 생성하면 " windows7 입니다. "메시지가 출력됩니다.
다음으로, 메시지를 출력할때 객체명.getVersion메소드를 호출하면 생성자로 생성한 Server Pack1이 출력됩니다.
https://choseongho93.tistory.com/31 ( this 포인터 편 참고 )
'Programming Language > JAVA' 카테고리의 다른 글
[JAVA] 오버라이딩(Overriding)과 final클래스 (0) | 2019.07.26 |
---|---|
[JAVA] 쓰레드(thread)와 프로세스(process),멀티쓰레드, 멀티프로세싱, 데몬쓰레드(Daemon),동기화(Synchronized) (0) | 2019.07.25 |
[JAVA] 예외(exceptional event) 강제예외,예외전가,예외처리 try-catch, finally (0) | 2019.07.24 |
[JAVA] 상속( inheritance ) (0) | 2019.07.23 |
[JAVA] package ( 패키지 ) 개념과 생성방법 (0) | 2019.07.21 |
[JAVA] Sleep클래스 , Process클래스 (0) | 2019.07.20 |
[JAVA] Time(현재 시간 얻기), Date (0) | 2019.07.19 |
[JAVA] This포인터와 정보은닉 & 캡슐화 (2) | 2019.07.18 |