MemberInit
public class MemberInit {
String name;
int age;
int grade;
void initMember(String name,int age, int grade){
this.age = age;
this.name = name;
this.grade = grade;
}
}
MethodInitMain3
public class MethodInitMain3 {
public static void main(String[] args) {
MemberInit member1 = new MemberInit();
member1.initMember("user1",15,90);
MemberInit member2 = new MemberInit();
member2.initMember("user2",30,90);
MemberInit[] memberInits = {member1,member2};
for (MemberInit memberInit : memberInits) {
System.out.println("이름:" + memberInit.name + "나이: "+memberInit.age + "성적: " +memberInit.grade);
}
}
}
이제 메서드호출을 통해 객체의 필드를 초기화 해줬다.
참고: this.를 파라미터와 필드명이 다르면 쓰지 않아도 된다. 같으면 써야함
만약 이름이 다르다면 안쓰는것을 추천
public class MemberConstruct {
String name;
int age;
int grade;
MemberConstruct(String name,int age, int grade){
this.name=name;
this.age=age;
this.grade=grade;
}
}
생성자를 사용함
public class ConstructMain1 {
public static void main(String[] args) {
MemberConstruct member1 = new MemberConstruct("user1",15,90);
MemberConstruct member2 = new MemberConstruct("user2",30,40);
MemberConstruct[] memberConstructs = {member1,member2};
for (MemberConstruct memberConstruct : memberConstructs) {
System.out.println("이름:" + memberConstruct.name + "나이: "+memberConstruct.age + "성적: " +memberConstruct.grade);
}
}
}
장점: 파라미터 누락을 방지할 수 있음
생각해보면 이전에 new로 객체를 만들때, 생성자를 만들지 않았는데도 생성자 호출이 되었다.
public class MemberInit {
String name;
int age;
int grade;
void initMember(String name,int age, int grade){
this.age = age;
this.name = name;
this.grade = grade;
}
//자바가 기본으로 만들어줌
MemberInit(){
}
}
memberInit에서는 생성자 메서드를 정의하지 않더라도 자바가 생성자가 1개라도 없다면 기본생성자를 만들어주다.
그렇다면 왜 만들어주냐? 만약 자바에서 기본생성자를 만들어 주지 않는다면 생성자 기능이 필요 없는데도 모든 클래스에 개발자가 직접 기본생성자를 정의해야하는 불편함 때문이다.
public class MemberConstruct {
String name;
int age;
int grade;
MemberConstruct(String name,int age, int grade){
this.name=name;
this.age=age;
this.grade=grade;
}
MemberConstruct(String name, int age){
this.name = name;
this.age = age;
this.grade = 50;
}
}
public class ConstructMain1 {
public static void main(String[] args) {
MemberConstruct member1 = new MemberConstruct("user1",15,90);
MemberConstruct member2 = new MemberConstruct("user2",30);
MemberConstruct[] memberConstructs = {member1,member2};
for (MemberConstruct memberConstruct : memberConstructs) {
System.out.println("이름:" + memberConstruct.name + "나이: "+memberConstruct.age + "성적: " +memberConstruct.grade);
}
}
}
참고 : 오버로딩 vs 오버라이딩