[Java 기본] 생성자
생성자 - 필요한 이유
객체를 생성하는 시점에 어떤 작업이 하고 싶다면 생성자(Constuctor)를 이용하면 된다.
이해를 돕기 위해 아래 예제를 살펴보자.
예제
public static void main(String[] args) {
MemberInit member1 = new MemberInit();
member1.name = "user1";
member1.age = 15;
member1.grade = 90;
MemberInit member2 = new MemberInit();
member2.name = "user2";
member2.age = 20;
member2.grade = 80;
MemberInit[] members = {member1, member2};
for (MemberInit m : members) {
System.out.println("이름: "+ m.name + " 나이: "+ m.age + " 성적: " + m.grade);
}
}
=> 객체를 생성하고 나면 변수에 초기값을 설정해야 한다. 위의 코드는 회원의 초기값을 설정하는 부분이 반복된다.
메서드를 사용해서 반복을 제거해보자.
public class MemberInitMain2 {
public static void main(String[] args) {
MemberInit member1 = new MemberInit();
initMember(member1, "user1", 15, 90);
MemberInit member2 = new MemberInit();
initMember(member2, "user2", 20, 80);
MemberInit[] members = {member1, member2};
for (MemberInit m : members) {
System.out.println("이름: "+ m.name + " 나이: "+ m.age + " 성적: " + m.grade);
}
}
static void initMember(MemberInit member, String name, int age, int grade) {
member.name = name;
member.age = age;
member.grade = grade;
}
}
=>객체지향적인 프로그램을 위해 Member가 자기 자신의 데이터를 변경하도록 코드를 수정해보자.
this
MemberInit.java
public class MemberInit {
String name;
int age;
int grade;
void initMember(String name, int age, int grade) {
this.name = name;
this.age = age;
this.grade = grade;
}
}
=> 매개변수와 멤버변수가 동일하다. 둘을 어떻게 구분할까?
이럴 땐 더 가까운 스코프의 변수가 우선순위를 가진다. 이러면 name = name 에서 좌변, 우변의 변수는 동일하게 매개변수를 가리키게 된다. 이럴 때 this 한정자를 붙이면 자신의 인스턴스 자신의 참조값을 가리킨다.
InitMember는 Member의 초기값 설정하는 역할을 한다. 자기 자신의 인스턴스를 외부에서 전달된 파라미터로 셋팅하는 것이다.
정리
- 매개변수의 이름과 멤버 변수의 이름이 같은 경우 this를 사용해서 둘을 명확하게 구분해야 한다.
- this는 인스턴스 자신을 가리킨다.
this의 생략
this는 생략 가능하다. 이 경우 변수를 찾을 때 가까운 지역변수를 찾고 없으면 멤버변수를 찾는다.
public class MemberThis {
String nameField;
void initMember(String nameParameter) {
nameField = nameParameter;
}
}
=> 매개변수와 멤버변수의 이름이 다른 경우에 생략할 수 있다.
이름이 다르더라도 멤버변수에 접근하는 경우에 항상 this를 적어주는 코딩스타일도 있다. 결과는 동일한데, this를 붙이면 멤버변수를 사용한다는 것을 쉽게 확인할 수 있다는 차이점이 있다.
최근에는 IDE가 발전하면서 변수 색상을 다르게 표시해주기 때문에 사용하지 않는 추세이다.
* 인프런 '김영한의 실전 자바 - 기본편'을 참고하여 작성하였습니다.