프로그래밍 언어/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