이전 글에서 배운 클래스와 관련있는 생성자에 대해 알아보자.
생성자는 new 연산자를 통해서 인스턴스를 생성할 때 반드시 호출이 되고 제일 먼저 실행되는 일종의 메소드이다. 그렇지만 메소드와는 다르다. 생성자는 객체를 초기화 시키는 역할을 한다. 생성자를 실행시키지 않고는 클래스로 부터 객체를 만들수 없다 생성자가 성공적으로 실행되면 힙 영역에 객체가 생성되고, 객체의 주소가 반환된다.
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);
}
}
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라고 칭한다
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 메소드는 클래스의 멤버변수를 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