java - 객체지향 프로그래밍

songmin jeon·2023년 12월 1일
0

1. 객체지향 프로그래밍

  • 은행에서 입금하고 입출하는 과정을 객체지향 프로그래밍 해보기
  • class별 접근제한자 : private를 이용하여 캡슐화 적용해보기

1.1. 은행업무로 객체지향 알아보기

// 객체 접근을 하기 위해 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());		
	}
}

1.2. 코드 분석

  • BankbookMain 클래스

    • 실행 클래스
    • 메소드를 호출하여 명령 실행
  • Bankbook

    • main 호출 받아 명령실행
    • 결과 값 호출한 main에게 전달

2. Method

2-1) getter 메소드 (가져오다)
2-2) setter 메소드 (세팅하다)

필드값을 가져올때 쓰는 메서드 겟터
세팅할때 사용할때 쓰는 메서드 세터

getter 메소드에는 ( 매개변수가 없다. )
setter 메소드에는 ( 값을 대입해야 함으로 )

2-1 ) getter 메소드 (가져오다)
: private 숨겨져 있는 필드의 데이터에 접근해서

  • 다른 클래스에서 데이터를 가져갈 수 있게 만들어주는 메소드

2-2 ) setter 메소드 (세팅하다 필드 변수에 값 넣어주기)

  • setter : private 으로 숨겨져있는 필드의 데이터를 수정하고 싶을때 사용하는 메소드

2.1. getter , setter 만드는 단축키

1. Generate getter and setters.... 누르고
2. Select All 버튼 누르기
3. 해당 필요하는 getter , setter가 표기됨
4. Generate 버튼 누르면 getter , setter 완료

2.2. 생성자 메소드

(시험 예상)

  • 생성자 메소드(constructor)
  1. 객체를 생성하는 순간에 실행이 되는 메소드
  2. 필드에 있는 데이터를 객체를 생성하는 순간에 초기화(초기값)을 시켜 줄 수 있도록 로직을 작성

2-3) 생성자 특징 !!

    1. 리턴타입을 지정하지 않는다 ! (void도 작성안함!)
    1. 생성자의 이름은 클래스의 이름과 동일해야한다.(대소문자까지)
    1. 생성자도 결국 메소드() 이다.
    1. 매개변수가 아무것도 없는 생성자를 기본 생성자(default constructor)라고 부르는데 생략이 가능하다.
      단, 새로운 나만의 생성자를 만들게 되면 기본 생성자는 덮어 씌워져 버린다.
      (기본 생성자(default constructor)가 사라져 버린다.)
    1. 생성자도 오버로딩(중복정의)이 가능하다.

  • main 에서 생성자를 stu2로 생성하고 괄호 안 ( data, data, ... )
    클래스 Student의 필드 변수에 각각의 값들을 대입하려 입력하니 에러발생

  • Student 클래스 내에 생성자를 만들어주는 에러 해결책 선택..!

  • Student 클래스 내에 생성자 생성!
    이후 다음과 같이 필드 변수와 매개변수를 연결해줌!
	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() { 	// 기본 생성자
	}
profile
제가 한 번 해보겠습니다.

0개의 댓글