프로그래밍 언어/JAVA
[JAVA] 클래스의 구성 멤버 / 생성자(1)
김곰댕
2021. 6. 21. 16:53
728x90
생성자(Constructor)
new 연산자에 의해 호출되어 객체의 초기화를 담당한다.
new 클래스();
필드 값을 설정하거나 메소드를 호출해서 객체를 사용할 수 있도록 준비하는 역할을 수행
기본 생성자(Default Constructor)
모든 클래스는 생성자가 반드시 존재하며 하나 이상을 가질 수 있다.
생성자 선언을 생략하면 컴파일러는 다음과 같은 기본 생성자를 추가시킨다.

생성자 선언
디폴트 생성자 대신 개발자가 직접 선언
클래스( 매개변수선언, ...)
{
//객체의 초기화 코드
}
개발자가 선언한 생성자가 있을 경우, 컴파일러는 기본 생성자를 추가하지 않는다.
new 연산자로 객체 생성시 개발자가 선언한 생성자를 반드시 사용해야 한다.
public class Car
{
//생성자
Car(String model, String color, int maxSpeed) { ... }
}
Car myCar = new Car("그랜저", "검정", 300);
매개변수의 타입과 수에 맞게 값을 넣어주어야함.
예제)
package sec07.exam01_constructor_declaration;
public class Car
{
Car(String color, int cc)
{
}
}
package sec07.exam01_constructor_declaration;
public class CarExample
{
public static void main(String[] args)
{
//Car myCar = new Car(); 컴파일러 오류 / Car 클래스에 개발자가 선언한 생성자가 있기 때문에 컴파일러는 기본 생성자를 사용하지 못해서
//개발자가 선언한 매개변수의 타입과 수에 맞게 값을 넣어야함.
Car myCar = new Car("검정", 3000);
}
}
필드초기화
초기값 없이 선언된 필드는 객체가 생성될 때 기본값으로 자동 설정된다.
다른 값으로 필드를 초기화하는 방법
1. 필드를 선언할때 초기값을 설정
2. 생성자의 매개값으로 초기값을 설정
public class Korean
{
//필드
String nation = "대한민국";
String name;
String ssn;
//생성자
public Korean(String n, String s)
{
name = n;
ssn = s;
}
}
Korean k1 = new Korean("박자바", "011225-1234567");
Korean k2 = new Korean("김자바", "930525-0654321");
예제)
package sec07.exam02_field_initlalize;
public class Korean
{
String nation = "대한민국";
String name;
String ssn;
public Korean(String n, String s)
{
name = n;
ssn = s;
}
}
package sec07.exam02_field_initlalize;
public class KoreanExample
{
public static void main(String[] args)
{
Korean k1 = new Korean("박자바","011225-1234567");
Korean k2 = new Korean("김자바","930525-0654321");
System.out.println("k1 nation : " + k1.nation);
System.out.println("k1 name : " + k1.name);
System.out.println("k1 ssn :" + k1.ssn);
System.out.println("k2 nation : " + k2.nation);
System.out.println("k2 name : " + k2.name);
System.out.println("k2 ssn :" + k2.ssn);
}
}

생성자의 매개변수와 필드명이 동일한 경우
- 관례적으로 매개변수의 값을 필드값으로 설정할 경우 매개변수와 필드명을 동일하게 준다.
- 생성자 내부에서는 매개변수가 우선 순위를 갖는다.
- 필드임을 명시하기 위해 this.필드명을 사용한다.
this는 객체 자신의 참조로서 자신의 번지를 가지고 있다.
우리가 우리 자신을 "나"라고 하듯이 객체가 객체 자신을 this라고 한다.
pubilc Korean(String name, String ssn)
{
//name = name 이라고 하는경우 생성자 내에서 매개변수가 우선순위이기 때문에 매개변수에 매개변수를 저장하는것이 된다.
this.name(필드) = name(매개변수);
this.ssn = ssn;
}
728x90