생성자

13706 단어 JavaJava

이전 글에서 배운 클래스와 관련있는 생성자에 대해 알아보자.

생성자란?

생성자는 new 연산자를 통해서 인스턴스를 생성할 때 반드시 호출이 되고 제일 먼저 실행되는 일종의 메소드이다. 그렇지만 메소드와는 다르다. 생성자는 객체를 초기화 시키는 역할을 한다. 생성자를 실행시키지 않고는 클래스로 부터 객체를 만들수 없다 생성자가 성공적으로 실행되면 힙 영역에 객체가 생성되고, 객체의 주소가 반환된다.

기본생성자

  • 기본 생성자는 생략이 가능하다
  • 클래스가 public class로 선언되면 기본 생성자에도 public이 붙지만 public이 없다면 기본 생성자에도 public이 없다
  • 선언방법

Info info = new Info() // Info() 기본 생성자

매개변수를 사용하는 생성자

예제 코드를 통해 살펴 보자.


public class Main {
	public static void main(String[] args) {
		PhoneInfo ph = new PhoneInfo("woo", "1234", "qwer"); //매개변수에 3개의 값을 제공한다
		PhoneInfo ph1 = new PhoneInfo("hi", "1234"); // 매개변수에 2개의 값을 제공한다
		ph.showPhoneInfo(); //생성자 안에 메소드 호출
		ph1.showPhoneInfo();
	}
}

class PhoneInfo {
	private String name;
	private String phoneNumber;
	private String birthday;

	public PhoneInfo(String name1, String phoneNumber1, String birthday1) {
		name = name1; // 값이 멤버함수에 저장된다
		phoneNumber = phoneNumber1;
		birthday = birthday1;

	}

	public PhoneInfo(String name1, String phoneNumber1) {
		name = name1;
		phoneNumber = phoneNumber1;

	}

	public void showPhoneInfo() {
		System.out.println(name + " " + phoneNumber + " " + birthday);

	}

}


생성자 오버로딩

  • 위에서 여러개의 객체를 초기화 시키려고 똑같은 이름의 2개 생성자를 선언하였다 앞과 같이 매개변수를 달리하는 여러개의 생성자를 선언하는것을 생성자 오버로딩 이라고 한다.
    제공되는 매개값의 타입과 개수에 의해 호출될 생성자가 결정된다.

public PhoneInfo(String name1, String phoneNumber1, String birthday1) {
		name = name1; 
		phoneNumber = phoneNumber1;
		birthday = birthday1;

	}

	public PhoneInfo(String name1, String phoneNumber1) {
		name = name1;
		phoneNumber = phoneNumber1;

	}

this

보통 매개변수와 클래스 안에 멤버변수는 동일한 이름을 사용하는데
하지만 이 경우에는 이름이 동일하기 때문에 생성자 내부에서 해당 변수에 접근할 수 없다
동일한 이름의 매개 변수가 우선순위가 높기 때문이다
그럴땐 바로 이 this를 사용하면 된다.
this는 객체 자신의 참조이고 객체가 객체 자신을 this라고 칭한다


class PhoneInfo {
	private String name;
	private String phoneNumber;
	private String birthday;

	public PhoneInfo(String name, String phoneNumber, String birthday) {
		this.name = name1; 
		this.phoneNumber = phoneNumber1;
		this.birthday = birthday1;

	}
}

getter/setter

클래스의 특징인 정보 은닉을 가장 잘 보여주는 메소드이다
getter/setter 메소드는 클래스의 멤버변수를 private(접근 제한자)로 설정후 메인에서 값,호출을 할 수 없기때문에 getter/setter를 통해 멤버변수의 값,호출을 한다


public class Main {
	public static void main(String[] args) {

		PhoneInfo ph = new PhoneInfo();
		ph.num2 = 1;
		ph.setNum(3);

		System.out.println(ph.num2);
		System.out.println(ph.getNum());

	}
}

class PhoneInfo {
	private int num1;
	public int num2;

	public void setNum(int num) {
		num1 = num;  // setter를 통해 멤버변수 값 변경한다
	}

	public int getNum() {
		return num1; // getter를 통해 멤버변수 값을호출한다
	}

}

참고링크
https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=heartflow89&logNo=220955879645
https://wikidocs.net/281
https://kephilab.tistory.com/47
https://sas-study.tistory.com/49

좋은 웹페이지 즐겨찾기