[til 010_001] oop2

김동현·2023년 7월 25일
0

til

목록 보기
18/53
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)

자바는 기본적으로 필드명, 생성자명, 메소드명, 변수명의 중복을 허용하지 않음.
이때 사용하는것이 오버로딩

  • 클래스 내에 동일한 이름의 메서드(생성자도 포함)를
    여러개 작성하는 기법 -> 하나의 이름으로 여러 기능을 수행할 수 있게 하는 것 [ 오버로딩 조건 ]
    1) 메서드의 이름이 동일해야 한다.
    2) 매개변수의 개수, 타입, 순서 중 1개라도 달라야 함.
        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) {}
    	// 매개변수의 개수와 타입, 순서가 같아서(변수명은 신경쓰지 않음). 오버로딩 불가

0개의 댓글

관련 채용 정보