package ch04_constructor;

/*
 * 생성자 (constructor)
 * → class 명과 동일한 이름을 사용하고, 객체를 초기화하는 용도로 사용.
 * → 생성자를 정의하지 않으면, 멤버필드의 기본값으로 초기화하는 기본생성자가 자동으로 만들어져 생성.
 * → 생성자는 매개변수를 사용할 수 있기때문에 오버로딩이 가능함.
 * → 생성자를 하나라도 정의하면 기본생성자가 자동으로 만들어지지 않음.
 * → 반환타입을 정의하지 않음.
 */

public class Member {
		private String id;
		private String name;
		private int age;
		
		// 생성자의 이름은 클래스명과 동일해야함.
		public Member() {
			System.out.println("- Member() -");
			id = "none";
			name = null;
			age = 0;
		}
		
		public Member(String _id, String _name, int _age) {
			System.out.println("- String _id, String _name, int _age -");
			id = _id;
			name = _name;
			age = _age;
		}
		
		public String getId() { return id; }
		public void setId(String _id) { id = _id; }
		
		public String getName() { return name; }
		public void setName(String _name) {
			if(_name.length() <= 10) {
				name = _name;
			} else {
				System.out.println("이름은 10글자까지만 가능합니다.");
			}
		}
		
		public int getage() { return age; }
		public void setage(int _age) { 
			if(_age >= 0 && _age <= 130) {
				age = _age;
			} else {
				System.out.println("나이는 0~130 사이만 가능합니다.");
			}
		}
		
		public void info() {
			System.out.println("--- 회원정보 ---");
			System.out.println("ID    : " + id);
			System.out.println("이름  : " + name);
			System.out.println("나이  : " + age + "세");
		}

}
package ch04_constructor;

// 객체가 만들어져야 한다면 생성자가 생성되어야함.
// 객체를 만들시에 해당 클래스의 생성자가 만들어져 있음.
// 생성자를 직접 구현하지 않으면 멤버필드 값을 해당 자료형의 default값으로 초기화함.
// → 생성자를 하나도 안만들었을 때만 기본생성자가 작동함.
public class MemberManager {

	public static void main(String[] args) {
		Member manA = new Member();
		manA.info();
		
		System.out.println();
		
		// 해당 타입에 맞는 생성자를 찾아서 작동함.
		Member manB = new Member("002","manB",28);
		manB.info();
		
	}

}
package ch04_constructor;

/*
 * Book class를 정의하고, BookManager class에서 테스트하세요.
 * → 책제목, 지은이, 진열위치, 가격의 관리가 가능합니다.
 * → 멤버필드 값을 설정, 사용하는 getter, setter 메서드를 정의하세요.
 *   > 지은이 : 2~10 글자 가능.
 *     진열위치 : A, B, C만 가능.
 *     가격   : +(plus)만 가능.
 */

class Book {
	private String title;
	private String author;
	private char area;
	private int price;
	
	public String gettitle() { return title; }
	public void settitle(String _title) { title =_title; }
	
	public String getauthor() { return author; }
	public void setauthor(String _person) {
		if(_person.length() < 11 && _person.length() > 1) {
			author = _person;
		} else {
			System.out.println("지은이는 2~10글자만 가능합니다.");
		}
	}
	
	public char getarea() { return area; }
	public void setarea( char _where ) {
		if(_where == 'A' | _where == 'B' | area == 'C') {
			area = _where;
		} else {
			System.out.println("진열위치는 A, B, C만 가능합니다.");
		}
	}
	
	public int getprice() { return price; }
	public void setprice(int _price) {
		if(_price >= 0 ) {
			price = _price;
		} else {
			System.out.println("가격은 양수만 가능합니다.");
		}
	}
	
	public void info() {
		System.out.println("--- 책 정보 ---");
		System.out.println("제목     : " + title);
		System.out.println("지은이   : " + author);
		System.out.println("진열위치 : " + area);
		System.out.println("가격     : " + price + "원");
	}
}