// 객체 접근을 하기 위해 public 사용!
public class Bankbook {
	// 은행 프로그램을 만든다고 가정!
	// 통장 정보를 저장할 수 있는 우리만의 자료형 설계도면
	// 1. Field(Data, 속성)
	// 잔액 (money)
	private int money;
	// 이름 (name)
	private String name;
	// private를 하면 클래스 내부에 존재하는 데이터는 외부에서 함부로 접근할수 없게끔
	// 정보은닉을 지켜주어야 한다! (사용자가 임의로 변경하는 것을 막기!)
	
	
	// 2. Method(Logic, 기능, 행위)
	// 입금하다(deposit)
	// --> return type 없이, 매개변수로 정수형 하나 받아오기
	// 	   로직은 아직 적지 말 것.
	// 메소드 구조
	// 접근제한자 리턴타입 메소드 이름(매개변수){로직 작성}
	public void dePosit(int money) {
		this.money += money;
		// this 키워드
		// this.money --> this가 가지고 있는 money
		// == Bankbook.money
		// : 현재 Class 그 자체(나 자신)을 지칭하는 키워드
		
	}
	
	// 출금하다(withdraw)
	// --> return type 없음, 매개변수로 정수형 하나 받아오기
	//	   로직은 아직 적지 말 것!
	public int withDraw(int money) {
		// 현재 잔액보다 출금하려는 돈이 많을 때 --> "잔액이 부족합니다." 출력
		// 현재 잔액보다 출근하려는 돈이 적을 때 --> 잔액 변경해주기(누적)
		
		if (this.money < money) {
			System.out.println("잔액이 부족합니다.");
		} else {
			this.money -= money;
		}
		return money;
	}
	
	// 잔액확인하기(showMoney)
	// --> return type 있음! int 형태를 되돌려주기
	//     매개변수는 없음. 현재 잔액을 리턴
	public int showMoney() {
		
		// 잔액을 보여줌으로 필드상에 있는 money 변수를 리턴함
		return money;
	}
}
public class BankbookMain {
	public static void main(String[] args) {
		// 1. Bankbook 설계도면을 기반으로 bank1 객체 생성
		Bankbook bank1 = new Bankbook();
		
		// 2. bank1의 잔액을 1000원 추가
		bank1.dePosit(1000);
		
		// 3. bank1에 7000원 입금
		bank1.dePosit(7000);
		System.out.println(bank1.showMoney());
		
		// 4. bank1에 5000원 출금
		bank1.withDraw(5000);
		
		// 5. bank1에 잔액을 출금
		System.out.println("고객님의 잔액은 " + bank1.showMoney());		
	}
}

BankbookMain 클래스
Bankbook
2-1) getter 메소드 (가져오다)
2-2) setter 메소드 (세팅하다)
필드값을 가져올때 쓰는 메서드 겟터
세팅할때 사용할때 쓰는 메서드 세터
getter 메소드에는 ( 매개변수가 없다. )
setter 메소드에는 ( 값을 대입해야 함으로 )
2-1 ) getter 메소드 (가져오다)
: private 숨겨져 있는 필드의 데이터에 접근해서
- 다른 클래스에서 데이터를 가져갈 수 있게 만들어주는 메소드
 
2-2 ) setter 메소드 (세팅하다 필드 변수에 값 넣어주기)
- setter : private 으로 숨겨져있는 필드의 데이터를 수정하고 싶을때 사용하는 메소드
 
 
1. Generate getter and setters.... 누르고
2. Select All 버튼 누르기
3. 해당 필요하는 getter , setter가 표기됨
4. Generate 버튼 누르면 getter , setter 완료
(시험 예상)
2-3) 생성자 특징 !!
- 리턴타입을 지정하지 않는다 ! (void도 작성안함!)
 
- 생성자의 이름은 클래스의 이름과 동일해야한다.(대소문자까지)
 
- 생성자도 결국 메소드() 이다.
 
- 매개변수가 아무것도 없는 생성자를 기본 생성자(default constructor)라고 부르는데 생략이 가능하다.
 
단, 새로운 나만의 생성자를 만들게 되면 기본 생성자는 덮어 씌워져 버린다.
(기본 생성자(default constructor)가 사라져 버린다.)
- 생성자도 오버로딩(중복정의)이 가능하다.
 



	public Student(String name, String number, int age, int scoreJava, int scoreWeb, int scoreAndroid) {
    
    	this.name = name;
		this.number = number;
		this.age = age;
		this.scoreJava = scoreJava;
		this.scoreWeb = scoreWeb;
		this.scoreAndroid = scoreAndroid;
    
    }
    
	// 메소드 오버로딩
	public Student() { 	// 기본 생성자
	}