본문 바로가기
Java

[Java] 생성자와 생성자의 메소드 오버로딩

by eyoo 2022. 7. 1.

클래스의 멤버변수에 데이터를 세팅하는 방법은 세가지가 있다.

 

  1. 다이렉트로 저장
  2. 함수로 저장
  3. 생성자를 호출할때 저장 (메모리에 영역을 확보하고 바로 멤버변수에 데이터 세팅)

 

여기서 생성자는 메모리의 heap 영역에 클래스를 만들면서 작업을 할수있게하는 함수다.

# 메인에서 클래스를 사용할수있게 하는것

 

주소록 서비스를 위한 멤버데이터를 저장하는 클래스를 만들었다.

 

public class Member {
	
	String name;
	String tel;
	String address;
	
	void print() {
		System.out.println("Name: "+name+" , Tel: "+tel);
		System.out.println("Address: "+address);
	}

	void setMember(String name,String tel,String address ) {
		this.name = name;
		this.tel = tel;
		this.address = address;
		
	}
	
}

# 보기쉽게 출력할수있도록 print 함수를 만들었다.

# setMember 함수를 만들어서 메인에서 객체를 생성한 후 데이터를 저장할수 있도록 한다.

# 같은 클래스 내에서는 앞에 따로 데이터타입을 입력하지 않아도 된다. (단, 함수의 파라미터에는 메인에서 넣어줄 데이터 타입을 지정해줘야 하니 데이터타입을 입력한다.)

# this를 사용하여 해당 클래스의 멤버변수(3번째 줄부터 5번째 줄까지) 인것을 표현했고 ' = ' 의 오른쪽의 변수는 로컬변수 (함수에 묶여있는 변수) 로 구분할수있다.

 

 

메인 클래스를 확인해보자.

 

public class MemberMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Member m1 = new Member();
		Member m2 = new Member();
		m1.print();
		
		m1.name = "Mike";
		m1.tel = "010-1234-5678";
		m1.address = "Seoul 101";
		m1.print();
		
		m2.setMember("John", "010-8765-4321","Seoul 102");
		m2.print();

	}

}

# 생성자를 호출하여 객체를 생성했다. (이제 이 객체마다 데이터를 저장할수있다.)

# new 를 사용하여 heap에 객체를 찍을수있다.

# m1에는 데이터를 일일이 다이렉트로 저장했다.

# m2에는 setMember 함수를 사용해서 데이터를 저장했다.

 

 

이제 생성자를 호출할때 데이터를 저장할수있도록 만들자.

 

	Member(String name,String tel,String address){
		this.name = name;  
		this.tel = tel;
		this.address = address;
	}

# 해당 클래스와 똑같은 이름으로 만든다.

# 파라미터로는 들어갈 데이터의 데이터 타입과 멤버변수의 이름을 입력한다.

# 그 후 this를 활용하여 멤버변수와 로컬변수를 구분한다.

 

 

메인클래스에서 생성자를 호출하면서 데이터를 세팅하자.

 

		Member m1 = new Member("Mike","010-1234-5678","Seoul 101");
		m1.print();

 

 

위 방법으로만 코드를 입력하면 단순히 생성자를 호출할때 오류가 발생한다.

 

이를 해결하기위해 오버로딩을 활용해서 생성자를 호출할수있도록 하자.

 

	Member(){
	}

# 위와 비슷한 형식의 속이 빈 코드를 작성했다.

 

 

메인에서 확인해보자.

 

		Member m2 = new Member();
		m2.setMember("John", "010-8765-4321","Seoul 102");
		m2.print();

# 이제 생성자 호출이 잘 이루어진다.

 

 

 

 

 

댓글