public User() {
// 기능
System.out.println("기본 생성자로 User 객체 생성");
// 필드 초기화
userId = "user01";
userPw = "pass01";
userName = "홍길동";
userAge = 20;
userGender = '남';
// 기본생성자를 이용해서 User객체를 만들면
// 그 객체는 프린터 구문을 수행하고,
// 필드 초기화구문을 거쳐서 홍길동 하나가 만들어짐
}
// 매개변수 생성자
// ** 사용되는 기술, 변수 : 매개변수, Overlaoding(오버로딩), this
// ** 매개변수 : 생성자나 메서드 호출 시 ()안에 작성되어
// 전달되어지는 값을 저장하는 변수
// -> 전달받은 값을 저장하고 있는 매개체(지니고 있는) 역할의 변수
public User( String userId, String userPw) {
System.out.println("매개변수 생성자를 이용해서 User 객체 생성");
System.out.println(userId + "/" + userPw);
this.userId = userId;
this.userPw = userPw;
//필드 = 매개변수
// 매개변수로 전달받은 값을 필드에 초기화(this 참조 변수)
// ** this 참조변수 **
// - 객체가 자기 자신을 참조할 수 있도록 하는 변수
// - 모든 객체 내부에 숨겨져있다.
// 왜 사용?
// -> 필드명과 매개변수명이 같을 경우
// 이를 구분하기 위해서 사용한다.
}
// 필드를 전부 초기화 하는 목적의 매개변수 생성자
public User(String userId, String userPw, String userName, int userAge, char userGender ) {
this.userId = userId;
this.userPw = userPw;
this.userName = userName;
this.userAge = userAge;
this.userGender = userGender;
}
User u3 = new User("user03","pass03","김용기", 30 ,'남');
System.out.printf("u1: %s / %s / %s / %d / %c\n",
u1.getUserId(), u1.getUserPw(), u1.getUserName(),
u1.getUserAge(), u1.getUserGender());
System.out.printf("u2: %s / %s / %s / %d / %c\n",
u2.getUserId(), u2.getUserPw(), u2.getUserName(),
u2.getUserAge(), u2.getUserGender());
public void ex4() {
User u1 = new User();
// User 객체 필드 초기화 확인
u1.setUserName("홍홍");
System.out.println(u1.getUserId());
System.out.println(u1.getUserPw());
System.out.println(u1.getUserName());
System.out.println(u1.getUserAge());
System.out.println(u1.getUserGender());
User u2 = new User();
System.out.println(u2.getUserId());
System.out.println(u2.getUserPw());
System.out.println(u2.getUserName());
System.out.println(u2.getUserAge());
System.out.println(u2.getUserGender());
// 문제점 : u1 이 참조하고 있는 User 객체와
// u2 가 참조하고 있는 User 객체의 필드 값이 모두 동일함
// 왜? 같은 기본 생성자로 User 객체를 생성했기 때문에
System.out.println("--------------------");
// 해결 방법 1: setter를 이용해서 새로운 값 대입
u2.setUserId("asdf123456");
u2.setUserPw("1q2w3e");
u2.setUserName("김영희");
u2.setUserAge(19);
u2.setUserGender('여');
System.out.println(u2.getUserId());
System.out.println(u2.getUserPw());
System.out.println(u2.getUserName());
System.out.println(u2.getUserAge());
System.out.println(u2.getUserGender());
// 해결 방법 2: 매개변수 생성자를 이용해서
// 객체가 생성될 때 부터 다른값으로 필드를 초기화
User u3 = new User("test3", "password333");
System.out.println(u3.getUserId());
System.out.println(u3.getUserPw());
}
오버로딩(Over loading)
자바는 기본적으로 필드명, 생성자명, 메소드명, 변수명의 중복을 허용하지 않음.
이때 사용하는것이 오버로딩
public User() {}
public User() {}
// 기본 생성자가 이미 작성되어 있어서 중복
public User(String userId) {}
// 매개변수의 개수 같은 생성자 없음. 오버로딩 성립
public User(int userAge) {}
// 매개변수의 개수는 같지만 타입이 다름. 오버로딩 성립
public User(String userId, int userAge) {}
// 매개변수의 개수는 같지만 두번째 타입이 다름. 오버로딩 성립
public User(int userAge, String userId) {}
// 매개변수의 개수와 타입이 같지만 매개변수의 순서가 달라서. 오버로딩 성립
// public User(int userAge, String userName) {}
// 매개변수의 개수와 타입, 순서가 같아서(변수명은 신경쓰지 않음). 오버로딩 불가